<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pentalis&#039; blog on Krita development</title>
	<atom:link href="http://pentalis.org/kritablog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://pentalis.org/kritablog</link>
	<description>Diagrams, news, explanations, opinion, and more (or less)</description>
	<lastBuildDate>Tue, 28 Aug 2012 02:00:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.1</generator>
		<item>
		<title>Minimal Blob Brush</title>
		<link>http://pentalis.org/kritablog/?p=315</link>
		<comments>http://pentalis.org/kritablog/?p=315#comments</comments>
		<pubDate>Tue, 28 Aug 2012 02:00:24 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[Marathon]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=315</guid>
		<description><![CDATA[Remember this is part of my Krita-Calligra coding marathon. &#8230;while developing the blob tool (link hunt courtesy of Silvio Grosso), I was faced with the inevitable question of how many features were enough. More features is always good, except when<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=315">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>Remember this is part of my <a href="Commence Krita-Calligra coding marathon">Krita-Calligra coding marathon</a>.</p>
<p>&#8230;while developing the <a href="http://www.youtube.com/watch?v=6hHCcPro4v8">blob tool</a> (link hunt courtesy of Silvio Grosso), I was faced with the inevitable question of how many features were enough.<br />
More features is always good, except when it comes at the cost of less features elsewhere.</p>
<p>Since I am only a mere human being, and my time, like anyone else&#8217;s, is limited, this is the case.<br />
More time developing one feature is less time developing something else. More is less.<br />
Less time on this means more time for other issues. Less is more.</p>
<p>+ is -<br />
- is +</p>
<p>Visual summary:<br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2012/08/Time.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2012/08/Time.png" alt="Time distribution" title="Time" width="640" height="600" class="aligncenter size-full wp-image-316" /></a></p>
<p>Therefore I found a compromise of several points for the Blob Tool.</p>
<p>First, I had to choose between making it a Tool or a Brush Engine. The latter would make it Krita-only, but give me sensors (like pressure sensitivity) and other cool features. I decided to make it a Tool because I am already familiar with Brush Engines and I needed to practice with the Calligra Tool framework. Also, I already started it as a tool, and a brush engine that paints vectors may be confusing to some users and would require further discussion, usability work, etc. Lots of time.<br />
Second, I had to choose what features to add. Short story: only the minimal needed; no sensors; adjustable diameter, but fixed during a stroke; adjustable simplification of control points.</p>
<p>Here&#8217;s a visual summary of the GUI:<br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2012/08/Blob-interface-2.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2012/08/Blob-interface-2.png" alt="Proposed blob tool config widget, 2 different options." title="Blob interface 2" width="640" height="400" class="aligncenter size-full wp-image-320" /></a></p>
<p>What do you think?, Please vote on the upper or lower option (&#8220;Blueish&#8221; or &#8220;Greenish&#8221;). I don&#8217;t want to think too much of how to make the GUI, so I better ask you all. (Of course the background is only to identify them in the screenshot, both will have a default background when finished).</p>
<p>Nothing is set in stone, the brush can keep improving in the future, but finishing this &#8211;which after all is only practice work&#8211; and going to more pressing matters is very important, I must move fast. Less is more.</p>
<p>~Pentalis over and out.</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=315</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Commence Krita-Calligra coding marathon</title>
		<link>http://pentalis.org/kritablog/?p=288</link>
		<comments>http://pentalis.org/kritablog/?p=288#comments</comments>
		<pubDate>Sun, 26 Aug 2012 03:43:07 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[Marathon]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=288</guid>
		<description><![CDATA[Hello fellow free software users, developers, painters, and curious eyes. It&#8217;s me, Pentalis, a Krita developer (with a touch of Calligra). I&#8217;m here to announce an event. Since this is a personal blog I&#8217;ll tell you a little background for<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=288">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>Hello fellow free software users, developers, painters, and curious eyes.<br />
It&#8217;s me, Pentalis, a <a href="http://www.calligra-suite.org/krita/">Krita</a> developer (with a touch of <a href="http://www.calligra-suite.org/">Calligra</a>).</p>
<p>I&#8217;m here to announce an event.</p>
<p>Since this is a personal blog I&#8217;ll tell you a little background for this announcement (or you can jump to the TL;DR below&#8230;)</p>
<h3>========BACKGROUND========</h3>
<p>It all began several years ago, when I wanted to give something back to the community that&#8217;s given so much to me. I&#8217;m talking about those individuals who share their work without asking for anything in return; the work of those individuals makes possible nearly all the software I use, the galleries I watch and the encyclopedia I read.</p>
<p>I have many paths to follow in life, and could follow any of them.<br />
But out of those many ways, there is one that always spins in my head: this project, Krita. I haven&#8217;t reached closure with Krita; I opened the book before I even applied to GSoC (in 2010), and I am not done here yet. I&#8217;m not done with Calligra, with KDE, with Free Software, yet.<br />
I still want to give something meaningful back.</p>
<p>I don&#8217;t want to tell you how much I&#8217;ve struggled to learn to be perseverant; this lacking has been my most glaring flaw, the one I eventually just learned to accept as part of me. Fighting it has been a strife as painful and long as healing the scars of adolescence.<br />
But this burden is no longer mine.</p>
<p>This time, I&#8217;m here, I have built it; the force of will, the discipline, to do something meaningful. And I want it to be meaningful this time.</p>
<p>I have a full time job, on something I do not love to do. And yes&#8230; I could spend my free time playing games, just living, in peace&#8230; and lead an empty life; or I could bleed for a dream. I choose the latter this time.</p>
<p>Enough background.</p>
<h3>============TL;DR============</h3>
<p>Now, onto the announcement.<br />
It begins <a href="http://mail.kde.org/pipermail/kimageshop/2012-August/011268.html">with a proposal like this</a>.</p>
<p>From today and on I&#8217;m going to spend a significant amount of my free time to improve Krita/Calligra, play with the code and improve as a developer.</p>
<p>It&#8217;s a marathon, and it actually already started. My scheduler (<a href="http://projecthamster.wordpress.com/">Hamster!</a>) confirms I&#8217;ve been spending about 12 hours a week on the project already. I&#8217;ve added a new blending mode to Krita (it&#8217;s called &#8220;Behind&#8221;, If you&#8217;ve missed it from other software, now we have it), and a quick feature to add feathering and autoexpansion for the fill and fill selection tools.</p>
<p>After some debate on the mailing list and our IRC channel, we decided I was going to spend some time playing with our vector framework. I will be looking at our most hated bugs (hint: vote on them) and fixing them as I go&#8230;<br />
&#8230;and as a first exercise I&#8217;m implementing the Blob tool for Karbon and Krita; you know that one from other software pack don&#8217;t you?, You surely do. I will let you hunt for videos if you don&#8217;t know what the blob tool is.</p>
<p>I will just leave this screenshot quietly resting here&#8230;</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2012/08/Blobs.png"><img class="aligncenter size-full wp-image-289" title="Blobs" src="http://pentalis.org/kritablog/wp-content/uploads/2012/08/Blobs.png" alt="" width="880" height="650" /></a></p>
<p>&nbsp;</p>
<p>&#8230;This is my pre-alpha blob tool brush, the upper left area shows the blobs as they appear currently, the other blobs have been recolored (with the Stroke and Fill dialog in Krita, which I&#8217;m considering to give a retouch).</p>
<p>Those blobs are vector outlines, and the blue shape shows the control points (as you probably inferred). It is, indeed, an awful amount of control points &#8212;don&#8217;t worry, the final version will be clean and crisp, with very few control points: you&#8217;ll love it.</p>
<p>Victory, not vengeance!.</p>
<p>Pentalis over and out.</p>
<p>PS: The code is available in the branch <code>krita-newvectorframework-pentalis</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=288</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Preset Selector Strip for Krita</title>
		<link>http://pentalis.org/kritablog/?p=251</link>
		<comments>http://pentalis.org/kritablog/?p=251#comments</comments>
		<pubDate>Tue, 07 Jun 2011 13:19:44 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=251</guid>
		<description><![CDATA[I present you the new time-saving widget for Krita, in the form of a strip embedded in our brush configuration popup!, ready to load your preset specs and reconfigure them with ease, as well as creating new ones.<div class="read-more"><a href="http://pentalis.org/kritablog/?p=251">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been more than a year since I joined the Krita project (and Calligra and KDE as a consequence) as part of Google&#8217;s Summer of Code. There is so much to tell!, But I won&#8217;t bore you with that for now  =)  .</p>
<p>Krita, a painting application, offers a collection of brush engines; each of those can be configured to create your own personalized brushes. To do that you simply have to select a brush engine in the Brush Configuration Popup (visible in the screenshots), and set parameters at your leisure. Each fixed set of parameters is what we call a preset, which are known as brushes in other painting software.</p>
<p>Now&#8230;</p>
<p>&#8230;I present you the new time-saving widget for Krita, in the form of a strip embedded in our brush configuration popup!, ready to load your preset specs.</p>
<p>Look, old popup, without strip:<br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2011/06/Popup_without_strip.png"><img class="aligncenter size-large wp-image-252" title="Popup_without_strip" src="http://pentalis.org/kritablog/wp-content/uploads/2011/06/Popup_without_strip-1023x454.png" alt="" width="450" height="199" /></a></p>
<p>Now, behold, the same popup, with strip:<br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2011/06/Popup_with_strip.png"><img class="aligncenter size-large wp-image-253" title="Popup_with_strip" src="http://pentalis.org/kritablog/wp-content/uploads/2011/06/Popup_with_strip-1024x506.png" alt="" width="450" height="222" /></a></p>
<p>Why is this strip exciting or even worth blogging about?, Ho!, For people who use Krita often, the problem of needing too many clicks to modify a set of presets may be all too familiar.</p>
<p>With the old popup, you had to click outside to close it, select your preset in the docker*, open the popup again, and configure your preset inside, that&#8217;s 2 extra clicks overhead (to close and open the config popup) and a lot of mouse movement, for every preset: now imagine if you have to personalize a pack with over 30 of those&#8230; this new strip saves the artist all that extra mouse work, and looks good while doing it.</p>
<p><small>* We have a docker (the preset chooser docker) that presents the user with his presets and lets him select and erase some, but to access that docker, the brush config popup must be closed (it&#8217;s still a popup even though it&#8217;s huge).</small></p>
<p>See that little red icon at the lower corner of the selected preset?, It&#8217;s the delete button; when you click on a preset icon, the delete button will appear, it allows you to delete that preset immediately with a single click. Everything is placed close together such as to save the artist as much time as possible.</p>
<p>For all artists looking for an end-to-end painting application, try Krita!, Our upcoming version is looking very good. For distributions without a prepackaged version, you can take a look at <a href="http://forum.kde.org/viewtopic.php?f=139&amp;t=92880">Bugsbane&#8217;s install script</a>!.</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=251</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Krita phong filter GUI linked, thoughts on Impasto Effect</title>
		<link>http://pentalis.org/kritablog/?p=239</link>
		<comments>http://pentalis.org/kritablog/?p=239#comments</comments>
		<pubDate>Mon, 16 Aug 2010 19:30:35 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Impasto]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=239</guid>
		<description><![CDATA[Hello everybody, this is my last blog post as part of the Google Summer of Code 2010, and I&#8217;m here to tell you as briefly as possible, what happened to getting the Impasto effect in Krita. Short story: didn&#8217;t happen.<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=239">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>Hello everybody, this is my last blog post as part of the Google Summer of Code 2010, and I&#8217;m here to tell you as briefly  as possible, what happened to getting the Impasto effect in Krita.</p>
<p>Short story: didn&#8217;t happen.</p>
<p>Long story:</p>
<p>Turns out that creating new height-enabled color spaces for Krita wasn&#8217;t as easy as I thought. It began as an horribly mysterious thing that took me really long to grasp from end to end; not the concept of color spaces themselves (that&#8217;s crystal clear in my head), but the code that implements them in Krita.</p>
<p>Color spaces are plugins to color engines which are plugins too. Everything here is heavily optimized for speed and full of templates everywhere. So, there&#8217;s no way to create a single height-enabled colorspace for testing, because every tool is made to interact with each other. Either one makes a complete set of fully working height-enabled colorspaces, or nothing. Certainly creating such beautiful thing would take more than one week, possibly more than one month, so I didn&#8217;t do that.</p>
<p>But then arose the emergency plan!.</p>
<p>It consisted of adding, to a normal image, a hidden greyscale layer working as an heightmap, and a hidden phongbumpmap filter layer doing the magic on top. That was much simpler to do and I was about to make it happen. Until I decided it was going to be a rushed effort, that it was going to generate code MADE to be replaced, and that it wasn&#8217;t an easy hack anyway. I often make simple hacks to test things, or to upload working copies while I polish them further. But this approach had several shortcomings. For example it required painting operations to write to 2 devices at the same time.</p>
<p>So, I created a paintop that wrote to 2 layers at the same time to test this feature. It wrote to the normal layer and a secondary layer. It achieved the desired effect but it broke undo, pressing ctrl + Z only undid the painting in 1 layer.</p>
<p>And then came the problem of compositing the bumpmap to the image. What&#8217;s the most correct way to composite the bumpmap to the image to achieve a good impasto effect?, and what kind of heightfield should brush engines generate to make it look GOOD?.</p>
<p>Certainly all this testing gave me more questions than answers. And thorough my life I&#8217;ve learned that rushing toward a goal without a clear vision is nothing wise to do. At worst I&#8217;d get nothing done, at best a patched-together design. So I decided to accept that the impasto effect wasn&#8217;t going to be done within the timeframe of this GSoC and will instead design it with time, patience and calm.</p>
<p>Then I switched my focus to completely link the GUI of my filter just to call it &#8220;beta complete&#8221; right before the hard pencils down deadline!.</p>
<p>I made an ugly heightmap such that if it looks pretty I can blame it all on the filter. Here, enjoy the images and goodbye!.</p>

<a href='http://pentalis.org/kritablog/?attachment_id=241' title='Heightmap'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-LINKED-_-0-150x150.png" class="attachment-thumbnail" alt="Heightmap" title="Heightmap" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=242' title='Phong Bumpmap LINKED _ 1'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-LINKED-_-1-150x150.png" class="attachment-thumbnail" alt="Phong Bumpmap LINKED _ 1" title="Phong Bumpmap LINKED _ 1" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=243' title='Phong Bumpmap LINKED _ 2'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-LINKED-_-2-150x150.png" class="attachment-thumbnail" alt="Phong Bumpmap LINKED _ 2" title="Phong Bumpmap LINKED _ 2" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=244' title='Phong Bumpmap LINKED _ 3'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-LINKED-_-3-150x150.png" class="attachment-thumbnail" alt="Phong Bumpmap LINKED _ 3" title="Phong Bumpmap LINKED _ 3" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=245' title='Phong Bumpmap LINKED _ 4'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-LINKED-_-4-150x150.png" class="attachment-thumbnail" alt="Phong Bumpmap LINKED _ 4" title="Phong Bumpmap LINKED _ 4" /></a>

]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=239</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Phong bumpmaps, and using the deform brush to make molten gold</title>
		<link>http://pentalis.org/kritablog/?p=225</link>
		<comments>http://pentalis.org/kritablog/?p=225#comments</comments>
		<pubDate>Sun, 08 Aug 2010 20:17:50 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Impasto]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=225</guid>
		<description><![CDATA[There&#8217;s so much I&#8217;d like to say, but I don&#8217;t want to type another wall of text to present a new feature coming together. So!, I will let the first image speak for itself. Here, molten gold, gold paste, you<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=225">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s so much I&#8217;d like to say, but I don&#8217;t want to type another wall of text to present a new feature coming together. So!, I will let the first image speak for itself.</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/08/gold-paste.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/gold-paste.png" alt="Gold paste" title="Gold paste" width="400" height="400" class="aligncenter size-full wp-image-226" /></a></p>
<p>Here, molten gold, gold paste, you name it. My old and painfully slow python script has grown into a fast filter that applies the Phong Illumination Model on any single channel used as heightmap. It updates fast, enough to work in real time, so it&#8217;s almost ready to give people a taste of impasto!. Look at this!:</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Like-mixing-paint-2.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Like-mixing-paint-2-1024x640.png" alt="" title="Like mixing paint 2" width="450" height="281" class="aligncenter size-large wp-image-228" /></a></p>
<p>And look on what it becomes!</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Like-mixing-paint.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Like-mixing-paint-1024x640.png" alt="" title="Like mixing paint" width="450" height="281" class="aligncenter size-large wp-image-229" /></a></p>
<p>For you observant people, those are 2 filter layers there, right?. One of them is Gaussian Blur. Gaussian Blur mixed with Phong Bumpmap really creates the feeling of paste mixing. But the Gaussian Blur filter is too slow to see this effect in real time, so you&#8217;re not missing much in those screenshots.</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-GUI.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-GUI-300x163.png" alt="" title="Phong Bumpmap GUI" width="300" height="163" class="aligncenter size-medium wp-image-232" /></a><br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-GUI-2.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/08/Phong-Bumpmap-GUI-2-300x161.png" alt="" title="Phong Bumpmap GUI 2" width="300" height="161" class="aligncenter size-medium wp-image-233" /></a><br />
This is the configuration interface. I tried to do the most with the widgets I had at hand. If I went overboad trying to design a cool GUI, for example making a new widget, then I&#8217;d have run out of time.</p>
<p>Many of you may be wondering what this funky bumpmap filter has to do with Impasto. Well, you don&#8217;t need all the features of this filter to give the feeling of paint volume, it&#8217;s enough with just one white light source, but I thought many would appreciate the ability to make very interesting surfaces with just this filter and the many brushes that Krita provides. I think it can even work as a basis for textures to be used in 3D.</p>
<p>The pencils down date is approaching, and now all my effort will be focused on two fronts to get a working pre-beta Impasto out there:<br />
1.- Finally complete at least one height-enabled colorspace.<br />
2.- Give brush engines the ability to write to the height-channel in addition to the normal channels, or at least create a sample brush engine that does so!.</p>
<p>I hope you liked the screenshots.<br />
I could tell you stories about how I took 2 hours to fix a stupid bug that consisted of a missing comma, or how I broke my Fedora with a custom kernel package but I&#8217;ll spare you the details of those frustrating things  <img src='http://pentalis.org/kritablog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=225</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Under the hood, impasto in Krita</title>
		<link>http://pentalis.org/kritablog/?p=222</link>
		<comments>http://pentalis.org/kritablog/?p=222#comments</comments>
		<pubDate>Mon, 26 Jul 2010 11:56:16 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Impasto]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=222</guid>
		<description><![CDATA[A quick update on the progress of implementing impasto in Krita: this week all was under the hood progress so far. I had to understand more about Krita&#8217;s inner workings than ever before. Colorspaces and filters are plugins and I<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=222">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>A quick update on the progress of implementing impasto in Krita: this week all was under the hood progress so far. I had to understand more about Krita&#8217;s inner workings than ever before. Colorspaces and filters are plugins and I need to implement both to get a prototype impasto system in Krita. Apparently simple, but not so simple.</p>
<p>Being a self taught coder (like many out there), I had to actually learn and grasp for the first time what a template really is and how to read templates calling templates calling templates, as well as actually getting to understand and grasp how polymorphism works.</p>
<p>The other hard step is understanding the way Krita works internally. I learned about unit tests, singletons (I&#8217;ve used them before but I didn&#8217;t know they had a name and a specific purpose in programs), the colorspace registry, CMake building (specifically how to link libraries), filter building (not complex, it&#8217;s simpler than <del datetime="2010-07-26T11:46:29+00:00">paintops</del> brush engines in my opinion), and many other things.</p>
<p>Overall a week full of learning.</p>
<p>This new week (26-31) I&#8217;m going to put those things to work. Stay tuned!.</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=222</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Impasto!, Bumpmapping prototype in Python</title>
		<link>http://pentalis.org/kritablog/?p=157</link>
		<comments>http://pentalis.org/kritablog/?p=157#comments</comments>
		<pubDate>Sat, 17 Jul 2010 10:50:37 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Hatching brush]]></category>
		<category><![CDATA[Impasto]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=157</guid>
		<description><![CDATA[Halftone Brush Beta!
Bumpmapping Script in Action!
Krita is getting little spiffy additions in this year's GSoC...<div class="read-more"><a href="http://pentalis.org/kritablog/?p=157">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been about a month since my last blog entry, so let me remind you what I&#8217;m doing as part of my Google&#8217;s Summer of Code (which down here is Autumn/Winter!):</p>
<ol>
<li>A hatching and halftones brush for Krita.</li>
<li>Implementing impasto in Krita.</li>
</ol>
<p>Part 1 is virtually complete, there&#8217;s no halftones brush yet, but it&#8217;s trivial to create one from the hatching brush which is now <strong>beta!</strong>. That&#8217;s right!, all GUI is linked and you can start toying with it and have fun, change the settings to anything you like without touching the source code!  =D  here&#8217;s a little picture reminding you of what it looked like:</p>
<h2 style="text-align: center;">Halftone Brush Beta!</h2>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Zoomed_single_hatching.png"><img class="aligncenter size-medium wp-image-149" title="Zoomed single hatching" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Zoomed_single_hatching-300x228.png" alt="" width="300" height="228" /></a><br />
<a href="http://community.kde.org/Paintops/Hatching_brush">Documentation!</a></p>
<p><a href="http://wiki.koffice.org/index.php?title=Building/Building_KOffice">How to install Krita trunk and start playing!</a></p>
<p>Remember there is no way to download only Krita, you have to download all of KOffice&#8217;s source code and then you can specify the applications you want to build. If you wonder why this is so, you can check the mailing list.</p>
<p><strong>And now take a look at this&#8230;</strong></p>
<h2 style="text-align: center;"><strong>Bumpmapping Script in Action!</strong></h2>

<a href='http://pentalis.org/kritablog/?attachment_id=158' title='Angelgirl bumpmapped'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/07/angelgirl_bumpmapped-150x150.png" class="attachment-thumbnail" alt="Angelgirl bumpmapped" title="Angelgirl bumpmapped" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=159' title='Gimp Brushes Bumpmapped'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/07/gimp_brushes_bumpmapped-150x150.png" class="attachment-thumbnail" alt="Gimp Brushes Bumpmapped" title="Gimp Brushes Bumpmapped" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=161' title='Hairy Brush Bumpmapped'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/07/hairy_brush_bumpmapped1-150x150.png" class="attachment-thumbnail" alt="Hairy Brush Bumpmapped" title="Hairy Brush Bumpmapped" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=162' title='Sparks bumpmapped'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/07/sparks_bumpmapped-150x150.png" class="attachment-thumbnail" alt="Sparks bumpmapped" title="Sparks bumpmapped" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=166' title='Wood Gradient Bumpmapped'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/07/wood_gradient_bumpmapped-150x150.png" class="attachment-thumbnail" alt="Wood Gradient Bumpmapped" title="Wood Gradient Bumpmapped" /></a>
<a href='http://pentalis.org/kritablog/?attachment_id=167' title='Wood Gradient Original'><img width="150" height="150" src="http://pentalis.org/kritablog/wp-content/uploads/2010/07/wood_gradient_original-150x150.png" class="attachment-thumbnail" alt="Wood Gradient Original" title="Wood Gradient Original" /></a>

<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/07/bumpy_source.txt">Source code!</a></p>
<p>References!</p>
<ul>
<li><a href="http://www.mini.pw.edu.pl/~kotowski/Grafika/IlluminationModel/Index.html">Phong Illumination Model!</a></li>
<li><a href="http://www.gamedev.net/columns/hardcore/cgbumpmapping/">Cg bumpmapping tutorial!</a></li>
</ul>
<p>Ah, the story behind this script is so long. But to not bore you with a huge blog entry that will take as long to write as the script (hah&#8230; nah, that&#8217;s not going to happen =)  ), I&#8217;ll <del datetime="2010-07-17T09:13:21+00:00">summarize it</del> try to be brief and hope it helps you when you find yourself facing a brick wall:</p>
<ol>
<li>&#8220;So&#8230; impasto&#8230; um&#8230; where do I start?&#8221;  ===&gt;  e-mail to the community</li>
<li>&#8220;Community gave feedback!, yay!, hhm, bumpmapping&#8230; so&#8230; um&#8230; how do I bumpmap anyway?, where in Krita&#8217;s code do I even begin hacking?&#8221;  ===&gt; divide and conquer, get a bumpmap working first, then put this into Krita&#8217;s code!.</li>
<li>&#8220;Alright, let&#8217;s just make a bumpmapping algorithm&#8230;&#8221; at first I thought about raytracing, Google search&#8230; &#8220;Phong, what is this Phong thing about?&#8230; ooh!, looks interesting!&#8230;&#8221;, I tried to begin implementing it, but after realizing I was very stupid that night, I went to sleep. The next day I should be able to think clearly.</li>
<li>Checking the notes I went on with my research. I tried to immediately turn what I was doing into a program. And you know what?, In the end that was just what I needed. Because after I started making the <del>problem</del> program, I discovered what I was missing, I discovered new <strong>KEYWORDS!</strong>: &#8220;<em>Heightmap&#8221;</em> and &#8220;<em>Bumpmapping</em>&#8220;, of course I was looking for a bumpmapping algorithm, but I looked for mixtures of &#8220;<em>bumpmapping</em>&#8221; and <em>&#8220;Phong&#8221;</em>, and &#8220;<em>raytracing</em>&#8220;, but not &#8220;<em>bumpmapping</em>&#8221; and &#8220;<em>heightmap</em>&#8221; together!.</li>
<li>So again I was faced against many webpages saying essentially the same things I was reading a couple days ago. The difference is that I could actually understand what I was reading now, because I was already <em>doing it. &#8212; </em>Note that while I am well versed in the natural sciences, my problem was sadly my poor ability with math; when I saw so many formulas I couldn&#8217;t immediately grasp them, I couldn&#8217;t grasp those uses of vectors or the (now obvious) fact that the dot product of two unit vectors is the cosine of the angle between them. &#8212; But thanks to the <strong>NEW KEYWORDS</strong> (please always remember that part), I found a place which solved my vector problem much more elegantly!. That&#8217;s the second source I quoted!, <a href="http://www.gamedev.net/columns/hardcore/cgbumpmapping/">the Cg bumpmapping tutorial</a>; they were bumpmapping a bitmap, which is exactly what I wanted to do!, and they already had a solution to my exact problem!, and it was so simple, minimal, and mathematically beautiful, that I felt stupid  =)   but I learned, I learned math is something I need to improve upon.</li>
</ol>
<p>Well, that&#8217;s as far as I&#8217;ll tell the story, the lesson I want you to never forget is <strong>KEYWORDS</strong>. Keywords are KEY! (no **** Sherlock!). When you&#8217;ve finished studying, 10 years later, what do you remember about your college days?, the KEYWORDS, You know where knowledge is, you know the elements you have, the elements you require, and the elements you are missing; every one is linked to a source where you can research, and to find that source you already have all you need: the keywords.</p>
<p>Keywords I said!.</p>
<p>Until next time!</p>
<p><em>PS:</em></p>
<p><em>The odyssey also included a quest for the perfect IDE to develop in Python, because I wanted to have something better than just an editor.</em></p>
<p><em>At the moment I&#8217;m using Eclipse with PyDev, but let me tell you something: I MISS KDevelop&#8217;s highlighting of syntax!, It&#8217;s the BEST highlighting I&#8217;ve ever seen, there&#8217;s no application I have ever used that compares to it, and I&#8217;ve used commercial applications too (and I&#8217;ve searched in screenshots for equivalents). The fact that they highlight every parameter in a function with a unique color is PRICELESS.</em></p>
<p><em>Don&#8217;t get fooled by appearances, don&#8217;t you ever think KDevelop is &#8220;just another KDE app&#8221;, it is THE KDE APP, It&#8217;s a JEWEL that completely reverted my bias against KDE. Seriously guys, if you&#8217;re still reading to this point, and you&#8217;ve taken part in developing KDevelop, just let me tell you: Good Work.</em></p>
<p><em>PS 2:</em></p>
<p><em>Dmitry Kazakov helped me with the bumpmapping previews (all those with a blue titled PyGame window). The <a href="http://forum.kde.org/viewtopic.php?f=138&#038;t=88378">angel girl</a> is a digital painting in Krita made by Deevad, can you spot which bumpmap it is?.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=157</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Week 21-26 June, Sneak peak of the hatching brush approaching beta.</title>
		<link>http://pentalis.org/kritablog/?p=146</link>
		<comments>http://pentalis.org/kritablog/?p=146#comments</comments>
		<pubDate>Sun, 27 Jun 2010 22:17:15 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Hatching brush]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=146</guid>
		<description><![CDATA[Hello everybody!, I&#8217;ve been developing a hatching brush for Krita as part of my Google Summer of Code project. And the brush has been advancing steadily. This time I don&#8217;t want to give details on how I overcame each step,<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=146">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>Hello everybody!, I&#8217;ve been developing a hatching brush for Krita as part of my Google Summer of Code project.</p>
<p>And the brush has been advancing steadily. This time I don&#8217;t want to give details on how I overcame each step, it&#8217;s just the same than before. I had to learn new things about Krita codebase, I made mistakes, someone corrected me, I learned more, and then a new feature was born.</p>
<p>This time I learned to change the default values of brushes, even the curves (I had to hard code them). I also benefited from my previous weeks of preparations and, thanks to my now much cleaner code and nearly completely linked GUI, I managed to slip in many new features in a seemingly short time. But never get tricked by those apparent bursts of productivity, it&#8217;s just a result of what was built before behind the scenes.</p>
<p>So this will be just a short opening the curtain for you all to see how the brush is looking. If you are curious and want to try it, you can download Krita&#8217;s lastest source code and build it according to this tutorial!</p>
<p>http://wiki.koffice.org/index.php?title=Building/Building_KOffice</p>
<p>When the brush reaches beta I&#8217;ll finish documenting it, and then my blog post will be just a link to the documentation  <img src='http://pentalis.org/kritablog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />    full of images and (hopefully) entertaining explanations.</p>
<p>Next week I&#8217;ll be making preparations to work on implementing Impasto for Krita. The Halftone brush will remain on hold until the Hatching brush is completely done. Why?, because the logic of both brushes is so similar, that once the hatching brush is polished and ready, I can copypaste the code and create the new brush with just a few changes  <img src='http://pentalis.org/kritablog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>And now, TO THE SNEAK PEEK!, Image barrage!, RAWR!:</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Zoomed_single_hatching.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Zoomed_single_hatching.png" alt="" title="Zoomed_single_hatching" width="605" height="460" class="aligncenter size-full wp-image-149" /></a></p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Triple_crosshatching.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Triple_crosshatching.png" alt="" title="Triple_crosshatching" width="540" height="430" class="aligncenter size-full wp-image-152" /></a></p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Single_hatching.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Single_hatching.png" alt="" title="Single_hatching" width="506" height="318" class="aligncenter size-full wp-image-150" /></a></p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Single_hatching_2.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Single_hatching_2.png" alt="" title="Single_hatching_2" width="424" height="338" class="aligncenter size-full wp-image-151" /></a></p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Triple_crosshatching_thickness.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/Triple_crosshatching_thickness.png" alt="" title="Triple_crosshatching_thickness" width="409" height="351" class="aligncenter size-full wp-image-154" /></a></p>
<p>Till next time!, Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=146</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Week 13-18 June, GUI, Linking GUI, and some thoughts</title>
		<link>http://pentalis.org/kritablog/?p=138</link>
		<comments>http://pentalis.org/kritablog/?p=138#comments</comments>
		<pubDate>Sat, 19 Jun 2010 01:46:38 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Hatching brush]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=138</guid>
		<description><![CDATA[Continuing the story of the hatching brush, this week I started working on the GUI. The final results: In the first image you can see how to customize the thickness, angle and separation of the lines. Origin X and Origin<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=138">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>Continuing the story of the <a href="http://mail.kde.org/pipermail/kimageshop/2010-April/008507.html">hatching brush</a>, this week I started working on the GUI.</p>
<p>The final results:<br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/GUI-and-Crosshatching.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/GUI-and-Crosshatching-300x154.png" alt="" title="GUI and Crosshatching" width="300" height="154" class="aligncenter size-medium wp-image-139" /></a><br />
<a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/GUI-other-options.png"><img src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/GUI-other-options-300x152.png" alt="" title="GUI other options" width="300" height="152" class="aligncenter size-medium wp-image-140" /></a></p>
<p>In the first image you can see how to customize the thickness, angle and separation of the lines. Origin X and Origin Y represent the coordinate of the base line to render the lines. The term &#8220;base line&#8221; is tricky to explain, in my next blog I&#8217;ll send you all a link to the brush&#8217;s documentation where it will be explained.</p>
<p>The second screenshot shows some interesting options. The Scratch Off algorithm should solve the problem of lines thickening due to incremental passes: you can see I used 1px thick lines, but they look instead 2-3px thick, that&#8217;s the problem I&#8217;m talking about  <img src='http://pentalis.org/kritablog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   the algorithm is what I&#8217;m going to do this week.<br />
About the screenshot &#8212;><br />
The first pass shows antialiasing and subpixel precision activated.<br />
The second pass shows only subpixel precision on.<br />
The third has everything deactivated.</p>
<p>If you decide to download from SVN and test this toy, a little warning for you: Origin X and Origin Y are working as &#8220;width&#8221; and &#8220;height&#8221; of the brush at the moment. I&#8217;ll change that during this week when I link the &#8220;BrushTip&#8221; config dialogue (it&#8217;s title is visible in the screenshots).</p>
<p>That&#8217;s all for now, see you next time!.</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=138</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Week 7-12 June, Hatching Brush, Alpha</title>
		<link>http://pentalis.org/kritablog/?p=91</link>
		<comments>http://pentalis.org/kritablog/?p=91#comments</comments>
		<pubDate>Sun, 13 Jun 2010 10:38:10 +0000</pubDate>
		<dc:creator>Pentalis</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[Hatching brush]]></category>

		<guid isPermaLink="false">http://pentalis.org/kritablog/?p=91</guid>
		<description><![CDATA[The old algorithm looked good and simple, but fearing for the speed of the brush I decided to implement the dreaded algorithm based in algebra and trigonometry. Here are a couple crummy and heavily edited webcam shots of the paper<span class="ellipsis">&#8230;</span><div class="read-more"><a href="http://pentalis.org/kritablog/?p=91">Read more &#8250;</a></div><!-- end of .read-more -->]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://pentalis.org/kritablog/?p=20">old algorithm</a> looked good and simple, but fearing for the speed of the brush I decided to implement the dreaded algorithm based in algebra and trigonometry.</p>
<p>Here are a couple crummy and heavily edited webcam shots of the paper work behind the code I wrote:</p>
<table border="0" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="128*"></col>
<col width="128*"></col>
<tbody>
<tr valign="center">
<td style="text-align: right;" width="50%"><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/paper1.jpg"><img class="aligncenter size-full wp-image-93" title="paper1" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/paper1.jpg" alt="" width="200" height="162" /></a>(a)</td>
<td width="50%"><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/paper2.jpg"><img class="aligncenter size-full wp-image-94" title="paper2" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/paper2.jpg" alt="" width="238" height="168" /></a> (b)</td>
</tr>
</tbody>
</table>
<p>Like homework, many sheets of paper were required for a relatively terse answer (in this case, I think around 80 lines of code if I don&#8217;t take comments or spaces into account).</p>
<p>All the output for my original code was text sent to the console with <code>std::clog()</code> and <code>printf()</code> to confirm there were no holes in its algebra and geometry.</p>
<p>The algorithm in its current state can be summarized as follows:</p>
<p>1.- Take settings from the user, including the origin point.<br />
2.- The origin point + angle requested by the user constitute the base line of the hatching, the position of all other lines is calculated relative to that line.<br />
3.- Convert point+angle of the base line into intercept b and slope p. Make an exception for angles = 90 or -90 (I used that notation which is less ambiguous to the user). [Reminder: Any line can be described with a point and an angle, or with the algebraic expression: px + b (as long as angle is different from 90 or 270 degrees). ]<br />
4.- With lots of geometry-fu (see the code for details), calculate what are the dy and dx distances separating each line. <a href="http://pentalis.org/kritablog/?p=20">We know</a> that moving through the axis of separation s is equivalent to moving in the x or y axis, and moving through the y axis is the most convenient way (which implies only varying the intercept of the base line to discover new lines).<br />
5.- With more geometry-fu and algebra-fu (including the floating point modulus operation), determine the intercept of the lines contained in the hatching area and their intersection points, then trace them. This is done in a cycle that goes line by line.</p>
<p>Much more complex (for me) than the other algorithm, but easier on the processor (I haven&#8217;t tested, but common sense tells me that it is; math is cheap, rasterizing unused space isn&#8217;t), and looks cleaner.</p>
<p>I first had a paint operation that painted nothing, and instead dumped data to the console, describing all the points in it. Then I compared its results with my paper results. When I solved all annoying bugs including one uninitialized variable that wasn&#8217;t spotted by the compiler (very uncareful of me), and I was sure the algorithm did what I intended it to do, I ventured into trying to draw. When doing that, I discovered an omission in my algebra (I wasn&#8217;t considering the relative position of the brush, only the origin point determined by the user). Then I fixed that and obtained this brush:</p>
<p>Screenshot 1</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch2redux.png"><img class="aligncenter size-medium wp-image-134" title="glitch2redux" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch2redux-300x250.png" alt="" width="300" height="250"  /></a></p>
<p>Some lines are thicker than others. The thickness of the lines <strong>should</strong> be 1 px, but I&#8217;m using subpixel rasterization. Which causes some areas to be painted gray, and then when the mouse passes over again, they become black and make the line look thicker.</p>
<p>Appart from that, I noticed that some lines seem to get out-of-sync by 1 pixel with respect to the others. I believe that glitch too is caused by problems with sub-pixel rasterization. For example, if I trace a straight line using alt+mouse (I thank an IRL friend with no programming background for suggesting this), I get an homogeneous hatching (but still with thick lines); unlike the sometimes heterogeneous hatching I get when I use freeform angles. See below.</p>
<p>Screenshot 2</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch3_.png"><img class="aligncenter size-medium wp-image-106" title="glitch3_" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch3_-300x222.png" alt="" width="300" height="222" /></a></p>
<p>Screenshot 3</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch4_.png"><img class="aligncenter size-medium wp-image-107" title="glitch4_" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch4_-300x193.png" alt="" width="300" height="193" /></a></p>
<p>I believe the solution to the thickening lines (which look pretty cool anyway, kind of like &#8220;hand-made hatching&#8221;) is either not using sub-pixel precision, or using the &#8220;wash&#8221; painting mode instead of &#8220;build up&#8221;. Either way I plan to leave the user the option to use the mode he prefers, including this one. Sometimes a glitch becomes a feature, *wink wink nudge nudge*.</p>
<p>Screenshot 4</p>
<p><a href="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch1_.png"><img class="aligncenter size-medium wp-image-104" title="glitch1_" src="http://pentalis.org/kritablog/wp-content/uploads/2010/06/glitch1_-300x230.png" alt="" width="300" height="230" /></a></p>
<p>Now, this glitch is a disaster that tells me something is very wrong, but NOT in the algebra, but in the few painting code lines involved in my brush.</p>
<p>With certain paintop settings (like these above), as I pass the brush over the canvas, randomly a whole new hatched square appears close to the normal one, out-of-sync with respect to the others, causing this flawed pattern. I&#8217;ll have to investigate where the error is (I have a hunch of where). Maybe I could even explain the most extreme cases of the first glitch after I discover the cause of this one</p>
<p>When I link the GUI controls to the brush I&#8217;ll be able to show you some cross-hatching as well as many different patterns in the same image.</p>
<p>Till the next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://pentalis.org/kritablog/?feed=rss2&#038;p=91</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
