<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>OOgtech</title>
	<atom:link href="http://oogtech.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://oogtech.wordpress.com</link>
	<description>Alternative Software Incubator</description>
	<lastBuildDate>Fri, 25 Dec 2009 10:20:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='oogtech.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>OOgtech</title>
		<link>http://oogtech.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://oogtech.wordpress.com/osd.xml" title="OOgtech" />
	<atom:link rel='hub' href='http://oogtech.wordpress.com/?pushpress=hub'/>
		<item>
		<title>WordPress的北京!</title>
		<link>http://oogtech.wordpress.com/2009/12/25/wordpress%e7%9a%84%e5%8c%97%e4%ba%ac/</link>
		<comments>http://oogtech.wordpress.com/2009/12/25/wordpress%e7%9a%84%e5%8c%97%e4%ba%ac/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 10:20:27 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=290</guid>
		<description><![CDATA[Today, just because it&#8217;s Christmas, Beijingers may be able to enjoy WordPress blogging like never before, since all word-press blogs seem to be finally accessible. Word-press is a cool, slick and easy to use blogging platform, but until now, the only way to get a word-press blog running in Beijing or Shanghai was to host [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=290&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Today, just because it&#8217;s Christmas, Beijingers may be able to enjoy WordPress blogging like never before, since all word-press blogs seem to be finally accessible.</p>
<p>Word-press is a cool, slick and easy to use blogging platform, but until now, the only way to get a word-press blog running in Beijing or Shanghai was to host it yourself.</p>
<p>Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/290/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/290/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/290/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=290&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/12/25/wordpress%e7%9a%84%e5%8c%97%e4%ba%ac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Seeing Double: reusing Models and Actors in Panda3D</title>
		<link>http://oogtech.wordpress.com/2009/08/24/seeing-double-panda3d-reusing-models-and-actors/</link>
		<comments>http://oogtech.wordpress.com/2009/08/24/seeing-double-panda3d-reusing-models-and-actors/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 01:55:15 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Clone]]></category>
		<category><![CDATA[Copy]]></category>
		<category><![CDATA[Duplicate]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Node]]></category>
		<category><![CDATA[NodePath]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[PandaNode]]></category>
		<category><![CDATA[Sharing]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=285</guid>
		<description><![CDATA[Sharing actor and model data in Panda3D<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=285&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Panda3D makes an essential distinction between <em>nodepaths</em> and <em>nodes</em>.</p>
<p>The easiest (and most useful) way to understand this is to consider that each node in your rendering graph (a <em>PandaNode</em> instance) is encapsulated within a <em>NodePath </em>instance.</p>
<p>Incidentally, this allows sharing nodes. The sample code below will assign an instance of a loaded actor to a new  nodepath. This process (&#8216;<a href="http://www.panda3d.org/wiki/index.php/Instancing">instantiation</a>&#8216; &#8211; according to the manual) can be repeated to share your actor.</p>
<pre>actor = Actor.Actor(<em>FILE_PATH, ...</em>)
# nodePath is the path to the node you are attaching
# your new instance to,
# e.g. the scene-graph root, <em>render</em>,<em> </em>is actually a NodePath
instancePath = nodePath.attachNewNode(<em>NAME</em>)
actor.instanceTo(instancePath)</pre>
<p>Since nodes can be shared, it&#8217;s not always possible to get the nodepath knowing the node, so it&#8217;s important to keep track of nodepath references.</p>
<p>Note that, if you play an animation on your actor, the same animation will play for every nodepath the actor is attached to. So this would be more useful to duplicate inanimate objects, or sync-ed animated objects.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/285/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/285/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/285/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=285&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/24/seeing-double-panda3d-reusing-models-and-actors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Don&#8217;t touch my IDE</title>
		<link>http://oogtech.wordpress.com/2009/08/21/dont-touch-my-ide/</link>
		<comments>http://oogtech.wordpress.com/2009/08/21/dont-touch-my-ide/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 22:02:40 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Incubator]]></category>
		<category><![CDATA[Code Editor]]></category>
		<category><![CDATA[Ergonomics]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Innovation]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming Tool]]></category>
		<category><![CDATA[Standardization]]></category>
		<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=270</guid>
		<description><![CDATA[Programmers and IDEs (or for all that matters, haphazard combinations of command line utilities) evolve into symbiotic entities that naturally reject innovation.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=270&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Programmers love their tools. It&#8217;s now been a good month that we&#8217;ve migrated to Subversion, and even though we know that FDT3 and Subversion aren&#8217;t great pals &#8211; endless configuration issues apparently, it didn&#8217;t prevent our team from ordering a fair batch of licenses at a fair price (not all Eclipse plugins are free).</p>
<p>I didn&#8217;t request a license. Instead, I ported my ergonomics to plain text programming. Programmers love their tools, and I&#8217;m no exception. Surely I love my tools. I created my tools so I could continue to love (what was to become) my job.</p>
<p>Anyway, today I sent an email to a few colleagues to let them know about my new code editor, <a href="http://www.oogtech.com/ee_ide/">ee-ide</a>. Then, feeling ill inspired, I came over at a pal&#8217;s desk in the evening and did a quick demonstration.</p>
<p>Oh my&#8230; I directed him towards the web page for <a href="http://www.antegram.com/">antegram for web</a>. I chose this one because it downloads sample code, a quick overview of how it works and even runs from inside a zip file (at least, on Windows).</p>
<p>This is how it went.</p>
<blockquote><p><strong>X</strong>: <em>(chmods the jar file)</em> Mhmff. I never run jar files. <em>(double clicks on the jar file, which an archive manager promptly deflates)</em>. Mhmff&#8230;<br />
<strong>Me</strong>: OK, do <em>java -jar &#8230;<br />
</em><strong>X</strong>:<em> </em>Mhmff <em>(UI pops up, and instantly populates with sample files and quick-start info in a corner; then, 3 double clicks later) </em>I don&#8217;t know how this works.<br />
<strong>Me</strong>: It&#8217;s OK, just check the quick start info.<br />
<strong>X</strong>: If I need to read the doc, it&#8217;s probably no good anyway.<br />
<strong>Me</strong>: OK, I&#8217;ll show you.<br />
<strong>X</strong>: Ahh&#8230; <em>(Glossing over what looks like a standard project browser)</em> Yea. I got the same thing here. I don&#8217;t use it.<br />
<strong>Me</strong>: Sure. The one in your IDE is too small. It&#8217;s not usable.<br />
<strong>X</strong>: What d&#8217;ya mean too small? Yours the same size.<br />
<strong>Me</strong>: This IDE uses several, not just one. You see the packages, classes and members first, and edit the code in a popup window. That way you always keep in touch with your design and access the code in one click.<br />
<strong>X</strong>: I use <em>nano</em> when I just need to do a quick change&#8230;<br />
<strong>Me</strong>: Say you want to design 300 classes. Do you use UML?<br />
<strong>X</strong>: I keep the design in my head. I got the design in my head and the code on the screen. It&#8217;s zero clicks. Zero clicks is faster.<br />
<strong>Me</strong>: Well, I guess that&#8217;s my problem. There is nothing in my head.<br />
<strong>X</strong>: Everybody has a different approach.</p></blockquote>
<p>Sure. I had smoother presentations. For one thing, &#8216;keeping in touch with the design&#8217; (and relying less on UML diagrams) was the way somebody described one of the first versions of Antegram, nearly 7 years ago.</p>
<p>As a professional user, I&#8217;m forever frustrated with the way companies recycle the same recipes over and over, refuse to innovate and refuse to explore potential improvements in workflow and productivity.</p>
<p>What I never want to admit is:</p>
<ul>
<li>40% of professional users are disturbed when facing a look and feel different from what they are used to.</li>
<li>90% of professional users are disturbed when facing innovative ergonomics. Innovative ergonomics are perforce different, thus definitionally inferior to what already exists.</li>
</ul>
<p>Overall, this is also why ee-ide, instead of offering an integrated, well-studied and (considered targetted applications) fairly optimal solution, is a <em>prequel </em>to Antegram &#8211; a bridge between established ergonomics and practices and futuristic stuff that (as far as I know) only perfect beginners ever acknowledged.</p>
<p>I&#8217;m still working hard to bring onboard features invented elsewhere &#8211; even though most of that stuff contributes little to the net sum in terms of ease of use and productivity.</p>
<p>OK. I&#8217;d like to stay and expand on this, but I need to disable the java look and feel in ee-ide. It will look horrible on WinXP, but that is what XP developers want.</p>
<p>I&#8217;m not giving up.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/270/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/270/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/270/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=270&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/21/dont-touch-my-ide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Bamboozle: Panda3D/Python Crash Tutorials</title>
		<link>http://oogtech.wordpress.com/2009/08/18/bamboozle-panda3dpython-crash-tutorials/</link>
		<comments>http://oogtech.wordpress.com/2009/08/18/bamboozle-panda3dpython-crash-tutorials/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 21:24:27 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Quick Start]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=263</guid>
		<description><![CDATA[An introduction to my Panda3D/Python tutorial series.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=263&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I have just completed a first aid kit if you&#8217;re itching to learn a 3D game engine. I chose <em>Panda3D</em> (<a href="http://www.panda3d.org/">www.panda3d.org</a>), which has several advantages (industry grade, open source, comprehensive, approachable, well documented). Also, it uses Python, and Python seems fairly popular in scripting games (and other things).</p>
<ul>
<li><strong><a href="http://oogtech.wordpress.com/2009/08/07/pythonpanda3d-first-steps/" target="_self">Import statements and the classpath</a></strong> &#8211; showing how Panda3D finds its eggs.</li>
<li><strong><a href="http://oogtech.wordpress.com/2009/08/11/panda3dglobalvars/" target="_self">Global objects in Panda3D</a></strong> &#8211; a little about the <em>_builtin_</em> module, and how Panda3D uses it to define global objects such as the root of the scenegraph, <em>render</em>.</li>
<li><strong><a href="http://oogtech.wordpress.com/2009/08/14/chicken-comes-first-exporting-animations-from-blender-to-panda3d/" target="_self">Exporting objects and animations from Blender</a></strong> using the Chicken plugin. I think reading this may avoid annoyances.<br />
I also wrote a short article about <a href="http://oogtech.wordpress.com/2009/08/12/blender-panda3d-clearing-the-cache/">exporting from Blender to X and clearing the</a> cache to avoid cached 3D files getting in your way.</li>
<li><strong><a href="http://oogtech.wordpress.com/2009/08/18/panda3dpython-setting-the-stage/" target="_self">Setting the stage</a></strong> &#8211; once we&#8217;ve imported our objects, how to layout our 3D scenes.</li>
<li><strong><a href="http://oogtech.wordpress.com/2009/08/18/panda3d-illuminations/">Lighting</a> &#8211; </strong>by creating light nodes and targetting them at scene graph branches to illuminate everything down a branch in the scene hierarchy.</li>
<li><strong>Animation </strong>using tasks and intervals. <a href="http://oogtech.wordpress.com/2009/08/18/panda3d-run-a-function-at-every-frame/">Tasks run every frame</a>. With<em> Sequence</em> and <em>Parallel</em>, <a href="http://oogtech.wordpress.com/2009/08/18/sequences-parallels-intervals-rock-your-panda/">intervals allow complex animation</a>.</li>
<li><strong><a href="http://oogtech.wordpress.com/2009/08/18/getting-into-it-handle-key-events-using-panda3d/">Simple Interaction</a></strong> using key events.</li>
</ul>
<p>A mix of quick reference and troubleshooting, the tutorials address intermediate to experienced programmers. The idea is to get a head start and cover essentials.</p>
<p>If you&#8217;re &#8216;new to everything&#8217;, the Panda3D website may provide a smoother learning curve.</p>
<p>Now that I&#8217;m done with this, I&#8217;m planning on starting to code a really simple game. This will get me more into Python, and will reveal shortages in this tutorial.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/263/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/263/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/263/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=263&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/18/bamboozle-panda3dpython-crash-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Panda3D/Python: Setting the Stage</title>
		<link>http://oogtech.wordpress.com/2009/08/18/panda3dpython-setting-the-stage/</link>
		<comments>http://oogtech.wordpress.com/2009/08/18/panda3dpython-setting-the-stage/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 21:09:22 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Actor]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Quick reference]]></category>
		<category><![CDATA[reparentTo]]></category>
		<category><![CDATA[Scene-graph]]></category>
		<category><![CDATA[Scenegraph]]></category>
		<category><![CDATA[setHpr]]></category>
		<category><![CDATA[setScale]]></category>
		<category><![CDATA[Setup]]></category>
		<category><![CDATA[Stage]]></category>
		<category><![CDATA[Transformations]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=265</guid>
		<description><![CDATA[Quick reference to setting up a simple scene using the Panda3D game engine<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=265&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This tutorial is intended as a quick reference to how to setup a simple scene using Panda3D &#8211; getting objects loaded, positionning them, and starting your game or virtual world.</p>
<p>If you are new to Panda3D, read and run  the <a href="http://www.panda3d.org/wiki/index.php/Starting_Panda3D" target="_blank">Panda3D hello world</a> in their manual. I also find that the manual&#8217;s <a href="http://www.panda3d.org/wiki/index.php/The_Scene_Graph">scene-graph introduction</a> may be important.<br />
Consider downloading the latest of Panda3D, Blender, Python and the Chicken plugin for Blender (The Python release shipping with Panda3D may not be supported by Blender).</p>
<p><strong>Getting up to speed </strong></p>
<pre># load global objects
import direct.directbase.DirectStart
# if you are using animated models
from direct.actor import Actor</pre>
<p><strong>Loading models and actors</strong></p>
<pre># all paths must use '/', not '\', even on Windows
loader.loadModel(<em>"path"</em>)
# an actor is a model associated with several named animations
Actor.Actor(<em>path</em>,{"<em>animName</em>":"<em>animPath</em>"}[,...])</pre>
<p>I create my models using <a href="http://www.blender.org/">Blender</a> and export them using the Chicken plugin (see <a href="http://oogtech.wordpress.com/2009/08/14/chicken-comes-first-exporting-animations-from-blender-to-panda3d/">my article about Chicken export and caveats</a>).</p>
<p><strong>Setting the stage</strong></p>
<p>Methods you can use on models and actors</p>
<pre>reparentTo(<em>aNode</em>)  # use reparentTo(render) to add to world root
setScale(<em>x,y,z</em>)    # scale
setPos(<em>x,y,z</em>)      # translate
setHpr(<em>u,v,w</em>)      # rotate (degrees, e.g. 90, 180, ...)</pre>
<p>Methods you can use on actors:</p>
<pre>play("animName")   # play an animation once
loop("animName")   # loop an animation indefinitely
stop()             # stop all animations</pre>
<p><strong>Raising the curtain</strong></p>
<p>Run:</p>
<pre>  ppython PATH</pre>
<p>where <em>PATH </em>is the path to your python script (including <em>.py</em> extension)</p>
<p><em>Note:</em> I think &#8216;ppython&#8217; is only available on Windows; there is an equivalent on Linux &#8211; check the Panda3D manual.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/265/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/265/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/265/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=265&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/18/panda3dpython-setting-the-stage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting Into it: Handle Key Events using Panda3D</title>
		<link>http://oogtech.wordpress.com/2009/08/18/getting-into-it-handle-key-events-using-panda3d/</link>
		<comments>http://oogtech.wordpress.com/2009/08/18/getting-into-it-handle-key-events-using-panda3d/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 19:51:15 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Interaction]]></category>
		<category><![CDATA[Key Events]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=261</guid>
		<description><![CDATA[Panda3D: add simple interaction to your virtual worlds using key events<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=261&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At some point I will feel an irresistible  urge to debunk the <a href="http://www.panda3d.org/wiki/index.php/Clicking_on_3D_Objects" target="_blank">hairy mouse picking section</a> of the Panda3D manual and, if at all possible, provide a *neat* API for detecting clicks on objects.</p>
<p>In the meantime, I did skim through the <a href="http://www.panda3d.org/wiki/index.php/Keyboard_Support" target="_blank">keyboard handling section</a>, and it&#8217;s not as bad as it looks. Here&#8217;s a simple recipe for key handling:</p>
<p>1. <strong>Import <em>DirectObject</em></strong> &#8211; a key handler must be a subclass of DirectObject.<br />
2. <strong>Define a key handler class </strong>inheriting from DirectObject<br />
3. <strong>Invoke <em>accept(key,function)</em></strong> to bind a key to a callback function. This can be done in your constructor.</p>
<p>Here is how it looks:</p>
<pre>#----------------------------------------------------
from direct.showbase.DirectObject import DirectObject
class KeyHandler(DirectObject):
  # constructor
  def __init__(self):
    self.accept('arrow_left', self.lookLeft)
  # handler
  def lookLeft(self):
    # this would rotate the camera to the left
    base.camera.setH(base.camera,2)
#--------------------------------------------------</pre>
<p>Useful key names (quote names, like <em>&#8216;space&#8217;</em>):</p>
<pre>arrow_left/up/down/right
f1,...,f12
escape,backspace,insert,home,...
page_up/down
enter
[l/r]shift/control/alt (you can ommit l=left or r=right)</pre>
<p>You can combine a modifier and a key, like <em>&#8216;shift-a&#8217;, &#8216;control-shift-a&#8217;. </em>Normally, you get the event on key press, if you want the key released event, you append <em>-up</em>, like &#8216;arrow_up-up&#8217; <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<p>If you&#8217;re trying to implement keys that perform an action continuously until released, it may be worth mentionning that this isn&#8217;t as simple as it looks. If you just try to detect the key-press, you&#8217;ll be getting only one key press until the key is released. You can detect repeat key presses by appending <em>-repeat </em>(e.g arrow_up-repeat). But that won&#8217;t solve the problem entirely because after pressing a key, there is a very noticeable delay before keyboard auto-repeat kicks in. I&#8217;m still looking into this one.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/261/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/261/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/261/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=261&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/18/getting-into-it-handle-key-events-using-panda3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Sequences, Parallels &amp; Intervals: Rock your Panda</title>
		<link>http://oogtech.wordpress.com/2009/08/18/sequences-parallels-intervals-rock-your-panda/</link>
		<comments>http://oogtech.wordpress.com/2009/08/18/sequences-parallels-intervals-rock-your-panda/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 18:58:01 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Actor]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Interpolators]]></category>
		<category><![CDATA[Interval]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Parallel]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Sequence]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=252</guid>
		<description><![CDATA[Using Sequences, Parallels and Intervals to create complex animations in Panda3D<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=252&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>in Panda3D, a <em>Sequence </em>is a list of &#8216;actions&#8217; to be executed in order. Each action in the sequence is executed once and waits for the previous action to finish.</p>
<pre>s=Sequence(<em>a,b,c</em>,name="NAME") # to create a sequence
s.play() # play once
s.loop() # play over and over
s.stop() # I'm making this up</pre>
<p>Typically, a sequence consists in <em>Intervals</em>. The Panda3D manual has a <a href="http://www.panda3d.org/wiki/index.php/Intervals">large chapter dedicated to Intervals</a>. Meanwhile, the Actor class provides easy methods to define intervals for position (<em>pos</em>), rotation (<em>hpr</em>) and scale (<em>scale</em>!).<br />
An interval changes a property (location, rotation, scale, color&#8230;) at every frame until that property reaches a specified target value. As you can see, an optional start value can be defined for the property we are interpolating.</p>
<pre>Actor
  posInterval(seconds,Point3(<em>x,y,z</em>), <strong>[</strong>start=Point3(<em>x0,y0,z0</em>)<strong>]</strong>)
  hprInterval(seconds,Vec3(<em>x,y,z</em>)) # in degrees, e.g (180,0,0)
  scaleInterval(...)
  posHprInterval(...)
  posScaleInterval(...)
  hprScaleInterval(...)
  posHprScaleInterval(...)</pre>
<p>A <em>Parallel</em> uses the same syntax as a sequence. With a parallel, actions are executed in&#8230; parallel.</p>
<p><strong>Import statements </strong></p>
<pre># I want to use sequences and parallels
from direct.interval.IntervalGlobal import *
# I have an actor that I want to move around/rotate
from direct.actor import Actor #use actor methods</pre>
<p><strong>Wait a second, is that all?</strong></p>
<p>You may have guessed that <em>Sequence </em>and <em>Parallel </em>inherit from <em>Interval</em>. This allows generating complex, hierarchic sequences.</p>
<p>Sometimes we just need to yield a little bit before playing a sound or doing over things. The <em>Wait </em>interval does just that.<em> </em></p>
<pre>w=Wait(<em>seconds</em>) # defines a 'pause' in a sequence</pre>
<p>Finally, the <em>Func </em>interval, lets us call any function as part of a sequence:</p>
<pre>f=Func(<em>function</em><strong>[</strong>,<em>arg1</em><strong>[</strong>,<em>arg2</em><strong>[</strong>,...<strong>]]]</strong>)</pre>
<p><strong>Use and abuse?</strong></p>
<p>Animation is an art, and you&#8217;ll find much more in the Panda3D manual, in the meantime, there&#8217;s a couple of points worth raising:</p>
<ul>
<li>Where a complex animation is not very interactive, it may not be worth programming at all. What are animation packages for?</li>
<li>If your animation is very dynamic, consider updating your objects directly using a <em>task</em> (see <a href="http://oogtech.wordpress.com/2009/08/18/panda3d-run-a-function-at-every-frame/" target="_blank">previous article</a>). Say you were programming boids. How much should we rely on intervals, and how much on intervals and sequences?</li>
</ul>
<p>That&#8217;s it for now.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/252/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/252/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/252/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=252&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/18/sequences-parallels-intervals-rock-your-panda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Panda3D: Run a Function at Every Frame</title>
		<link>http://oogtech.wordpress.com/2009/08/18/panda3d-run-a-function-at-every-frame/</link>
		<comments>http://oogtech.wordpress.com/2009/08/18/panda3d-run-a-function-at-every-frame/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 17:53:19 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Real Time Animation]]></category>
		<category><![CDATA[Task]]></category>
		<category><![CDATA[Timer]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=217</guid>
		<description><![CDATA[Reminder: from direct.task import Task OK. This and the next tutorial cover useful methods for animating your actors and scenes in Panda3D If you want a function to be called at every frame, you add a task to the task manager. taskMgr.add(Function, "FunctionName") Where a task is a function defined as follows: def Function(task): #do [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=217&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Reminder: <em>from direct.task import Task</em></p>
<p>OK. This and the next tutorial cover useful methods for animating your actors and scenes in Panda3D</p>
<p>If you want a function to be called at every frame, you add a task to the task manager.</p>
<pre>taskMgr.add(<em>Function</em>, "<em>FunctionName</em>")</pre>
<p>Where a task is a function defined as follows:</p>
<pre>def <em>Function</em>(task):
  #do something...
  return Task.cont # use Task.done to stop the task</pre>
<p>From the task argument <em>task.time </em>returns the time (in milliseconds I guess)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=217&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/18/panda3d-run-a-function-at-every-frame/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Panda3D: Illuminations</title>
		<link>http://oogtech.wordpress.com/2009/08/18/panda3d-illuminations/</link>
		<comments>http://oogtech.wordpress.com/2009/08/18/panda3d-illuminations/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 01:53:01 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Ambient]]></category>
		<category><![CDATA[AmbientLight]]></category>
		<category><![CDATA[Attenuation]]></category>
		<category><![CDATA[Directional]]></category>
		<category><![CDATA[DirectionalLight]]></category>
		<category><![CDATA[Lighting]]></category>
		<category><![CDATA[Lights]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Point]]></category>
		<category><![CDATA[PointLight]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Spotlight]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=244</guid>
		<description><![CDATA[Summary sheet for lighting using Panda3D/Python<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=244&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This import statement allows you to use lightsources:</p>
<pre>from pandac.PandaModules import *</pre>
<p><strong>1.1 Creating light sources</strong></p>
<pre>AmbientLight(<em>name</em>)
DirectionalLight(<em>name</em>)
PointLight(<em>name</em>)
    setAttenuation(Point3(<em>A, B, C</em>))  # try A=0, B=0, C between 0 and 1
Spotlight(<em>name</em>)
    setLens(<em>lens</em>) # e.g PerspectiveLens()</pre>
<p>To create colored lights:</p>
<pre><em>myLight</em>.setColor(VBase4(<em>r, g, b, a</em>))</pre>
<p><strong>1.2 Attach a light to the scenegraph</strong></p>
<pre>node = render.attachNewNode(<em>myLight</em>) # attach to root</pre>
<p>We get a node back and get then apply node methods to it (don&#8217;t apply node methods to the light objects directly).</p>
<p><strong>1.3 Light node methods</strong></p>
<pre>setPos(<em>x,y,z</em>)
lookAt(<em>myObject</em>) # nice with spots
setHpr(<em>x,y,z</em>) # direction vector; useful for directional lights</pre>
<p><strong>1.4 Select objects illuminated by a light source</strong></p>
<pre>render.setLight(<em>node</em>)  # will apply light everywhere
render.clearLight(<em>node</em>) # disable</pre>
<p>See <a href="http://www.panda3d.org/wiki/index.php/Lighting" target="_blank">Panda3D lighting basics</a> (from their website) for more details.</p>
<p>Yet  another episode in my Panda3D crash tutorial. If you followed through I&#8217;m sure you got the hang of it.</p>
<p>Damn. By the way, I haven&#8217;t tested any of this. Sure, there must be some caveats, right?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/244/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=244&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/18/panda3d-illuminations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
		<item>
		<title>Chicken Comes First: Exporting Animations from Blender to Panda3D</title>
		<link>http://oogtech.wordpress.com/2009/08/14/chicken-comes-first-exporting-animations-from-blender-to-panda3d/</link>
		<comments>http://oogtech.wordpress.com/2009/08/14/chicken-comes-first-exporting-animations-from-blender-to-panda3d/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 01:04:01 +0000</pubDate>
		<dc:creator>oogtech</dc:creator>
				<category><![CDATA[Panda3D/Python]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Panda3D]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://oogtech.wordpress.com/?p=229</guid>
		<description><![CDATA[Exporting Animations from Blender to Panda3D - Step by step<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=229&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In my last tutorial, I gave a quick explanation for Blender &gt;&gt; Panda3D conversion using the X plugin. Having said that, this didn&#8217;t make me fully confident that I&#8217;d be able to use Blender animations with Panda3D.</p>
<p>The Chicken plugin is what&#8217;s commonly used to export from Blender to Panda3D, so I decided to create a very simple animation and see if I could export it to Panda3D using Chicken.</p>
<p>First, overview of how it works:</p>
<ul>
<li>You create several animations and export them by selecting frame ranges &#8211; so for example 0 to 50 could be your first animation, 60 to 90 another animation, and so forth.</li>
<li>In Panda3D, it&#8217;s recommended to use separate files for models and animations. Chicken let&#8217;s you do that.</li>
<li>You instantiate the <em>Actor </em>class, loading your models and animations.</li>
<li>You invoke your actor to play animations.</li>
</ul>
<p>Chicken also allows exporting static models (ie, no animation)</p>
<p>This tutorial doesn&#8217;t cover using Blender. If you&#8217;re not familiar with it, it may save you quite a bit of time to get somebody showing you around. Otherwise, stay posted as I&#8217;ve been fumbling around and will publish a few links very soon.</p>
<p>Also, this tutorial assumes that you&#8217;re using the &#8216;<a href="http://www.panda3d.org/wiki/index.php/Loading_and_Animating_the_Panda_Model" target="_blank">walking panda</a>&#8216;<em> </em>tutorial as a starting point.</p>
<p>Try to follow the steps in this tutorial very carefully. All these steps are a little sensitive and it feels nicer to get something to work first &#8211; rather than fiddling for hours, which is practically what happened to me (see <em>caveats </em>below).</p>
<p><strong>Setup</strong></p>
<p>1. Download <a href="http://sourceforge.net/projects/chicken-export/" target="_blank">Chicken</a><br />
2. Copy archive content  to <em>.blender/scripts</em>/ or  similar (check the Chicken installation info)<br />
3. Ensure you have Python installed. Your version of Python needs to match whatever Blender says on startup. If versions don&#8217;t match you can only use built-in plugins with Blender.<br />
4. Ensure you have Panda3D installed. Chicken requires Panda3D</p>
<p><strong>Create and export your animation using Blender/Chicken</strong></p>
<p>1. Create an object<br />
2. Create an armature<br />
3. Parent your object under your armature. create vertex groups using the envelope when prompted.<br />
4. Remove the object from it&#8217;s parent (I just do the parenting first to create vertex groups in the only way I figured so far).<br />
5. Add the armature as a modifier to your object.<br />
6. Keyframe your armature. A couple of frames is enough for a test.<br />
7. Select your object (as far as I know, you don&#8217;t need to select the armature).<br />
8. Select export using  Chicken. The first time there&#8217;s a configuration screen but no need to touch anything as I remember.<br />
9. Add an animation (if not done automatically) using the Chicken GUI<br />
10. Export (deselect &#8216;single file&#8217;). You could enable [pview] to preview your animation (in pview, use the L key to get your materials and textures to show)</p>
<p>There&#8217;s more you can do with Chicken, but the hardest part is getting your first animation exporting correctly.</p>
<p><strong>Add your animation to your program</strong></p>
<p>After exporting, you should have two files, one for your model and one for your animation.<br />
The easiest way to test whether everything&#8217;s OK is to replace the default animation (just change the paths &#8211; you may also need to rescale the model) from the &#8216;walking panda&#8217;.<br />
I tried to get that working by including Actor code into a world definition (e.g, hacking into Solar-System step 2) and it didn&#8217;t work (model is displayed, not the animation) &#8211; at least not until I moved my <em>actor.loop</em><em>(ANIM)</em> statement out of the <em>def </em>statement. Why this doesn&#8217;t work the other way I have no idea so far.</p>
<p><strong>Caveats</strong></p>
<ul>
<li><strong>Why are my objects all white? </strong><span style="text-decoration:underline;">For materials and textures to show, you need to add some lighting to your scene</span>. Seems obvious? Maybe, but when exporting to Panda3D via the X plugin for blender, materials show, whether lighting has been added or not.</li>
<li>I had to uninstall an old version of Blender to get this to work. When I was asked whether to keep my .scripts folder, I said yes. But then, starting blender, I had no plugins working. I started over again, clearing the .scripts folder (for the record, I also asked the installer to keep my scripts under the blender folder in program files. Not sure if there&#8217;s a connection or not).</li>
<li>Chicken doesn&#8217;t support using an armature&#8217;s envelope, only vertex groups. By default, envelope is typically enabled.</li>
<li>Chicken doesn&#8217;t take into account modifiers other than envelope. Apply your modifiers before exporting.</li>
<li>As explained in the last section, I run into a problem when including the <em>loop() </em>call into a <em>def </em>statement. I&#8217;ll try to clarify this later.</li>
</ul>
<p><strong>Here comes your .egg</strong></p>
<p>I&#8217;m not really fond of this way of doing things. Never mind the lack of organisation (frame ranges! But at least it appears that we can save export configurations), it&#8217;s not very clear how 3D model updates could get into a build process automatically &#8211; Chicken exports from Blender, so we&#8217;d have to start Blender first, then somehow get Chicken to configure and run as well. However, it doesn&#8217;t seem that there is an alternative, and for trying out things on a small scale, it&#8217;s &#8216;kind of OK&#8217;.</p>
<p>That&#8217;s it for now. If you can&#8217;t get this to work, don&#8217;t hesitate to ask so I can improve this tutorial &#8211; I&#8217;ll probably link a couple of sample files and add some screenshots later on, along with references to useful Blender resources.<strong> </strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oogtech.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oogtech.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oogtech.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oogtech.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oogtech.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oogtech.wordpress.com/229/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oogtech.wordpress.com/229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oogtech.wordpress.com/229/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oogtech.wordpress.com&amp;blog=8249897&amp;post=229&amp;subd=oogtech&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oogtech.wordpress.com/2009/08/14/chicken-comes-first-exporting-animations-from-blender-to-panda3d/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/fc0900915b61e83b73758fd11ca4ed85?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oogtech</media:title>
		</media:content>
	</item>
	</channel>
</rss>
