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

<channel>
	<title>zInformatik &#187; POV-Ray</title>
	<atom:link href="http://zinformatik.de/tag/pov-ray/feed/" rel="self" type="application/rss+xml" />
	<link>http://zinformatik.de</link>
	<description>Computer, Informatik und Mikrocontroller Blog</description>
	<lastBuildDate>Sat, 22 Oct 2011 09:51:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>POV-Ray &#8211; ein Raytracer</title>
		<link>http://zinformatik.de/tipps-tricks/interessante-programme/pov-ray-ein-raytracer/</link>
		<comments>http://zinformatik.de/tipps-tricks/interessante-programme/pov-ray-ein-raytracer/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 12:55:53 +0000</pubDate>
		<dc:creator>zimon</dc:creator>
				<category><![CDATA[Interessante Programme]]></category>
		<category><![CDATA[Ubuntuusers-Planet]]></category>
		<category><![CDATA[Computergrafik]]></category>
		<category><![CDATA[POV-Ray]]></category>
		<category><![CDATA[Raytracing]]></category>
		<category><![CDATA[Rendering]]></category>

		<guid isPermaLink="false">http://zinformatik.de/?p=1444</guid>
		<description><![CDATA[<div id="attachment_1445" class="wp-caption alignright" style="width: 310px"><a href="http://zinformatik.de/wp-content/uploads/2009/06/povraybeispiel.png" class="liimagelink"><img class="size-medium wp-image-1445" title="Ein mit POV-Ray generiertes Bild" src="http://zinformatik.de/wp-content/uploads/2009/06/povraybeispiel-300x225.png" alt="Ein mit POV-Ray generiertes Bild" width="300" height="225" /></a><p class="wp-caption-text">Ein mit POV-Ray generiertes Bild</p></div>
<p>Mit dem quelloffnen Raytracer <a href="http://www.povray.org" title="POV-Ray Homepage" target="_blank" class="liexternal">POV-Ray</a> kann man sehr realitätsnahe Bilder erzeugen. Anders als bei den meisten anderen 3D-Grafikprogrammen arbeitet man hier nicht mit einer graphischen Oberfläche und Maus sondern beschreibt die Objekte textbasiert über dessen Positionen in einem Koordinatensystem.</p>
<p><strong>[UPDATE]</strong>Artikel nochmals überarbeitet und Beispiel hinzugefügt.<strong>[/UPDATE]</strong>&#8230;</p>]]></description>
			<content:encoded><![CDATA[<div id="attachment_1445" class="wp-caption alignright" style="width: 310px"><a href="http://zinformatik.de/wp-content/uploads/2009/06/povraybeispiel.png" class="liimagelink"><img class="size-medium wp-image-1445" title="Ein mit POV-Ray generiertes Bild" src="http://zinformatik.de/wp-content/uploads/2009/06/povraybeispiel-300x225.png" alt="Ein mit POV-Ray generiertes Bild" width="300" height="225" /></a><p class="wp-caption-text">Ein mit POV-Ray generiertes Bild</p></div>
<p>Mit dem quelloffnen Raytracer <a href="http://www.povray.org" title="POV-Ray Homepage" target="_blank" class="liexternal">POV-Ray</a> kann man sehr realitätsnahe Bilder erzeugen. Anders als bei den meisten anderen 3D-Grafikprogrammen arbeitet man hier nicht mit einer graphischen Oberfläche und Maus sondern beschreibt die Objekte textbasiert über dessen Positionen in einem Koordinatensystem.</p>
<p><strong>[UPDATE]</strong>Artikel nochmals überarbeitet und Beispiel hinzugefügt.<strong>[/UPDATE]</strong></p>
<p><strong>Was ist Raytracing?</strong><br />
Raytracing ist eine Methode um Computergenerierte Bilder zu erzeugen. Der Unterschied zum Rendering besteht darin, dass keine Gittermodelle mit Texturen belegt werden und die Farbe dann mittels des Lichtes berechnet wird sondern eine Strahlenverfolgung statt findet, wodurch viel realistischere Bilder entstehen. Leider ist dieses Verfahren auch wesentlich rechenintensiver. Dafür bekommt man Schatten und Spiegelungen quasi geschenkt, was mit Rendering relativ schwer zu realisieren ist. (Siehe auch: <a href="http://de.wikipedia.org/wiki/Raytracing" title="Wikipedia - Raytracing" target="_blank" rel="nofollow" class="liwikipedia">http://de.wikipedia.org/wiki/Raytracing</a>) </p>
<p>Einen guten Eindruck, was POV-Ray leisten kann bekommt man in der <a href="http://hof.povray.org" title="POV-Ray Galerie" target="_blank" class="liexternal">Galerie der POV-Ray Homepage</a>.</p>
<p><strong>Download und Installation</strong><br />
POV-Ray steht unter einer eigenen Lizenz, die zwar das Einsehen des Quelltextes, aber nicht die veränderte Weitergabe im Sinne freier Software erlaubt (was sich aber bald ändern soll, siehe Kommentare).</p>
<p>Das Programm ist für alle gängigen Betriebssysteme verfügbar und kann sogar in einem Cluster (also auf mehreren PC&#8217;s gleichzeitig) verwendet werden.<br />
<strong>[UPDATE]</strong>POV-Ray kann unter Ubuntu mittels <code>sudo apt-get install povray</code> installiert werden.<br />
Ansonsten kann man die Binärdateien von der <a href="http://www.povray.org/download/" title="Downloadseite von POV-Ray" target="_blank" class="liexternal">Homepage beziehen</a><strong>[/UPDATE]</strong></p>
<p><strong>Grundsätzliche Funktionsweise</strong><br />
In einer Scenenbeschreibungssprache werden alle Objekte, Lichtquellen und die Kamera an 3D-Positionen im Raum definiert (z.B. Kugel an Stelle x,y,z mit Radius r und Farbe rot). Daneben gibt es noch viele weitere Optionen um bestimmte Materialien zu simulieren. Daraus wird dann das Bild berechnet.</p>
<p>Zitat:</p>
<blockquote><p>Der Qualität und dem Anspruch der gerenderten Bilder sind keine theoretischen Grenzen gesetzt;<br />
        in der Praxis ist die zur Verfügung stehende Rechen- oder Computer-Zeit der begrenzende Faktor.</p></blockquote>
<p>Quelle: <a href="http://de.wikipedia.org/wiki/Povray" title="Wikipedia - POV-Ray" target="_blank" rel="nofollow" class="liwikipedia">http://de.wikipedia.org/wiki/Povray</a></p>
<p>Interessant ist Povray durch seine Scenenbeschreibungssprache auch wegen der Automatisierbarkeit.<br />
z.B. ist EAGLE ein Programm um elektronische Schaltungen zu entwerfen und daraus entsprechende Boardlayouts zu konstruieren. Mittels eines Scripts kann man sich die Platine zu einem fertigen Layout vor dem eigentlichen Bau mit POV-Ray Rendern lassen um sich ansehen zu können, wie es später aussehen wird. (Macht sich sehr gut in Ausarbeitungen oder um vorab etwas präsentieren zu können.)</p>
<div id="attachment_1446" class="wp-caption aligncenter" style="width: 562px"><a href="http://zinformatik.de/wp-content/uploads/2009/06/usb_adapter_board.jpg" class="liimagelink"><img class="size-full wp-image-1446" title="Das Board-Layout eines USB&lt;-&gt;UART Konverters" src="http://zinformatik.de/wp-content/uploads/2009/06/usb_adapter_board.jpg" alt="Das Board-Layout eines USB&lt;-&gt;UART Konverters" width="552" height="275" /></a><p class="wp-caption-text">Das Board-Layout eines USB&lt;-&gt;UART Konverters</p></div>
<div id="attachment_1447" class="wp-caption aligncenter" style="width: 410px"><a href="http://zinformatik.de/wp-content/uploads/2009/06/usb_adapter_povray.jpg" class="liimagelink"><img class="size-full wp-image-1447" title="Das mit POV-Ray aus dem Board-Layout generierte Bild" src="http://zinformatik.de/wp-content/uploads/2009/06/usb_adapter_povray.jpg" alt="Das mit POV-Ray aus dem Board-Layout generierte Bild" width="400" height="300" /></a><p class="wp-caption-text">Das mit POV-Ray aus dem Board-Layout generierte Bild</p></div>
<div id="attachment_50" class="wp-caption aligncenter" style="width: 522px"><a href="http://zinformatik.de/wp-content/uploads/2008/12/usb_modul1.jpg" class="liimagelink"><img class="size-full wp-image-50" title="Ein Foto der fertigen Platine" src="http://zinformatik.de/wp-content/uploads/2008/12/usb_modul1.jpg" alt="Ein Foto der fertigen Platine" width="512" height="440" /></a><p class="wp-caption-text">Ein Foto der fertigen Platine (um 180° gedreht)</p></div>
<p>Übrigens ist der linke Teil meines Banners (oben auf der Seite) auch ein Teil einer mit POV-Ray gerenderten Platine. Der Rechte Teil ist ein Ausschnitt des EALGE Layouts, aus dem es generiert wurde.</p>
<p><strong>Beispiel</strong><br />
Im folgenden Beispiel wird eine einfache Scene erstellt. Zuerst wird eine Datei mit Farbdefinitionen eingebunden, damit man nicht jede Farbe als RGB-Wert eingeben braucht. Danach wird eine Kamera definiert. Dabei gibt man die Position an, wo sie sich befinden soll und die Position, auf die die Kamera zeigen soll.<br />
Als nächstes muss noch eine Lichtquelle definiert werden, damit man auch etwas sehen kann. Diese wird mit dem Schlüsselwort light_source eingeleitet und hat eine Position und eine Farbe. Nun können die einzelnen Objekte definiert werden.<br />
Als Boden wird eine Ebene definiert, die schwarz-weiß kariert ist und waagerecht auf der Höhe -1 liegt. Die Koordinaten geben die Lage der Ebene an, die immer Senkrecht auf dem angegebenen Vektor liegt. Dahinter kann man ein Offset (der Abstand zum Nullpunkt), in diesem Fall also die Höhe angeben.<br />
Die Farbe wird mit dem Schlüsselwort &#8220;pigment&#8221; angegeben. Da die Ebene Kariert sein soll nutzen wir hier die Option &#8220;checker&#8221; gefolgt von zwei Farbwerten.<br />
Durch die Include-Anweisung am Anfang können hier die Namen der Farben verwendet werden. Ansonsten müsste man den RGB-Wert angeben.<br />
Der Himmel wird durch ein &#8220;sky_sphere&#8221;-Objekt erzeugt, welches entlang der y-Achse (&#8220;gradient y&#8221;) von Hellblau nach Blau verläuft (&#8220;color_map&#8221;).<br />
Nun kann man noch weitere Objekte auf der Ebene platzieren. Eine Kugel (sphere) besitzt einen Mittelpunkt und eine Durchmesser und natürlich auch eine Farbe.<br />
Ein Kegel (cone) hat zwei Koordinaten, die den Mittelpunkte der beiden Enden entsprechen sowie je einen Durchmesser an jedem Ende.</p>
<p>Neben der Farbe kann auch noch die Oberflächenstruktur und -Politur definiert werden. Für die Struktur ist das Schlüsselwort &#8220;normal&#8221; zuständig, die Politur wird mittels &#8220;finish&#8221; angegeben. Im Beispiel wird der 2. Kugel eine reflektierende Politur gegeben, so dass sie die anderen Objekte spiegelt. (je höher der Reflektionswert, desto stärker die Spiegelung.</p>
<p>Nun der Code des Beispiels:</p>

<div class="wp_syntax"><div class="code"><pre class="povray" style="font-family:monospace;"><span style="color: #66cc66; font-weight: bold;">#include</span> <span style="color: #ff0000;">&quot;colors.inc&quot;</span>
&nbsp;
<span style="color: #116688; font-weight: bold;">camera</span> <span style="color: #66cc66;">&#123;</span>    <span style="color: #808080; font-style: italic;">// Die Kamera</span>
    <span style="color: #a63123;">location</span> <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">2</span>, <span style="color: #cc66aa;">3</span>, <span style="color: #66cc66;">-</span><span style="color: #cc66aa;">6</span><span style="color: #66cc66;">&gt;</span>
    <span style="color: #a63123;">look_at</span> <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">0</span>, <span style="color: #cc66aa;">1</span>, <span style="color: #cc66aa;">2</span><span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #116688; font-weight: bold;">light_source</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">// Die Lichtquelle</span>
    <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">3</span>, <span style="color: #cc66aa;">5</span>, <span style="color: #66cc66;">-</span><span style="color: #cc66aa;">4</span><span style="color: #66cc66;">&gt;</span>
    <span style="color: #a63123;">color</span> White
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #116688; font-weight: bold;">plane</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">// Eine Ebene</span>
    <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">0</span>, <span style="color: #cc66aa;">1</span>, <span style="color: #cc66aa;">0</span><span style="color: #66cc66;">&gt;</span>, <span style="color: #66cc66;">-</span><span style="color: #cc66aa;">1</span>
    <span style="color: #116688; font-weight: bold;">pigment</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #a63123;">checker</span> <span style="color: #a63123;">color</span> White, <span style="color: #a63123;">color</span> Black <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span> 
&nbsp;
<span style="color: #116688; font-weight: bold;">sky_sphere</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">// Der Himmel</span>
    <span style="color: #116688; font-weight: bold;">pigment</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #a63123;">gradient</span> <span style="color: #cc1122; font-weight: bold;">y</span>
        <span style="color: #116688; font-weight: bold;">color_map</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #66cc66;">&#91;</span><span style="color: #cc66aa;">0.0</span> <span style="color: #a63123;">color</span> <span style="color: #a63123;">rgb</span> <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">0.7</span>,<span style="color: #cc66aa;">0.7</span>,<span style="color: #cc66aa;">1.0</span><span style="color: #66cc66;">&gt;</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#91;</span><span style="color: #cc66aa;">1.0</span> <span style="color: #a63123;">color</span> <span style="color: #cc1122; font-weight: bold;">blue</span> <span style="color: #cc66aa;">0.5</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #116688; font-weight: bold;">sphere</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">// eine Kugel</span>
    <span style="color: #66cc66;">&lt;-</span><span style="color: #cc66aa;">3</span>, <span style="color: #cc66aa;">1</span>, <span style="color: #cc66aa;">4</span><span style="color: #66cc66;">&gt;</span>, <span style="color: #cc66aa;">2</span>
    <span style="color: #116688; font-weight: bold;">pigment</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #a63123;">color</span> Yellow <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>  
&nbsp;
<span style="color: #116688; font-weight: bold;">cone</span><span style="color: #66cc66;">&#123;</span>   <span style="color: #808080; font-style: italic;">// Ein Kegel</span>
    <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">3</span>,<span style="color: #66cc66;">-</span><span style="color: #cc66aa;">1</span>,<span style="color: #cc66aa;">3</span><span style="color: #66cc66;">&gt;</span>,<span style="color: #cc66aa;">1</span>,<span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">2.5</span>,<span style="color: #cc66aa;">4</span>,<span style="color: #cc66aa;">4</span><span style="color: #66cc66;">&gt;</span>,<span style="color: #cc66aa;">0</span>
    <span style="color: #116688; font-weight: bold;">pigment</span><span style="color: #66cc66;">&#123;</span><span style="color: #a63123;">color</span> <span style="color: #cc1122; font-weight: bold;">Green</span><span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #116688; font-weight: bold;">sphere</span> <span style="color: #66cc66;">&#123;</span> <span style="color: #808080; font-style: italic;">// Eine reflektierende Kugel</span>
    <span style="color: #66cc66;">&lt;</span><span style="color: #cc66aa;">0</span>, <span style="color: #cc66aa;">2.5</span>, <span style="color: #cc66aa;">10</span><span style="color: #66cc66;">&gt;</span>, <span style="color: #cc66aa;">3</span>
    <span style="color: #116688; font-weight: bold;">finish</span><span style="color: #66cc66;">&#123;</span>
        <span style="color: #a63123;">reflection</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #cc66aa;">0.8</span>       
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<div id="attachment_1565" class="wp-caption aligncenter" style="width: 310px"><a href="http://zinformatik.de/wp-content/uploads/2009/06/bild2.png" class="liimagelink"><img src="http://zinformatik.de/wp-content/uploads/2009/06/bild2-300x225.png" alt="Das Ergebnis des Beispiels" title="Das Ergebnis des Beispiels" width="300" height="225" class="size-medium wp-image-1565" /></a><p class="wp-caption-text">Das Ergebnis des Beispiels</p></div>
<p><strong>Sonstige Funktionen</strong><br />
POV-Ray kennt noch eine ganze Menge weiterer Objekte, die sich auch zusammenfassen lassen. Man kann auch &#8211; wie in der Mengenlehre &#8211; ein Objekt von einem anderen abziehen oder die Schnittmenge zweier Objekte berechnen (und anzeigen).<br />
Auch bei den Farben und Oberflächenstrukturen bzw. -Polituren gibt es noch viele weitere Möglichkeiten und Optionen.</p>
<p>Die Objekte können skaliert (in der Größe geändert) rotiert und translatiert (verschoben) werden.<br />
Es können auch Kontrollstrukturen wie bei Programmiersprachen genutzt werden. So kann man Variablen deklarieren, Schleifen und Verzweigungen nutzen sowie Funktionen (bei POV-Ray Makros genannt) definieren um automatisch eine Reihe von Objekten zu erzeugen und zu transformieren.</p>
<p>Man kann mit POV-Ray auch Animationen erstellen. Dafür werden per Script mehrere Bilder erstellt, wobei vor jedem Bild eine Variable verändert wird. Diese kann genutzt werden um die Kamera oder Objekte zu bewegen.<br />
Hier einige Beispiele (auf Youtube gibt es noch jede Menge weitere)</p>
<p><a href="http://zinformatik.de/tipps-tricks/interessante-programme/pov-ray-ein-raytracer/"><em>Click here to view the embedded video.</em></a></p>
<p><a href="http://zinformatik.de/tipps-tricks/interessante-programme/pov-ray-ein-raytracer/"><em>Click here to view the embedded video.</em></a></p>
<p><strong>Links</strong></p>
<ul>
<li><a href="http://www.povray.org" title="Offizielle POV-Ray Website" target="_blank" class="liexternal">http://www.povray.org</a> &#8211; Offizielle Homepage von POV-Ray (englisch)</li>
<li><a href="http://hof.povray.org" title="POV-Ray Gallerie" target="_blank" class="liexternal">http://hof.povray.org</a> &#8211; Gallerie auf der Seite von POV-Ray. Sollte man sich in jedem Fall mal ansehen, auch wenn man sonst kein Interesse am Programm hat. (Die Bilder kann man durch einen Klick darauf vergrößert ansehen)</li>
<li><a href="http://de.wikibooks.org/wiki/Raytracing_mit_POV-Ray" title="Wikibooks - POV-Ray Buch" target="_blank" class="liexternal">http://de.wikibooks.org/wiki/Raytracing_mit_POV-Ray</a> &#8211; Deutsches Buch über POV-Ray auf Wikibooks</li>
<li><a href="http://www.basti-info.de/pov-ray/inhalt.htm" title="Einführung in POV-Ray" target="_blank" class="liexternal">http://www.basti-info.de/pov-ray/inhalt.htm</a> &#8211; Eine deutsche Einführung in POV-Ray</li>
<li><a href="http://www.f-lohmueller.de/pov_tut/pov__ger.htm" title="POV-Ray Tutorials" target="_blank" class="liexternal">http://www.f-lohmueller.de/pov_tut/pov__ger.htm</a> POV-Ray &#8211; Tutorials auf deutsch</li>
<li><a href="http://de.wikipedia.org/wiki/Povray" title="Wikipedia - POV-Ray" target="_blank" rel="nofollow" class="liwikipedia">http://de.wikipedia.org/wiki/Povray</a> &#8211; Wikipedia Artikel zu POV-Ray</li>
<li><a href="http://www.oyonale.com/modeles.php?format=POV&#038;lang=en" title="Freie POV-Ray Objekte von Gilles Tran" target="_blank" class="liexternal">http://www.oyonale.com/modeles.php?format=POV&#038;lang=en</a> &#8211; Einige freie Objekte für POV-Ray auf der Website von Gilles Tran</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://zinformatik.de/tipps-tricks/interessante-programme/pov-ray-ein-raytracer/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

