<?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-3905887800733017231</id><updated>2011-09-02T07:23:12.110-07:00</updated><title type='text'>Notes on Lisp raytracer.</title><subtitle type='html'>just another diary</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-8731529824564332498</id><published>2011-04-05T02:51:00.000-07:00</published><updated>2011-04-05T02:51:32.891-07:00</updated><title type='text'>Working on KD-tree.</title><content type='html'>Trying to implement KD-tree for the ray tracer,&amp;nbsp;I &lt;a href="http://emacs-sbcl-slime.blogspot.com/"&gt;solve&lt;/a&gt; appearing problems with both environment and the language itself.&lt;br /&gt;Anyway, the result can be found any moment on the &lt;a href="https://github.com/paul-alkhimov/srt"&gt;github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Currently I am working on KD-tree, on the build-tree function, to be specific. The most difficult part of it seems to be a SAH function (surface area heuristics).&lt;br /&gt;&lt;br /&gt;And the next difficult part would be a traverse-kd-tree function, which is implemented, but I am looking for good testing techniques for it: a 3D geometrical data is difficult to visualize either in console or on screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-8731529824564332498?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/8731529824564332498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2011/04/working-on-kd-tree.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/8731529824564332498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/8731529824564332498'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2011/04/working-on-kd-tree.html' title='Working on KD-tree.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-3483101899040072512</id><published>2011-01-25T07:47:00.000-08:00</published><updated>2011-01-25T07:47:57.366-08:00</updated><title type='text'>Parse-line</title><content type='html'>Spent a lot of time trying to simplify and clarify the function &lt;b&gt;parse-line&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lisper.ru/apps/format/184"&gt;Here&lt;/a&gt; is the result.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-3483101899040072512?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/3483101899040072512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2011/01/parse-line.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/3483101899040072512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/3483101899040072512'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2011/01/parse-line.html' title='Parse-line'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-6041062931292974659</id><published>2011-01-19T03:15:00.000-08:00</published><updated>2011-01-19T22:53:04.305-08:00</updated><title type='text'>KD-tree</title><content type='html'>I spent a lot of time.. er.. well, I &lt;i&gt;wasted&lt;/i&gt; a lot of time fighting with Emacs, SBCL, SLIME, quicklisp, lispbuilder-sdl, MacOSX port of lispbuilder-sdl-gfx and other stuff.&lt;br /&gt;Now I am a little bit closer to my goal: skills in Lisp development.&lt;br /&gt;&lt;br /&gt;Anyway, I forced my code to work at least on Windows.&lt;br /&gt;Currently it builds a KD-tree of given OBJ-file and displays it in animated manner.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_rYe_SVJi4ZQ/TTbGg7pMt2I/AAAAAAAAHNk/e3W6kYvu1Ak/s1600/gourd.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://2.bp.blogspot.com/_rYe_SVJi4ZQ/TTbGg7pMt2I/AAAAAAAAHNk/e3W6kYvu1Ak/s320/gourd.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/oRxoYYoI554/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oRxoYYoI554?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/oRxoYYoI554?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;The code is available &lt;a href="http://lisper.ru/apps/format/182"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Don't hesitate to contact me if you wish to run it.&lt;br /&gt;I guess you would need my help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-6041062931292974659?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/6041062931292974659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2011/01/kd-tree.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/6041062931292974659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/6041062931292974659'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2011/01/kd-tree.html' title='KD-tree'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/TTbGg7pMt2I/AAAAAAAAHNk/e3W6kYvu1Ak/s72-c/gourd.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-7536416400409185716</id><published>2010-12-05T23:45:00.000-08:00</published><updated>2010-12-05T23:48:16.577-08:00</updated><title type='text'>Timeout</title><content type='html'>This blog is not abandoned (as you might have thought).&lt;br /&gt;I'm just a little bit overwhelmed with the amount of the information I got.&lt;br /&gt;Currently I read "On Lisp" by P. Graham and it takes a lot of time.&lt;br /&gt;As soon as I finish it, I will continue with RT.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-7536416400409185716?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/7536416400409185716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2010/12/timeout.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/7536416400409185716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/7536416400409185716'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2010/12/timeout.html' title='Timeout'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-5789804051818623405</id><published>2009-12-29T11:17:00.000-08:00</published><updated>2011-04-05T02:59:15.984-07:00</updated><title type='text'>OBJ file format.</title><content type='html'>For this raytracer I chose to import the OBJ file format as the easiest one to parse.&lt;br /&gt;So here is the first draft implementation of the importing of vertex positions.&lt;br /&gt;This simple code is ready to use, the form is: (take-vertexes "test-file.obj")&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_defmac.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;defmacro&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; for-each-line &lt;span class="paren2"&gt;(&lt;span class=""&gt;file line body&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="string"&gt;"Takes all liines from the file one by one."&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;`&lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_w_open.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;with-open-file&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren3"&gt;(&lt;span class=""&gt;s ,file &lt;span class="keyword"&gt;:direction&lt;/span&gt; &lt;span class="keyword"&gt;:input&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren3"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_let_l.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren4"&gt;(&lt;span class=""&gt;&lt;span class="paren5"&gt;(&lt;span class=""&gt;r &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_nil.htm" class="symbol"&gt;nil&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren5"&gt;(&lt;span class=""&gt;eof-reached &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_nil.htm" class="symbol"&gt;nil&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren4"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_loop.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;loop&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; while &lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_not.htm" class="symbol"&gt;not&lt;/a&gt; eof-reached&lt;/span&gt;)&lt;/span&gt; &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_do_do.htm" class="symbol"&gt;do&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_mult_2.htm" class="symbol"&gt;multiple-value-setq&lt;/a&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;,line eof-reached&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_rd_lin.htm" class="symbol"&gt;read-line&lt;/a&gt; s r&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_if.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; ,line ,body&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_defmac.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;defmacro&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; read-vertex-data &lt;span class="paren2"&gt;(&lt;span class=""&gt;v-line vertexes index &amp;amp;key count-only&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="string"&gt;"Reads three floats from the given line to the vertexes array starting with index.&lt;br /&gt;Index is increased and returned as a result afterwards."&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;`&lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_let_l.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let*&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren3"&gt;(&lt;span class=""&gt;&lt;span class="paren4"&gt;(&lt;span class=""&gt;trimmed-line &lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_stg_tr.htm" class="symbol"&gt;string-trim&lt;/a&gt; '&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;span class="character"&gt;#\Space&lt;/span&gt; &lt;span class="character"&gt;#\Tab&lt;/span&gt; &lt;span class="character"&gt;#\Newline&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; ,v-line&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren3"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_if.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren4"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_and.htm" class="symbol"&gt;and&lt;/a&gt; &lt;span class="paren5"&gt;(&lt;span class=""&gt;&amp;gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;string-size-in-octets trimmed-line&lt;/span&gt;)&lt;/span&gt; 2&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_chareq.htm" class="symbol"&gt;char=&lt;/a&gt; &lt;span class="character"&gt;#\v&lt;/span&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_char_.htm" class="symbol"&gt;char&lt;/a&gt; trimmed-line 0&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_or.htm" class="symbol"&gt;or&lt;/a&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_chareq.htm" class="symbol"&gt;char=&lt;/a&gt; &lt;span class="character"&gt;#\Space&lt;/span&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_char_.htm" class="symbol"&gt;char&lt;/a&gt; trimmed-line 1&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_chareq.htm" class="symbol"&gt;char=&lt;/a&gt; &lt;span class="character"&gt;#\Tab&lt;/span&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_char_.htm" class="symbol"&gt;char&lt;/a&gt; trimmed-line 1&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren4"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_let_l.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let*&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;span class="paren6"&gt;(&lt;span class=""&gt;trash1 &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm" class="symbol"&gt;t&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;trash2 &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_t.htm" class="symbol"&gt;t&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;val 0d0&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;start-from 2&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; skip "v " in the string&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_progn.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;progn&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_mult_2.htm" class="symbol"&gt;multiple-value-setq&lt;/a&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;val start-from&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_rd_fro.htm" class="symbol"&gt;read-from-string&lt;/a&gt; trimmed-line trash1 trash2 &lt;span class="keyword"&gt;:start&lt;/span&gt; start-from&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_if.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; ,vertexes &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_setf.htm" class="symbol"&gt;setf&lt;/a&gt; &lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_aref.htm" class="symbol"&gt;aref&lt;/a&gt; ,vertexes ,index&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_coerce.htm" class="symbol"&gt;coerce&lt;/a&gt; val '&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/t_short_.htm" class="symbol"&gt;double-float&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_incf_.htm" class="symbol"&gt;incf&lt;/a&gt; ,index&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_mult_2.htm" class="symbol"&gt;multiple-value-setq&lt;/a&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;val start-from&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_rd_fro.htm" class="symbol"&gt;read-from-string&lt;/a&gt; trimmed-line trash1 trash2 &lt;span class="keyword"&gt;:start&lt;/span&gt; start-from&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_if.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; ,vertexes &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_setf.htm" class="symbol"&gt;setf&lt;/a&gt; &lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_aref.htm" class="symbol"&gt;aref&lt;/a&gt; ,vertexes ,index&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_coerce.htm" class="symbol"&gt;coerce&lt;/a&gt; val '&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/t_short_.htm" class="symbol"&gt;double-float&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_incf_.htm" class="symbol"&gt;incf&lt;/a&gt; ,index&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_mult_2.htm" class="symbol"&gt;multiple-value-setq&lt;/a&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;val start-from&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_rd_fro.htm" class="symbol"&gt;read-from-string&lt;/a&gt; trimmed-line trash1 trash2 &lt;span class="keyword"&gt;:start&lt;/span&gt; start-from&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_if.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;if&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; ,vertexes &lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_setf.htm" class="symbol"&gt;setf&lt;/a&gt; &lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_aref.htm" class="symbol"&gt;aref&lt;/a&gt; ,vertexes ,index&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_coerce.htm" class="symbol"&gt;coerce&lt;/a&gt; val '&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/t_short_.htm" class="symbol"&gt;double-float&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_incf_.htm" class="symbol"&gt;incf&lt;/a&gt; ,index&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,index&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="paren1"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/m_defun.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;defun&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; take-vertexes &lt;span class="paren2"&gt;(&lt;span class=""&gt;file&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="string"&gt;"Takes all found vertexes from the given file to the given array.&lt;br /&gt;Returns the number of the read floats, not vertexes!"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="paren2"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_let_l.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let*&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren3"&gt;(&lt;span class=""&gt;&lt;span class="paren4"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_countc.htm" class="symbol"&gt;count&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/s_let_l.htm" class="symbol"&gt;&lt;i&gt;&lt;span class="symbol"&gt;let&lt;/span&gt;&lt;/i&gt;&lt;/a&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;&lt;span class="paren1"&gt;(&lt;span class=""&gt;i 0&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="paren6"&gt;(&lt;span class=""&gt;for-each-line file line &lt;span class="paren1"&gt;(&lt;span class=""&gt;read-vertex-data line &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/a_nil.htm" class="symbol"&gt;nil&lt;/a&gt; i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; i&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; only count, no store&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren4"&gt;(&lt;span class=""&gt;temporar-vertexes &lt;span class="paren5"&gt;(&lt;span class=""&gt;&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_mk_ar.htm" class="symbol"&gt;make-array&lt;/a&gt; &lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/f_countc.htm" class="symbol"&gt;count&lt;/a&gt; &lt;span class="keyword"&gt;:element-type&lt;/span&gt; '&lt;a href="http://www.lispworks.com/reference/HyperSpec/Body/t_short_.htm" class="symbol"&gt;double-float&lt;/a&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren4"&gt;(&lt;span class=""&gt;actually-read-floats 0&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="paren3"&gt;(&lt;span class=""&gt;for-each-line file line &lt;span class="paren4"&gt;(&lt;span class=""&gt;read-vertex-data line temporar-vertexes actually-read-floats&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt; &lt;span class="comment"&gt;; read+store&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;temporar-vertexes&lt;/span&gt;)&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-5789804051818623405?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/5789804051818623405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/12/obj-file-format.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/5789804051818623405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/5789804051818623405'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/12/obj-file-format.html' title='OBJ file format.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-8351748868824741745</id><published>2009-12-17T06:30:00.000-08:00</published><updated>2011-01-19T22:54:14.452-08:00</updated><title type='text'>Random rays.</title><content type='html'>Trying to generate random rays, I have got a problem.&lt;br /&gt;Basically I had few ways to get a 'random' vector or in other words a random point on the surface of the unit sphere.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a name='more'&gt;&lt;/a&gt;The first way was to  generate random points in unit cube discarding points that are out of the unit sphere.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;But it can take much time, because of points that are just being generated outside of the sphere and are being discarded just wasting time.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;The second way was to get random 'rho' and 'phi' for polar coordinates.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The problem was, I had non-uniform probability of points of the sphere due to 'cylindrical coords. -&amp;gt;spherical coords. transformation' (closer to poles - higher probability).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;The third way was to just normalize the random point in the unit cube to the unit sphere.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The problem here was, I had non-uniform probability distribution (it's pretty clear, why).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;There is another way to do it, unimplemented though. It is as follows:&lt;span style="font-style: italic;"&gt;&lt;br /&gt;"My idea is this: I want to create a tetrahedron, normalize its vertexes, split each face (triangle) with the point in the middle, normalize it and repeat recursively until I have enough points. Then I "distort" these points a little bit if any. Then I normalize them again. That's it."&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Finally, &lt;a href="http://stackoverflow.com/questions/1841014/uniform-random-monte-carlo-distribution-on-unit-sphere"&gt;I have found&lt;/a&gt; more or less easy way to generate random rays without mentioned drawbacks, thanks to &lt;a href="http://stackoverflow.com/users/34502/david-norman"&gt;David Norman&lt;/a&gt; and &lt;a href="http://mathworld.wolfram.com/SpherePointPicking.html"&gt;WolframMathWorld&lt;/a&gt;.&lt;br /&gt;It is a method marked with formulas (6), (7) and (8) in the article on the last link. It is pretty close to 'my' first method but is has z calculated not via angle, but directly. It fixes the problem with non-uniformity.&lt;br /&gt;&lt;br /&gt;And regarding the 4th described method: I will try to implement it later, I am pretty satisfied with results received from the Stackoverflow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-8351748868824741745?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/8351748868824741745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/12/random-rays.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/8351748868824741745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/8351748868824741745'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/12/random-rays.html' title='Random rays.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-6135434634462271178</id><published>2009-05-14T05:36:00.000-07:00</published><updated>2011-01-19T22:55:48.313-08:00</updated><title type='text'>Renderman.</title><content type='html'>It seems that if I want to follow industry standards, I have not too much to choose from. It is either Renderman or Mental, or Blender, or something like Cg or alike. Yes, I know that they are "of different type", but my problem is to choose something distant just to set the direction. I have no preferences, and so after talk with one guy, the Renderman was chosen. Yet I have no idea about reyes and other renderman-specific things, but I will find it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-6135434634462271178?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/6135434634462271178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/05/renderman.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/6135434634462271178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/6135434634462271178'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/05/renderman.html' title='Renderman.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-819188897677644749</id><published>2009-05-14T04:21:00.000-07:00</published><updated>2011-01-19T22:56:18.329-08:00</updated><title type='text'>Direction.</title><content type='html'>I thought a bit about this task and more and more I like the Haskell with its laconism. And more and more I see that LISP is pretty weak here comparing to the Haskell. But on the other hand, as LISP has weakness here, it has a strength somewhere else. And I believe, it is macros. Just because the LISP has nothing special else.&lt;br /&gt;&lt;br /&gt;So now my idea is to pay as much attention to macros as possible. I don't want to put them just everywhere, but simply to make the language more laconic.&lt;br /&gt;&lt;br /&gt;And one more thing, but not the least. I decided to implement the support of  some already available shader language just to be able to use the code already written for this lamguage. I am still deciding which language to chose.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-819188897677644749?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/819188897677644749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/05/direction.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/819188897677644749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/819188897677644749'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2009/05/direction.html' title='Direction.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-2763939153268051245</id><published>2008-11-22T08:19:00.000-08:00</published><updated>2008-11-22T09:23:44.252-08:00</updated><title type='text'>Next, please!</title><content type='html'>Ok, I canceled this latest change. But the library is implemented (well, taken...) and can be used any time.&lt;br /&gt;The main reason for cancellation is that I get and absorb the information faster than I implement "the best" idea I have for the moment. And that lazy computation can tie me too much. Anyway, it isn't Haskell. Alas.&lt;br /&gt;So, now the best idea is this:&lt;br /&gt;I design the language like LEGO, i.e. the language that permits to work with blocks of calculations. I imagine it like Houdini net editor or something like that with textual description. Maybe it will be XML.&lt;br /&gt;I haven't decided yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-2763939153268051245?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/2763939153268051245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/11/next-please.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/2763939153268051245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/2763939153268051245'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/11/next-please.html' title='Next, please!'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-2485851853878844011</id><published>2008-10-02T02:38:00.000-07:00</published><updated>2009-05-14T04:19:35.685-07:00</updated><title type='text'>Streams.</title><content type='html'>Impressed by lectures of Gerald Jay Sussmann and Harold Abelson, I decided to put the streams into the rendering engine to simplify it and to add lazy calculations. I'm too "imperative" and it takes some time and pain to move to functional style.&lt;br /&gt;&lt;br /&gt;One may say "First implement it and then play", but I desagree. Features are just a bunch of code which will prevent me from doing any changes. So now is the most correct time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-2485851853878844011?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/2485851853878844011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/10/streams.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/2485851853878844011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/2485851853878844011'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/10/streams.html' title='Streams.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-8129783253592329829</id><published>2008-09-29T06:51:00.000-07:00</published><updated>2008-09-29T07:01:53.169-07:00</updated><title type='text'>Self-testing.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_rYe_SVJi4ZQ/SODewY-vaLI/AAAAAAAACf4/GnpDXezF2hQ/s1600-h/test.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_rYe_SVJi4ZQ/SODewY-vaLI/AAAAAAAACf4/GnpDXezF2hQ/s400/test.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5251442088434690226" /&gt;&lt;/a&gt;&lt;br /&gt;So there is new feature in the renderer available.&lt;div&gt;It is a testing framework from the &lt;a href="http://gigamonkeys.com/book/"&gt;"Practical Common Lisp"&lt;/a&gt; book. The book is awesome and I recommend it for reading for everyone who did not read it yet.&lt;/div&gt;&lt;div&gt;Anyway, I took the "framework" as it is without changes: it suits well as it is.&lt;/div&gt;&lt;div&gt;So, not too much, but the code is revisited a little bit and, anyway, it is a progress.&lt;/div&gt;&lt;div&gt;One small step is better than nothing...&lt;/div&gt;&lt;div&gt;By the way, on the picture one can see the new "checker" shader: it shows V direction with white and U direction with solid color, putting the round mark at the first vertex in the list.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-8129783253592329829?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/8129783253592329829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/09/self-testing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/8129783253592329829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/8129783253592329829'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/09/self-testing.html' title='Self-testing.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_rYe_SVJi4ZQ/SODewY-vaLI/AAAAAAAACf4/GnpDXezF2hQ/s72-c/test.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-6145068580513622701</id><published>2008-08-26T03:19:00.000-07:00</published><updated>2008-08-27T06:30:23.957-07:00</updated><title type='text'>Path tracing.</title><content type='html'>For the main loop I decided to use path tracing as the most simple and more or less acceptable solution. So, now I'm working on it.&lt;br /&gt;The bidirectional path tracing appeared to be not so easy to implement. I just could not find enough description and formulas for it. Anyway, I can implement it later, it's not so important for now.&lt;br /&gt;So I'm working on the basic path tracing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-6145068580513622701?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/6145068580513622701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/path-tracing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/6145068580513622701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/6145068580513622701'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/path-tracing.html' title='Path tracing.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-3352952056559819765</id><published>2008-08-19T05:22:00.000-07:00</published><updated>2008-08-27T06:38:10.639-07:00</updated><title type='text'>SBCL, CLISP, CMUCL.</title><content type='html'>I spend already two or three days trying to run EMACS+SLIME+SBCL under my WinXP and Vista Home.&lt;br /&gt;So eventually I found that I use AMD Athlon64 processor. That means for example that SBCL 1.0.19 doesn't work but SBCL 1.0.13 does. So I switched to SBCL 1.0.13.&lt;br /&gt;I also use "Ubuntu+CMUCL+EMACS+SLIME" for this task (under virtual machine).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-3352952056559819765?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/3352952056559819765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/sbcl-crashes-or-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/3352952056559819765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/3352952056559819765'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/sbcl-crashes-or-not.html' title='SBCL, CLISP, CMUCL.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-4472481364151192933</id><published>2008-08-17T23:26:00.000-07:00</published><updated>2008-08-27T06:34:32.360-07:00</updated><title type='text'>Simplification.</title><content type='html'>So I added packages into the project.&lt;br /&gt;And this feature added one unexpected problem: the code seems to be slower. Much slower. Even after compilation. Anyway, the optimization will be done a little bit later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-4472481364151192933?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/4472481364151192933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/simplification.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/4472481364151192933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/4472481364151192933'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/simplification.html' title='Simplification.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-2376533077169583370</id><published>2008-08-06T02:09:00.000-07:00</published><updated>2008-08-27T06:36:43.352-07:00</updated><title type='text'>Books about raytracing.</title><content type='html'>So, I've got two new books:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;3d computer graphics. a mathematical introduction with opengl.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;realistic image synthesis using photon mapping.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;thanks to http://www.pdfchm.com/&lt;br /&gt;&lt;br /&gt;Anyway, the information I searched for is available in these books: general ray tracing. And the second book looks interesting: I was always interested in global illumination methods at all and particular in photon mapping.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-2376533077169583370?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/2376533077169583370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/books-about-raytracing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/2376533077169583370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/2376533077169583370'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/books-about-raytracing.html' title='Books about raytracing.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-4180896347156815866</id><published>2008-08-04T05:54:00.000-07:00</published><updated>2008-08-19T12:32:13.929-07:00</updated><title type='text'>The first draft render.</title><content type='html'>So, here is the first test result.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_rYe_SVJi4ZQ/SJb8RiuAI5I/AAAAAAAAB74/uZEB2IZBBU0/s1600-h/1.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_rYe_SVJi4ZQ/SJb8RiuAI5I/AAAAAAAAB74/uZEB2IZBBU0/s400/1.gif" alt="" id="BLOGGER_PHOTO_ID_5230645395545138066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The rendered data is:&lt;br /&gt;&lt;br /&gt;(list&lt;br /&gt;(make-t3d :v0 (make-v3d :x -3 :y 2 :z 0)&lt;br /&gt;             :v1 (make-v3d :x -4 :y 2 :z 2)&lt;br /&gt;             :v2 (make-v3d :x  1 :y 6 :z 0)&lt;br /&gt;             :color '"255 100 0")&lt;br /&gt;&lt;br /&gt;(make-t3d :v0 (make-v3d :x -3 :y 4 :z  0)&lt;br /&gt;             :v1 (make-v3d :x  4 :y 4 :z -5)&lt;br /&gt;             :v2 (make-v3d :x  4 :y 4 :z  5)&lt;br /&gt;             :color '"0 255 0")&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;Cameras are:&lt;br /&gt;(list&lt;br /&gt;(make-c3d :from (make-v3d :x 0 :y -3 :z 0)&lt;br /&gt;          :to   (make-v3d :x 0 :y  0 :z 0)&lt;br /&gt;          :up   (make-v3d :x 0 :y  0 :z 1)&lt;br /&gt;          :d 5&lt;br /&gt;          :w-px 320&lt;br /&gt;          :h-px 256&lt;br /&gt;          :w-m 10&lt;br /&gt;          :h-m 8)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;Lights were not used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-4180896347156815866?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/4180896347156815866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/so-here-is-first-test-result.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/4180896347156815866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/4180896347156815866'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/08/so-here-is-first-test-result.html' title='The first draft render.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_rYe_SVJi4ZQ/SJb8RiuAI5I/AAAAAAAAB74/uZEB2IZBBU0/s72-c/1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3905887800733017231.post-5093986739431146490</id><published>2008-07-30T06:51:00.000-07:00</published><updated>2010-09-09T07:35:49.760-07:00</updated><title type='text'>Ok. Let's begin.</title><content type='html'>So I decided to write a raytracer engine using LISP.&lt;br /&gt;The "first step" is available.&lt;br /&gt;It does nothing except for one important thing: being the first step, it empowers me to continue work on it.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: navy;"&gt;     1: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; version 0.1&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     2: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; Features:&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     3: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;;   main render loop.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     4: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;;   results' display function.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     5: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     6: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; All physical sizes will be called "meters".&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     7: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; They correspont to units from the scene.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     8: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;     9: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; ---------------------------------------------------&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    10: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; Stubs.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    11: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun init-screen &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;camera the-format&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;"Stub."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    12: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun update-screen &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;screen x y pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;"Stub."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    13: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun store-to-file &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;screen name the-format&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;"Stub."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    14: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; ---------------------------------------------------&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    15: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    16: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defvar *SMALL-NUM* 0.0001&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    17: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    18: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    19: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; Vectors &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    20: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    21: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defstruct V3D &lt;/span&gt;&lt;span style="color: red;"&gt;"Vector. Just x y z."&lt;/span&gt;&lt;span style="color: grey;"&gt; x y z&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    22: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    23: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;A B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;"Difference between two 3D vectors."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    24: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-V3D :x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    25: &lt;/span&gt;&lt;span style="color: grey;"&gt;         :y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    26: &lt;/span&gt;&lt;span style="color: grey;"&gt;         :z &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    27: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    28: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D+2or1 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;A B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;"Sum of 3D vectors."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    29: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;null a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    30: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-v3d :x 0 :y 0 :z 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    31: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;null b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; A&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    32: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-v3d :x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x  b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    33: &lt;/span&gt;&lt;span style="color: grey;"&gt;             :y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y  b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    34: &lt;/span&gt;&lt;span style="color: grey;"&gt;             :z &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z  b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    35: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    36: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun v3d+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;amp;rest args&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;reduce #'v3d+2or1 args&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    37: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    38: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D^ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;A B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    39: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Cross product of vectors in 3D."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    40: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-V3D :x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    41: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    42: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :z &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    43: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    44: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;A B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    45: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Dot product of two vectors in 3D."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    46: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-x B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    47: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-y B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    48: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;V3D-z B&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    49: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    50: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D-NULL-P &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    51: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Checks if the vector is zero length."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    52: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;and &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;eql &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    53: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;eql &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    54: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;eql &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    55: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    56: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D-NORMA &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    57: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Returns normalized A."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    58: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;l &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;sqrt &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    59: &lt;/span&gt;&lt;span style="color: grey;"&gt;            &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    60: &lt;/span&gt;&lt;span style="color: grey;"&gt;            &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    61: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-null-p a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    62: &lt;/span&gt;&lt;span style="color: grey;"&gt;    nil &lt;/span&gt;&lt;span style="color: green;"&gt;; cannot normalize empty vector&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    63: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-v3d :x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; l&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    64: &lt;/span&gt;&lt;span style="color: grey;"&gt;          :y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; l&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    65: &lt;/span&gt;&lt;span style="color: grey;"&gt;          :z &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; l&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    66: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    67: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun V3D-SCALE &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;A S&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; A is vector, S is scalar&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    68: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Scaling."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    69: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-v3d :x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; S&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    70: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; S&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    71: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :z &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z A&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; S&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    72: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    73: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun v3d-length &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;a b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    74: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"The length of the vector."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    75: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;dx &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    76: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;dy &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    77: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;dz &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    78: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;sqrt &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* dx dx&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* dy dy&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* dz dz&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    79: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    80: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    81: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;; Useful structures.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    82: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defstruct T3D &lt;/span&gt;&lt;span style="color: red;"&gt;"Triangle. Just 3 vertices."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    83: &lt;/span&gt;&lt;span style="color: grey;"&gt;       v0 v1 v2 &lt;/span&gt;&lt;span style="color: green;"&gt;; positions&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    84: &lt;/span&gt;&lt;span style="color: grey;"&gt;       color&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; temporar, for testing&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    85: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defstruct R3D &lt;/span&gt;&lt;span style="color: red;"&gt;"Ray. Just 2 vectors."&lt;/span&gt;&lt;span style="color: grey;"&gt; p0 p1&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    86: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defstruct C3D &lt;/span&gt;&lt;span style="color: red;"&gt;"Camera."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    87: &lt;/span&gt;&lt;span style="color: grey;"&gt;       from to up &lt;/span&gt;&lt;span style="color: green;"&gt;; vectors. up is correct and normalized&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    88: &lt;/span&gt;&lt;span style="color: grey;"&gt;       d w-px h-px w-m h-m&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; px=pixels m=meters d=distance to screen&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    89: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defstruct W3D &lt;/span&gt;&lt;span style="color: red;"&gt;"World."&lt;/span&gt;&lt;span style="color: grey;"&gt; light geometry cameras&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    90: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defstruct PIXEL3D position color depth&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    91: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: green;"&gt;;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    92: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    93: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun start-new-line &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;"Stub."&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;format t &lt;/span&gt;&lt;span style="color: red;"&gt;"~%"&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    94: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    95: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun show-pixel &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;x y pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    96: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Stub."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    97: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;null pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    98: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;format t &lt;/span&gt;&lt;span style="color: red;"&gt;"0 0 0 "&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;    99: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;format t &lt;/span&gt;&lt;span style="color: red;"&gt;"~a "&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;pixel3d-color pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   100: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   101: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun load-world &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;amp;key light-filename geometry-filename cameras-filename&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   102: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-w3d :light    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;eval &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;with-open-file &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;in light-filename&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   103: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;with-standard-io-syntax &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;read in&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   104: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :geometry &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;eval &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;with-open-file &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;in geometry-filename&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   105: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;with-standard-io-syntax &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;read in&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   106: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :cameras  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;eval &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;with-open-file &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;in cameras-filename&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   107: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;with-standard-io-syntax &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;read in&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   108: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   109: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun emit-ray &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;camera x y&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   110: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Emits one ray using given camera."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   111: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;w &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-w-m camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   112: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-w-px camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;   &lt;/span&gt;&lt;span style="color: green;"&gt;; physical pixel width&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   113: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;h &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-h-m camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   114: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-h-px camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; physical pixel height&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   115: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;f &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-scale &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-norma &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-to camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-from camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   116: &lt;/span&gt;&lt;span style="color: grey;"&gt;               &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-d camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; front&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   117: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-norma &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d^ f &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-up camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; right&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   118: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r-ph &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-scale r w&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; physical right step (pixel size)&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   119: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;u-ph &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-scale &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-up camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; h&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   120: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;to &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-from camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: green;"&gt;; -&amp;gt;eye&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   121: &lt;/span&gt;&lt;span style="color: grey;"&gt;           f                    &lt;/span&gt;&lt;span style="color: green;"&gt;; eye-&amp;gt;center&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   122: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-scale r-ph &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- 1 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-w-px camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 2&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; x&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; -(w-1)/2+x * r-ph. center-&amp;gt;left&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   123: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-scale u-ph &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-h-px camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 1&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 2&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; y&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; left-&amp;gt;lefttop&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   124: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-r3d :p0 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-from camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; :p1 to&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   125: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   126: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun render &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;amp;key world camera&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   127: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;file-format 'RAW-RGBA&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;name nil&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   128: &lt;/span&gt;&lt;span style="color: grey;"&gt;           &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;new-line-hook nil&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;display-pixel-hook nil&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   129: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Renders the &lt;/span&gt;&lt;span style="color: purple;"&gt;\"&lt;/span&gt;&lt;span style="color: red;"&gt;world&lt;/span&gt;&lt;span style="color: purple;"&gt;\"&lt;/span&gt;&lt;span style="color: red;"&gt; on &lt;/span&gt;&lt;span style="color: purple;"&gt;\"&lt;/span&gt;&lt;span style="color: red;"&gt;screen&lt;/span&gt;&lt;span style="color: purple;"&gt;\"&lt;/span&gt;&lt;span style="color: red;"&gt;."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   130: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;screen &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;init-screen camera file-format&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   131: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;dotimes &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-h-px camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   132: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;when new-line-hook &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;funcall new-line-hook&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; newline jump&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   133: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;dotimes &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c3d-w-px camera&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   134: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: green;"&gt;; actual rendering is done here&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   135: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;pixel &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;render-pixel world &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;emit-ray camera x y&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   136: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;when display-pixel-hook &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;funcall display-pixel-hook x y pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   137: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;update-screen screen x y pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;; here the rendered pixel is stored&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   138: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: green;"&gt;; TODO: add the interrupt ability here.&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   139: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;when name &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;store-to-file screen name file-format&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   140: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   141: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun render-test &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   142: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;w &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;load-world :light-filename &lt;/span&gt;&lt;span style="color: red;"&gt;"H:/raytrace/lights.data"&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   143: &lt;/span&gt;&lt;span style="color: grey;"&gt;            :geometry-filename &lt;/span&gt;&lt;span style="color: red;"&gt;"h:/raytrace/geometry.data"&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   144: &lt;/span&gt;&lt;span style="color: grey;"&gt;            :cameras-filename &lt;/span&gt;&lt;span style="color: red;"&gt;"h:/raytrace/cameras.data"&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   145: &lt;/span&gt;&lt;span style="color: grey;"&gt;     &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;c &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;first &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;w3d-cameras w&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   146: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;render :world w :camera c&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   147: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :new-line-hook 'start-new-line&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   148: &lt;/span&gt;&lt;span style="color: grey;"&gt;        :display-pixel-hook 'show-pixel&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   149: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   150: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun intersect-ray-triangle &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;ray tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   151: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: red;"&gt;"Intersects ray with given triangle and returns T if intersected.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   152: &lt;/span&gt;&lt;span style="color: red;"&gt;After the resulting color data is returned. If not intersected,&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   153: &lt;/span&gt;&lt;span style="color: red;"&gt;then NIL is returned."&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   154: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: green;"&gt;; get triangle edge vectors and plane normal&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   155: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;block nil&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   156: &lt;/span&gt;&lt;span style="color: grey;"&gt;    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;u &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-v1 tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-v0 tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   157: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-v2 tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-v0 tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   158: &lt;/span&gt;&lt;span style="color: grey;"&gt;       &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;n &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d^ u v&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; cross product&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   159: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-null-p n&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   160: &lt;/span&gt;&lt;span style="color: grey;"&gt;      nil &lt;/span&gt;&lt;span style="color: green;"&gt;; triangle is degenerate&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   161: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;dir &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r3d-p1 ray&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r3d-p0 ray&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; ray direction vector&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   162: &lt;/span&gt;&lt;span style="color: grey;"&gt;         &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;w0  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r3d-p0 ray&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-v0 tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; w0 = R.P0 - T.V0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   163: &lt;/span&gt;&lt;span style="color: grey;"&gt;         &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;a   &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* n w0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; a = -dot(n,w0)&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   164: &lt;/span&gt;&lt;span style="color: grey;"&gt;         &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;b   &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* n dir&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;   &lt;/span&gt;&lt;span style="color: green;"&gt;; b = dot(n,dir)&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   165: &lt;/span&gt;&lt;span style="color: grey;"&gt;        &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;abs b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; *SMALL-NUM*&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   166: &lt;/span&gt;&lt;span style="color: grey;"&gt;        nil &lt;/span&gt;&lt;span style="color: green;"&gt;; ray is parallel to the triangle plane&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   167: &lt;/span&gt;&lt;span style="color: grey;"&gt;        &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ a b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; get intersect point of ray with plane&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   168: &lt;/span&gt;&lt;span style="color: grey;"&gt;          &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; r 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; ray goes away from triangle&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   169: &lt;/span&gt;&lt;span style="color: grey;"&gt;              nil &lt;/span&gt;&lt;span style="color: green;"&gt;; no intersect&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   170: &lt;/span&gt;&lt;span style="color: grey;"&gt;              &lt;/span&gt;&lt;span style="color: green;"&gt;; intersect point of ray and plane&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   171: &lt;/span&gt;&lt;span style="color: grey;"&gt;              &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let* &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;i &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d+ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r3d-p0 ray&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   172: &lt;/span&gt;&lt;span style="color: grey;"&gt;                      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-v3d :x &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* r &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-x dir&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   173: &lt;/span&gt;&lt;span style="color: grey;"&gt;                        :y &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* r &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-y dir&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   174: &lt;/span&gt;&lt;span style="color: grey;"&gt;                        :z &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* r &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-z dir&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   175: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;uu &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* u u&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   176: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;uv &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* u v&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   177: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;vv &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* v v&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   178: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;w  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d- i &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-v0 tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   179: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;wu &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* w u&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   180: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;wv &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d* w v&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   181: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;d  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* uv uv&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* uu vv&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   182: &lt;/span&gt;&lt;span style="color: grey;"&gt;                 &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;s  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* uv wv&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* vv wu&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; d&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   183: &lt;/span&gt;&lt;span style="color: grey;"&gt;            &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;or  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; s 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt; s 1&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   184: &lt;/span&gt;&lt;span style="color: grey;"&gt;                nil &lt;/span&gt;&lt;span style="color: green;"&gt;; point is outside of the triangle&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   185: &lt;/span&gt;&lt;span style="color: grey;"&gt;                &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;let &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;tt &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;/ &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;- &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* uv wu&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;* uu wv&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; d&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   186: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;or &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; tt 0&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;+ s tt&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; 1&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   187: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: green;"&gt;; point is outside:&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   188: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  nil&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   189: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: green;"&gt;; point is inside:&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   190: &lt;/span&gt;&lt;span style="color: grey;"&gt;                  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;return&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   191: &lt;/span&gt;&lt;span style="color: grey;"&gt;                    &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;make-pixel3d&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   192: &lt;/span&gt;&lt;span style="color: grey;"&gt;                     :position i&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   193: &lt;/span&gt;&lt;span style="color: grey;"&gt;                     :color &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;t3d-color tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   194: &lt;/span&gt;&lt;span style="color: grey;"&gt;                     :depth &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;v3d-length i &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;r3d-p0 ray&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   195: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   196: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun compare2pixels &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;a b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: green;"&gt;; takes two pixels&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   197: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;null a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   198: &lt;/span&gt;&lt;span style="color: grey;"&gt;      b&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   199: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;null b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   200: &lt;/span&gt;&lt;span style="color: grey;"&gt;      a&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   201: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;if &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;pixel3d-depth a&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;pixel3d-depth b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   202: &lt;/span&gt;&lt;span style="color: grey;"&gt;          a&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   203: &lt;/span&gt;&lt;span style="color: grey;"&gt;          b&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   204: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   205: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun compare-pixels &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&amp;amp;rest args&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   206: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;reduce #'compare2pixels args&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   207: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   208: &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;defun render-pixel &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;world ray&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   209: &lt;/span&gt;&lt;span style="color: grey;"&gt;  &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;reduce #'compare-pixels&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   210: &lt;/span&gt;&lt;span style="color: grey;"&gt;      &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;mapcar #'&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;lambda &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   211: &lt;/span&gt;&lt;span style="color: grey;"&gt;              &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;intersect-ray-triangle ray tri&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: navy;"&gt;   212: &lt;/span&gt;&lt;span style="color: grey;"&gt;          &lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;w3d-geometry world&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3905887800733017231-5093986739431146490?l=lisp-raytracer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lisp-raytracer.blogspot.com/feeds/5093986739431146490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/07/ok-lets-begin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/5093986739431146490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3905887800733017231/posts/default/5093986739431146490'/><link rel='alternate' type='text/html' href='http://lisp-raytracer.blogspot.com/2008/07/ok-lets-begin.html' title='Ok. Let&apos;s begin.'/><author><name>Alkhimov</name><uri>http://www.blogger.com/profile/09524061013883637393</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://2.bp.blogspot.com/_rYe_SVJi4ZQ/SKlzFAFCbcI/AAAAAAAAB_U/Gvbt__rjkSM/S220/_MG_9932-3.jpg'/></author><thr:total>0</thr:total></entry></feed>
