<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-28734006</id><updated>2011-10-02T13:21:18.466+02:00</updated><title type='text'>Thomas' Kamaelia SoC Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-28734006.post-115370201162826844</id><published>2006-07-24T02:17:00.000+02:00</published><updated>2006-07-24T02:49:20.223+02:00</updated><title type='text'>Eliminating the shared state between components</title><content type='html'>I have made a draft of how I think the 3D components could interact in a more organised and clean way than it was before. It relies on displaylists and opengl picking.&lt;br /&gt;&lt;br /&gt;Objects now do not draw themselves directly. Instead, they compile their contents into a displaylist which then gets sent to the displayservice. This way the displayservice is able to draw the objects all at once and without being dependent on the linearised scheduling of all the components. A nice side effect is that displaylists also make things faster. For dynamic objects a component could recompile its displaylist every frame. I'm not sure how well this will work though.&lt;br /&gt;&lt;br /&gt;Being able to draw the objects at any time and as often as needed, also enabled the use of picking for event processing. It works by defining a point (mouse position) and drawing the scene in GL_SELECT mode. All the objects which were drawn near the specified point can then be determined. The line/OOB intersection with every object is not needed anymore.&lt;br /&gt;&lt;br /&gt;The draft is in my Sketches folder in 3D/playground/. A working example is included in the file SimpleCube.py. It shows that it works but it could not be less spectacular (cubes again).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-115370201162826844?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/115370201162826844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=115370201162826844' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115370201162826844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115370201162826844'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/07/eliminating-shared-state-between.html' title='Eliminating the shared state between components'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-115161938454545234</id><published>2006-06-29T23:57:00.000+02:00</published><updated>2006-06-30T20:40:38.430+02:00</updated><title type='text'>Restructure</title><content type='html'>My co-mentor, Matt, gave me some interesting feedback about my work. It made me think about how I could restructure my current code, to make it more clean. It's not only about code formatting and commenting but especially about how the components interact.&lt;br /&gt;&lt;br /&gt;There is also a number of issues that I might not be able to solve easily with the current approach. For example, currently all the objects draw themselves just when they get scheduled. This works fine at the moment but only because the execution is serialized by the Axon scheduler. How the intersection tests are done is also quite impractical.&lt;br /&gt;&lt;br /&gt;I already have a few ideas how to improve the current structure. But this time I will try to come up with a well planned framework instead of just trying things. I will put my main focus on the restructure when I'm back from my holiday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-115161938454545234?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/115161938454545234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=115161938454545234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115161938454545234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115161938454545234'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/restructure.html' title='Restructure'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-115161815013963612</id><published>2006-06-29T23:44:00.000+02:00</published><updated>2006-06-29T23:55:50.156+02:00</updated><title type='text'>More widgets</title><content type='html'>I have created two new widgets, a scroll bar and  a progress bar. The bar can be dragged and a click on the arrows moves the bar by an specified amount (just the usual behaviour). The intersection test is somehow inaccurate for the right arrow, seems to be an issue with the ray/OBB test.&lt;br /&gt;&lt;br /&gt;The widgets are both coloured like the buttons (a bit boring, I know ;)  ). The example shows a scroll bar connected to a progress bar.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-9.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/320/Bildschirmfoto-9.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-115161815013963612?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/115161815013963612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=115161815013963612' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115161815013963612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115161815013963612'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/more-widgets.html' title='More widgets'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-115160660257206164</id><published>2006-06-29T20:30:00.000+02:00</published><updated>2006-06-30T00:23:42.660+02:00</updated><title type='text'>Recent progress</title><content type='html'>Lack of time in the last days kept me from updating my blog. Here are my latest advances:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pushbutton component&lt;/li&gt;&lt;li&gt;Linear interpolated paths&lt;/li&gt;&lt;li&gt;An image viewer example program&lt;/li&gt;&lt;/ul&gt;The first image shows the buttons in action. Might not look too impressive on a static image, but it is quite fun to use them (the turn 360° when pressed).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-7.0.png"&gt;&lt;img style="margin: 0px auto 10px; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/320/Bildschirmfoto-7.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second image shows the image viewer. The buttons can be used to browse through the images.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-8.0.png"&gt;&lt;img style="margin: 0px auto 10px; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/320/Bildschirmfoto-8.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-115160660257206164?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/115160660257206164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=115160660257206164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115160660257206164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115160660257206164'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/recent-progress.html' title='Recent progress'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-115066480545919223</id><published>2006-06-18T22:30:00.000+02:00</published><updated>2006-06-18T23:06:45.476+02:00</updated><title type='text'>Pygame components on 3D planes</title><content type='html'>After resolving the size issue with pygame components (now a seperate surface with power-of-2 dimensions is stored for each component), I managed to get pygame components to display on 3D planes. This is done by PygameWrapperPlane components. One of them has to be created for each pygame component. It sends a WRAPPERREQUEST to Display3D which returns the needed data to draw the corresponding surface and then it is just displayed like in TexPlanes.&lt;br /&gt;&lt;br /&gt;The tricky part was to get input events to the pygame component. While I could easily determine the point of intersection in 3D of the plane the surface was drawn on, it was not so easy to get the corresponding 2D coordinates of the surface. After a while I realised that these coords could be determined by calculating the dot product between the point of intersection and the edge vectors of the plane. This is true because the dot product is equal to the cosine of the angle between two vectors. The results then get scaled to the surface size and sent to the pygame component.&lt;br /&gt;&lt;br /&gt;To distinguish between movement and pygame component interaction, a movementMode flag now gets inserted in events sent to 3D objects. It is true when the CTRL-key is pressed.&lt;br /&gt;&lt;br /&gt;The appended picture shows the current example which is included in PygameWrapperPlane. To test the mapping I have created a simple pygame drawing board component which is called MagnaDoodle (bottom left). The example also shows two Ticker components, a Button and a SimpleCube.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-6.0.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/320/Bildschirmfoto-6.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-115066480545919223?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/115066480545919223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=115066480545919223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115066480545919223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115066480545919223'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/pygame-components-on-3d-planes.html' title='Pygame components on 3D planes'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-115004882971745285</id><published>2006-06-11T19:51:00.000+02:00</published><updated>2006-06-11T20:03:22.670+02:00</updated><title type='text'>Correct dimensions of Pygame components</title><content type='html'>I have modified Display3D to show pygame components in their requested dimesions. This is done by making the surface dimensions the next power of two but showing only the actual component area. But unfortunately, since the mouse collision tests are done inside the components (e.g. button) and against the surface size, this causes a problem.&lt;br /&gt;&lt;br /&gt;Maybe it would be a better approach to use correct sized component surfaces and blit them onto a power-of-2 surface before it is used as texture.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/320/Bildschirmfoto-8.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-115004882971745285?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/115004882971745285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=115004882971745285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115004882971745285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/115004882971745285'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/correct-dimensions-of-pygame.html' title='Correct dimensions of Pygame components'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-114995120581470271</id><published>2006-06-10T16:23:00.000+02:00</published><updated>2006-06-10T21:46:20.613+02:00</updated><title type='text'>Texturing &amp; Pygame components</title><content type='html'>I have created a new component being able to display textures on a plane in 3D. This was actually quite easy, after loading an image I simply draw a plane as usual and additionally specify texture coordinates for each vertex. I have not implemented intersection tests for planes yet but for now it is sufficient to use a thin bounding box. So the object can be moved as usual.&lt;br /&gt;&lt;br /&gt;The next obvious step for me was to handle pygame components. I wanted to be able to use them without any need for modification, so I modified Display3D to be compatible with PygameDisplay. The method &lt;span style="font-style: italic;"&gt;overridePygameDisplay()&lt;/span&gt; is used to replace the PygameDisplay singleton by an instance of Display3D&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;This way components request surfaces using PygameDisplay without knowing that they are actually interacting with Display3D.&lt;br /&gt;&lt;br /&gt;Since I used surfaces as source for the textures anyway, I just had to set up a texture for each pygame component and draw it on a plane. The 2D coordinates get converted to 3D coordinates on the far Plane. To have the pygame comps on top of everything, depth testing is deactivated before drawing them. For mouse handling, I just copied code from Pygamedisplay.&lt;br /&gt;&lt;br /&gt;An annoying limitation in OpenGL is that texture dimensions need to be a power of two. Otherwise texturing is really slow. I currently solve this by simply magnifying the dimensions of the created textures to the next power of 2.&lt;br /&gt;&lt;br /&gt;The example picture shows a rotating TexPlane showing the kamaelia cat, a moving cube, 3 buttons as well as a Ticker. The example only works with newer pygame component which send REDRAW messages.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/320/Bildschirmfoto-7.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto-6.png"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-114995120581470271?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/114995120581470271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=114995120581470271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114995120581470271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114995120581470271'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/texturing-pygame-components.html' title='Texturing &amp; Pygame components'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-114941293682732076</id><published>2006-06-04T10:46:00.000+02:00</published><updated>2006-06-05T15:08:04.213+02:00</updated><title type='text'>Intersection tests</title><content type='html'>I was able to realise intersection tests with my 3D objects. I needed this for mouse interaction, because oviously it is needed to know if the mouse position matches the objects projection. This is not as easy as in 2D because it is actually not known where the object is displayed on the screen (due to the perspective view). Therefore a ray representing your mouse position has to be intersected with the object, currently represented by a bounding box.&lt;br /&gt;&lt;br /&gt;First, I needed to get the parameters of the ray. I knew that the origin would be on (0,0,0) because this is the position of the viewer. Getting the direction was somehow more complicated. I figured out that the ray should be pointing at the projection of your mouseclick on the far plane. To shorten a long story, here is the code used for the inital calculations:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     self.nearPlaneDist = 1.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     self.farPlaneDist = 100.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     self.perspectiveAngle = 45.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     self.aspectRatio = float(self.width)/float(self.height)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     global pi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     self.farPlaneHeight = self.farPlaneDist*2.0/tan(pi/2.0-self.perspectiveAngle*pi/360.0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     self.farPlaneWidth = self.farPlaneHeight*self.aspectRatio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and the actual ray is calculated this way:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     # project mouse click position on far plane&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     xclick = float(event.pos[0]-self.width/2)*self.farPlaneWidth/float(self.width)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     yclick = float(-event.pos[1]+self.height/2)*self.farPlaneHeight/float(self.height)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;     for obj in self.objects:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    zhit = obj.intersectRay(Vector(0,0,0), Vector(xclick, yclick, -self.farPlaneDist).norm())&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Having the ray, I needed to realise the intersection. For this I found an algorithm in "Real Time Rendering" (T. Möller, E. Haines) which I implemented as method in Object3D. It has 2 parameters (origin o, direction d) to specify the ray, its return value is 0 if no intersection was detected or the distance of the origin to the nearest point of intersection. This is handy if more than one objects are intersected, to find out which one was the nearest.&lt;br /&gt;&lt;br /&gt;The output of the current test program looks just like the image shown in the last blog entry but now the cubes change their rotation direction if you click them. Additionally the distance of the intersection gets printed on the console, like this:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="font-style: italic;"&gt;HIT! ( 19.4144860387 )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;HIT! ( 14.6633880786 )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;HIT! ( 10.6484258135 )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;HIT! ( 21.4056345149 )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;HIT! ( 16.9268217722 )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The test program is viewed by running Object3D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-114941293682732076?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/114941293682732076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=114941293682732076' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114941293682732076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114941293682732076'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/intersection-tests.html' title='Intersection tests'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-114915531777679773</id><published>2006-06-01T11:36:00.000+02:00</published><updated>2006-06-01T11:49:12.553+02:00</updated><title type='text'>Basic framework</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4320/3048/1600/Bildschirmfoto.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/4320/3048/200/Bildschirmfoto.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have created a basic framework for 3D display. Currently it contains 2 classes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Display3D&lt;/span&gt; provides a display service similar to PygameDisplay in 2D. At the current stage all it does is to initialize OpenGL. It will later be responsible of processing input, managing display lists, etc.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Object3D&lt;/span&gt; is a basic 3D component. It will be a basis for future components. It knows about its orientation and draws itself after setting the correct modelview matrix.&lt;/li&gt;&lt;/ul&gt;I have created an example program to show multiple 3D objects next to each other (cubes again :) ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-114915531777679773?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/114915531777679773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=114915531777679773' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114915531777679773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114915531777679773'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/06/basic-framework.html' title='Basic framework'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-114865254798590728</id><published>2006-05-26T15:51:00.000+02:00</published><updated>2006-05-27T16:34:12.950+02:00</updated><title type='text'>Getting familiar with OpenGL again</title><content type='html'>I have coded a small 3D "Hello World", it shows a rotating cube using OpenGL. Really straightforward. The next thing will be the same using togra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-114865254798590728?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/114865254798590728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=114865254798590728' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114865254798590728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114865254798590728'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/05/getting-familiar-with-opengl-again.html' title='Getting familiar with OpenGL again'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-114858228898771511</id><published>2006-05-25T20:32:00.000+02:00</published><updated>2006-05-27T16:33:58.720+02:00</updated><title type='text'>Mini-Axon</title><content type='html'>I have just completed my own Mini-Axon. It is really impressing how this powerful system can be implemented so easily. Great tutorial, btw.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-114858228898771511?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/114858228898771511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=114858228898771511' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114858228898771511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114858228898771511'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/05/mini-axon.html' title='Mini-Axon'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-28734006.post-114857550906785909</id><published>2006-05-25T18:33:00.000+02:00</published><updated>2006-05-27T16:33:37.216+02:00</updated><title type='text'>The Opening</title><content type='html'>Here I will host the project log of my Summer of Code 2006 Kamaelia project. It is titled "3d widget framework" and will mainly be about exploring the use of 3d graphics for Kamelia. I plan to implement several components as well as a few example programs to collect experience about what is useful/interesting. I am quite sure this will be a lot of fun!&lt;br /&gt;&lt;br /&gt;Cheers, Thomas&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/28734006-114857550906785909?l=thfsoc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thfsoc.blogspot.com/feeds/114857550906785909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=28734006&amp;postID=114857550906785909' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114857550906785909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/28734006/posts/default/114857550906785909'/><link rel='alternate' type='text/html' href='http://thfsoc.blogspot.com/2006/05/opening.html' title='The Opening'/><author><name>Thomas</name><uri>http://www.blogger.com/profile/02714011717080116054</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
