tag:blogger.com,1999:blog-21837526267312314452024-03-12T16:10:26.586-07:00S.Kim's BlogUnknownnoreply@blogger.comBlogger69125tag:blogger.com,1999:blog-2183752626731231445.post-84108858388496885732012-04-03T12:12:00.002-07:002012-04-03T12:15:58.196-07:00Rasterization Rules<span style="font-family: Arial, Helvetica, sans-serif;">People who have experience in graphics programming using graphics APIs such as DirectX, OpenGL, and OpenGL ES, must have been familiar with the term, "Rasterization". However, how many of you have heard about "rasterization RULES"? In other words, who do you know how hardware determines that a specific pixel on shared edge between two triangles belongs to which triangle? </span><span style="font-family: Arial, Helvetica, sans-serif;">This could be a point of view from graphics hardware rather than programmer's because it is processed in driver software. Thereby, driver softwares should follow the rules up. As a result, programmers who develop the drivers should know how rasterization works. </span><span style="font-family: Arial, Helvetica, sans-serif;">However, regardless that you are a graphics driver programmer or graphics software engineer using APIs, I believe that "understanding the basic theory" is always helpful and useful to learn other concepts as well as work in various environments. </span><span style="font-family: Arial, Helvetica, sans-serif;">Today, I would like to go over "rasterization rules" in graphics. As I briefly mentioned before, 1) two polygons could share their edges (i.e., a rectangle consisting of two triangles). Another case is that 2) two lines could share the point (i.e., a set of line segments). These are two cases for the rasterization rules. </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<strong><span style="color: red; font-family: Arial, Helvetica, sans-serif;">1. Top-left rule: </span></strong><br />
<span style="font-family: Arial, Helvetica, sans-serif;">A triangle rasterization rule (in Direct3D, OpenGL, GDI) defines how vector data is mapped into raster data. The raster data is snapped to integer locations that are then culled and clipped, and per-pixel attributes are interpolated before being passed to a pixel shader. <strong>Top-left rule ensures that adjacent triangles are drawn once.</strong> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-62LKp9jncSI/T3tBgyZk9bI/AAAAAAAAAIU/D1MN2c-nhoQ/s1600/1.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" dea="true" height="197" src="http://2.bp.blogspot.com/-62LKp9jncSI/T3tBgyZk9bI/AAAAAAAAAIU/D1MN2c-nhoQ/s200/1.png" width="200" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock><shape alt="Illustration of a numbered square that shows two triangles" id="twotris" o:spid="_x0000_s1026" style="height: 122pt; margin-left: 40.6pt; margin-top: 618.2pt; position: absolute; width: 123.55pt; z-index: 251658240;" type="#_x0000_t75"><imagedata o:href="http://i.msdn.microsoft.com/dynimg/IC412663.png" src="file:///C:\DOCUME~1\kim485\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.png"></imagedata><wrap type="square"></wrap></shape></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">The shared edge is the left edge of the Triangle (0,0, 5,0, 5,5). Thus pixels on the shared edge are included into the right triangle. If we consider antialiasing or multisampling , it will be more complicated.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<br />
<span style="font-family: Arial, Helvetica, sans-serif;"><strong><span style="color: red;">2. Diamond-exit rule:</span></strong> </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;">This is a rasterization rule for line segments that share the end point. OpenGL uses a this rule to determine those fragments that are produce by rasterizing a line segment. </span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"> </span><br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: Arial, Helvetica, sans-serif;"></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-jYR-f8mu5AE/T3tK2pU9FVI/AAAAAAAAAIk/pqYEw6gOU6k/s1600/2.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><span style="font-family: Arial, Helvetica, sans-serif;"><img border="0" dea="true" height="172" src="http://2.bp.blogspot.com/-jYR-f8mu5AE/T3tK2pU9FVI/AAAAAAAAAIk/pqYEw6gOU6k/s400/2.png" width="400" /></span></a></div>
<span style="font-family: Arial, Helvetica, sans-serif;">Hence, when rasterizing a series of connected line segments, <strong>shared end points will be produced only once</strong>. Then, the diamond regions where line segment exits cause rasterization to produce fragments. </span><span style="font-family: Arial, Helvetica, sans-serif;">In the figure, two line segments share the end point that belongs to the green line based on the diamond-exit rule.</span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-58325693453659451712011-07-01T12:13:00.000-07:002011-07-11T17:56:26.012-07:00Add non-admin users to Developer Tools group on Mac<span style="font-style:italic;">[Source: http://idtechnology.blogspot.com/2010/10/add-user-to-developer-tools-group.html]</span><br /><br />To add a user to “Developer Tools” group: <br />dseditgroup -o edit -u {admin_user} -t user -a {user_name} _developerUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-72077806825970705622011-06-07T14:54:00.000-07:002011-06-07T14:56:43.892-07:00Ray Traced Games in the Cloud using MIC<a href="http://blogs.intel.com/research/2011/02/ray_traced_games_in_the_cloud.php">Ray Traced Games in the Cloud using MIC</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-63112368073445787202011-06-07T06:22:00.001-07:002011-06-07T06:22:26.837-07:00Steve Jobs talks iOS 5 at WWDC 2011<a href="http://www.linkedin.com/news?actionBar=&articleID=560757559&ids=0PdPcSdjwNdzkIejkRdPkTc3oRb38Uc3AVe34SdiMTdP0Nd3sUdjkIe38TejsQczoR&aag=true&freq=weekly&trk=eml-tod-b-ttle-4">WWDC 2011 liveblog: Steve Jobs talks iOS 5, OS X Lion, iCloud and more</a>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-2183752626731231445.post-60299231818215936352011-01-08T22:59:00.000-08:002012-04-02T09:04:20.020-07:00Bit Operation #9Print out <span style="font-weight: bold;">odd numbers</span> from 1 to 100<br />
<pre style="background-color: #eeeeee; border-bottom: rgb(153,153,153) 1px dashed; border-left: rgb(153,153,153) 1px dashed; border-right: rgb(153,153,153) 1px dashed; border-top: rgb(153,153,153) 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; height: 154px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 96.01%;"><code>
void printOddNumber()
{
for (int i = 1; i <= 100; ++i)
{
if (i & 0x01)
cout << i << \n;
}
}</code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-63888756929546452082011-01-08T22:28:00.001-08:002011-01-08T22:37:28.609-08:00Bit Operation #8<pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; font-size: 12px; overflow: auto; width: 96.17%; color: rgb(0, 0, 0); line-height: 14px; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; height: 200px; background-color: rgb(238, 238, 238);"><code><br />100000<br />100000<br />------<br />011111<br /><br />000000<br />000000<br />------<br />000000<br /><br />100000<br />000000<br />------<br />000000<br /><br />000100<br />000100<br />------<br />111011<br /><br />100100<br />100100<br />------<br />011011<br /><br />100100<br />000100<br />------<br />111011<br /><br />010101<br />101010<br />------<br />000000<br /><br />111111<br />111111<br />------<br />000000<br /><br />// A function using bitwise operators for above results. <br />unsigned int f(unsigned int a, unsigned int b)<br />{<br /> if (a & b)<br /> {<br /> return ~(a & b); <br /> }<br /> return 0;<br />}</code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-58709702030626894702011-01-08T22:12:00.000-08:002012-04-02T09:03:51.809-07:00Bit Operation #7Find the <span style="font-weight: bold;">largest possible integer</span> <br />
<pre style="background-color: #eeeeee; border-bottom: rgb(153,153,153) 1px dashed; border-left: rgb(153,153,153) 1px dashed; border-right: rgb(153,153,153) 1px dashed; border-top: rgb(153,153,153) 1px dashed; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; height: 95px; line-height: 14px; overflow: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 96.01%;"><code>
int largestInt()
{
return ~0;
}</code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-38611144222132895332011-01-08T00:14:00.000-08:002011-01-08T00:31:35.255-08:00Bit Operation #6Extract <span style="font-weight:bold;">a single bit from a character</span>.<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; font-size: 12px; overflow: auto; width: 96.17%; color: rgb(0, 0, 0); line-height: 14px; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; height: 200px; background-color: rgb(238, 238, 238);"><code><br />int extractBit(char byte, unsigned int pos) <br />{<br /> assert(pos < 8);<br /><br /> return ((byte >> pos) & 1);<br />}<br /></code></pre><br /><br />Extract <span style="font-weight:bold;">a range of bits from a character</span>.<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; font-size: 12px; overflow: auto; width: 96.17%; color: rgb(0, 0, 0); line-height: 14px; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; height: 200px; background-color: rgb(238, 238, 238);"><code><br />char extractBitRange(char byte, unsigned int startPos, unsigned int offset) <br />{<br /> assert((startPos + offset) < 8);<br /> return (byte >> startPos) & ~(0xfe << offset);<br />}<br /></code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-82696011889406867292011-01-07T23:35:00.000-08:002011-01-08T22:55:23.812-08:00Bit Operation #5How can we <span style="font-weight:bold;">check whether a particular bit</span> is ON (1) or OFF (0)?<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; font-size: 12px; overflow: auto; width: 96.17%; color: rgb(0, 0, 0); line-height: 14px; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; height: 200px; background-color: rgb(238, 238, 238);"><code><br />bool checkBitOn(unsigned int num, unsigned int i)<br />{<br /> return (num & (1 << i));<br />}<br /></code></pre> <br /><br />How can we <span style="font-weight:bold;">turn OFF a particular bit</span> in a number?<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; font-size: 12px; overflow: auto; width: 96.17%; color: rgb(0, 0, 0); line-height: 14px; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; height: 200px; background-color: rgb(238, 238, 238);"><code><br />unsigned int turnBitOff(unsigned int num, unsigned int i)<br />{<br /> return (num & (~(1 << i)));<br />}</code></pre> <br />For example, num = 00010111 and i = 4. (1<<4)==00010000 and ~(1<<4)==11101111. Hence, num&(~(1<<4))==00010111 & 11101111==00000111.<br /><br />Then, how can we <span style="font-weight:bold;">turn ON a particular bit</span> in a number?<br /><pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; font-size: 12px; overflow: auto; width: 96.17%; color: rgb(0, 0, 0); line-height: 14px; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; height: 200px; background-color: rgb(238, 238, 238);"><code><br />unsigned int turnBitOn(unsigned int num, unsigned int i)<br />{<br /> return (num | (1 << i));<br />}</code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-30858094505635886072011-01-07T23:14:00.000-08:002011-01-07T23:31:32.256-08:00Bit Operation #4Let's think about how we can <span style="font-weight:bold;">count the bit set to 1 in an integer</span>?<br /><pre style="BORDER-RIGHT: rgb(153,153,153) 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: rgb(153,153,153) 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: rgb(153,153,153) 1px dashed; WIDTH: 96.17%; COLOR: rgb(0,0,0); LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: rgb(153,153,153) 1px dashed; FONT-FAMILY: Andale Mono,Lucida Console,Monaco,fixed,monospace; HEIGHT: 200px; BACKGROUND-COLOR: rgb(238,238,238)"> <br /><code><br />int bitCount(unsigned int a)<br />{<br /> int count = 0;<br /> while (a != 0)<br /> {<br /> count += a & 0x01;<br /> a >>= 1;<br /> }<br /> return count;<br />}<br /></code></pre> Then, how can we optimize the process to work with several integers?Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-26302323634567100992011-01-06T21:30:00.000-08:002011-01-07T23:33:19.794-08:00Bit Operation #3Input parameter a is a 4 bits integer (e.g., "1100" or "1000").<br /><pre style="BORDER-RIGHT: rgb(153,153,153) 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: rgb(153,153,153) 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: rgb(153,153,153) 1px dashed; WIDTH: 96.17%; COLOR: rgb(0,0,0); LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: rgb(153,153,153) 1px dashed; FONT-FAMILY: Andale Mono,Lucida Console,Monaco,fixed,monospace; HEIGHT: 200px; BACKGROUND-COLOR: rgb(238,238,238)"><code><br />int f(int a)<br />{<br /> int b = 0;<br /> while (a >>= 1)<br /> {<br /> b++;<br /> }<br /> return b;<br />}<br /></pre></code> <br><br />case1> 1100 (b==0)->0110 (b==1)->0011 (b==2)->0001 (b==3)->0000 : return 3<br />case 2> 1000 (b==0)->0100 (b==1)->0010 (b==2)->0001 (b==3)->0000 : return 3<br /><br />This function <span style="font-weight: bold;">returns the position of the leftmost '1' bit</span> in input a.<br /><br />Now, let's consider when 'while' statement can be infinite. Zero, with no non-zero bit, returns 0. <span style="color: rgb(255, 0, 0);">A negative number throws the computer into an infinite loop.</span> See below.<br /><br /><span style="font-weight: bold;">Signed 4bits integer</span><br />+7 : 0111<br />+6 : 0110<br />+5 : 0101<br />+4 : 0100<br />+3 : 0011<br />+2: 0010<br />+1 : 0001<br />+0: 0000<br /> 0 : n/a<br />-0 : 1111<br />-1 : 1000<br />-2 : 1001<br />-3 : 1011<br />-4 : 1100<br />-5 : 1101<br />-6 : 1110<br />-7 : 1111<br /><br /><span style="font-weight: bold;">Unsigned 4 bits integer</span><br />+15 : 1111<br />:<br />+7 : 0111<br />:<br />+1 : 0001<br />+0 : n/a<br /> 0 : 0000Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-662977978504219792011-01-06T20:52:00.000-08:002011-01-07T23:34:19.740-08:00Bit Operation #2Let's think about simple examples again.<br /><br />Input: 4 bits integer x (e.g., 1010)<br /><pre style="BORDER-RIGHT: rgb(153,153,153) 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: rgb(153,153,153) 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: rgb(153,153,153) 1px dashed; WIDTH: 96.17%; COLOR: rgb(0,0,0); LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: rgb(153,153,153) 1px dashed; FONT-FAMILY: Andale Mono,Lucida Console,Monaco,fixed,monospace; HEIGHT: 200px; BACKGROUND-COLOR: rgb(238,238,238)"><br />int f(unsigned int x)<br />{<br /> return !(x & (x-1));<br />}<br /></pre></code> We know that (x & (x-1)) operation erases the rightmost 1 bit in x. Now, consider <span style="color: rgb(255, 0, 0);">an integer that is a power of two has exactly one bit that is '1'.</span> Hence, if x contains only one bit that is '1', (x & (x-1)) will be zero (0000). After applying 'logical not' operation (!), a value of 0 becomes 1 and a value other than 0 becomes 0.<br /><br />Therefore, this function <span style="font-weight: bold;">returns whether an integer is a power of two.</span> Consider one case where the input x is zero (0000). Then, this function returns 1 saying x is a power of two although zero is not a power of two. Hence, we have to modify this function as below.<br /><pre style="BORDER-RIGHT: rgb(153,153,153) 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: rgb(153,153,153) 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: rgb(153,153,153) 1px dashed; WIDTH: 96.17%; COLOR: rgb(0,0,0); LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: rgb(153,153,153) 1px dashed; FONT-FAMILY: Andale Mono,Lucida Console,Monaco,fixed,monospace; HEIGHT: 200px; BACKGROUND-COLOR: rgb(238,238,238)"><code><br />int f(unsigned int x)<br />{<br /> return x && !(x & (x-1));<br /> // same to (x != 0) && !(x & (x-1));<br />}<br /></code></pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-55915879140084899442011-01-06T20:03:00.000-08:002011-01-07T23:35:20.307-08:00Bit Operation #1Bit operation is very often asked in job interviews and can be very tricky. Here, I am going to brush up bit operation problems that can be expected in my future job interviews.<br /><br />Input: 4 bits integer x (e.g., 1010)<br /><pre style="BORDER-RIGHT: rgb(153,153,153) 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: rgb(153,153,153) 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 5px; OVERFLOW: auto; BORDER-LEFT: rgb(153,153,153) 1px dashed; WIDTH: 96.17%; COLOR: rgb(0,0,0); LINE-HEIGHT: 14px; PADDING-TOP: 5px; BORDER-BOTTOM: rgb(153,153,153) 1px dashed; FONT-FAMILY: Andale Mono,Lucida Console,Monaco,fixed,monospace; HEIGHT: 200px; BACKGROUND-COLOR: rgb(238,238,238)"><code><br />int f(unsigned int x)<br />{<br /> int a = 0;<br /> while (x != 0)<br /> {<br /> x = x & (x-1);<br /> ++a;<br /> }<br /> return a;<br />}<br /></code></pre> Let's think of what (x-1) is in the case of x = 1010. (x-1) is 1001 because the rightmost bit of 1 in x is changed to 0 and all 0 bits to the right are changed to 1. Look at this details.<br />1 0 1 0<br /> | |<br /> v v<br />1 0 0 1<br /><br />We can easily get the result after applying & operation for x and (x-1).<br /> 1 0 1 0<br />& 1 0 0 1<br /> -----------<br /> 1 0 0 0<br /><br />Hence, the result of & operation in while statement shows that the rightmost 1 bit of x turns to 0. Finally, if we do this operation until x become zero (0000), the variable 'a' will <span style="font-weight: bold;">count the number of 1 bit in x</span>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-75988148968974386252010-08-26T07:38:00.000-07:002010-08-26T07:39:38.809-07:00Converting iPhone apps to iPad<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/RY-btZ-KjX0?fs=1&hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/RY-btZ-KjX0?fs=1&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-1342771391173597432010-07-01T17:53:00.000-07:002010-07-06T17:08:48.664-07:00OpenGL and OpenGL ES Tessellator<a href="http://glprogramming.com/red/chapter11.html">Tessellators and Quadrics</a><br /><a href="http://www.flipcode.com/archives/Polygon_Tessellation_In_OpenGL.shtml">Polygon Tessellation In OpenGL</a><br /><a href="http://www.songho.ca/opengl/gl_tessellation.html">OpenGL Tessellation</a><br /><br /><a href="http://code.google.com/p/glues/">GLU ES for OpenGL ES 1.x (for Win32)</a><br /><br /><a href="http://code.google.com/p/iphone-glu/">iGLU: GLU for OpenGL ES 1.1 (for iPhone)</a><br /><a href="http://www.idevgames.com/forum/showthread.php?t=17493">gluTessellator on iPhone</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-52265920684136958562010-07-01T17:44:00.000-07:002010-07-01T17:45:36.433-07:00Anti-aliased line with Texture<a href="http://answers.oreilly.com/topic/1669-how-to-render-anti-aliased-lines-with-textures-in-ios-4/">How to Render Anti-Aliased Lines with Textures in iOS 4</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-7490194301158756992010-05-05T08:21:00.001-07:002010-05-05T08:42:01.252-07:00Sharing custom data between two iPhone applicationsIn my iPhone application work, recently one issue came up. It is separating an iPhone application that I am developing into two applications while sharing custom data (i.e., images and text files) between two applications. So, I googled several forums with this issue. Here is my findings. <br /><br />1) Using a server as a storage<br />2) Using a URL scheme<br />3) Using the pasteborad (UIPasteboard)<br />3) Using an "Address book" area<br /><br />None of these was appropriate for my project where I need to share several images (1600x1200) and text files on a device without connection to a server. So, at this moment, I conclude that there is no way to share custom data between two iPhone applications. <br /><br /><a href="http://iphonedevelopertips.com/cocoa/launching-other-apps-within-an-iphone-application.html">[Reference 1]</a> <a href="http://stackoverflow.com/questions/2091912/data-share-between-two-iphone-apps">[Reference 2]</a> <a href="http://www.iphonedevsdk.com/forum/iphone-sdk-development/21099-sharing-data-between-applications.html">[Reference 3]</a> <a href="http://www.iphonedevsdk.com/forum/iphone-sdk-development/13813-can-lite-paid-apps-share-user-data.html">[Reference 4]</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-8725850175868626832010-04-29T08:44:00.000-07:002010-04-29T08:57:33.800-07:00Code Sign Error after reinstalling provisioning profileSometimes Xcode project file easily gets messed up. For example, when I try to rebuild my application that worked well with my previous provisioning file yesterday, however I reinstall my provisioning file today. In this case, following error message can be show up; <br /><br />"Code Sign Error: Provisioning Profile (long string) can't be found."<br /><br />Here is an easy solution. <br /><br />1) Open the project file in a text editor:<br />The .xcodeproj file is actually not a file but a directory, like an application bundle. So, you can right click it in Finder to open. Then, select "package contents". Now, you will see several files. The actual project file is "project.pbxproj". Open it in a text editor. <br /><br />2) Search provisioning profile setting and manually erase the lines. Save the project file:<br />They will look like these;<br />PROVISIONING_PROFILE = "xxxxxx.....xxxxx";<br />"PROVISIONING_PROFILE[sdk=iphoneos*]" = "xxxxxx.....xxxxx";<br /><br />3) Reopen the project in Xcode and go to the settings to reselect your new provisioning profile.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-65047896928955490732010-04-22T17:46:00.000-07:002010-04-22T17:47:55.617-07:00Android on the iPhone<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/5yO2KQHkt4A&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5yO2KQHkt4A&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br /><br /><a href="http://graphite.sandslott.org:4080/pub/idroid/idroid-release-0.1a.tar.bz">Refer this blog</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-42932921273120054202010-04-19T11:14:00.000-07:002010-04-19T12:20:27.990-07:00Using camera in your iPhone ApplicationHere are some of cool stuffs that can be referred for iPhone application development using build-in camera. <br /><br /><a href="http://www.musicalgeometry.com/archives/821">1. iPhone Camera Overlay App With Custom Button Example</a><br /><a href="http://techzone.enterra-inc.com/custom-camera-applications-development-using-iphone-sdk/">2. Custom camera applications development using iPhone SDK</a><br /><a href="http://www.codza.com/custom-uiimagepickercontroller-camera-view">3. Custom UIImagePickerController camera view</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-3518209642839924062010-04-07T09:43:00.000-07:002010-04-13T13:35:58.435-07:00Using 3D models on iPhone<a href="http://www.daubit-blog.org/2009/07/iphone-sdk-mesh-collada-import/">iPhone SDK mesh COLLADA import</a><br /><br /><a href="http://www.openscenegraph.org/projects/osg/wiki/Community/OpenGL-ES">OSG new release supporting OpenGL ES</a><br /><br /><a href="www.hogbox.co.uk/data/OpenSceneGraph_IPhoneChanges.zip ">OSG on iPhone</a><br />OSG for iPhone support isn't still released (by Robert Osfield, Mar 1st 2010). But, we can try to use above changes by Thomas Holgarth.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-2183752626731231445.post-72622579387832503382010-04-06T14:01:00.000-07:002010-04-19T10:20:33.426-07:003D Game Engines for iPhone<a href="http://code.google.com/p/oolongengine/"><span style="font-weight:bold;">Oolong Engine2.0</span></a><br /><a href="http://www.neverreadpassively.com/2009/04/oolong-engine-for-iphone-first-look.html">1) Oolong Engine for the iPhone: A First Look</a><br /><a href="http://www.blumtnwerx.com/blog/2009/04/xcode-workspace-setup-for-oolong/">2) Xcode Workspace Setup for Oolong</a><br /><br /><a href="http://sio2interactive.com"><span style="font-weight:bold;">SIO2</span></a><br /><br /><a href="http://www.neverreadpassively.com/2009/03/review-of-iphone-3d-engines.html"><span style="font-weight:bold;">Review of iphone 3d engines</span></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-86490145249266380722010-04-06T13:18:00.000-07:002010-04-06T13:20:03.988-07:00ARM processor<a href="http://www.arm.com/products/processors/technologies/instruction-set-architectures.php">ARM instruction Set Architecture</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-18472209272195000492010-04-06T13:16:00.000-07:002010-04-06T13:56:37.235-07:00iPhone App's Performance<a href="http://gamesfromwithin.com/break-that-thumb-for-best-iphone-performance">Break That Thumb For Best iPhone Performance</a><br /><br /><a href="http://gamesfromwithin.com/gdc-austin-2009-squeezing-every-drop-of-performance-out-of-the-iphone">GDC Austin 2009: Squeezing Every Drop Of Performance Out Of The iPhone</a><br /><br /><a href="http://code.google.com/p/vfpmathlibrary/source/checkout">vfp math library for iPhone</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-2183752626731231445.post-81602681373557279712010-04-02T13:21:00.000-07:002010-04-02T13:22:15.936-07:00Augmented Reality (AR) brings Dibidogs alive in 3D<a href="http://www.vtt.fi/news/2010/03252010.jsp?lang=en">Dibidogs alive in 3D</a>Unknownnoreply@blogger.com0