<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=GrafikaGyakorloTerfogatVizualizacio</id>
	<title>GrafikaGyakorloTerfogatVizualizacio - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=GrafikaGyakorloTerfogatVizualizacio"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=GrafikaGyakorloTerfogatVizualizacio&amp;action=history"/>
	<updated>2026-05-17T22:13:17Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=GrafikaGyakorloTerfogatVizualizacio&amp;diff=137339&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Infoalap|GrafikaGyakorloTerfogatVizualizacio}}  ===Mintakérdések a Számítógépes grafika és képfeldolgozás tárgy vizsgájára való felkészü…”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=GrafikaGyakorloTerfogatVizualizacio&amp;diff=137339&amp;oldid=prev"/>
		<updated>2012-10-21T19:58:53Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Infoalap|GrafikaGyakorloTerfogatVizualizacio}}  ===Mintakérdések a Számítógépes grafika és képfeldolgozás tárgy vizsgájára való felkészü…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Infoalap|GrafikaGyakorloTerfogatVizualizacio}}&lt;br /&gt;
&lt;br /&gt;
===Mintakérdések a Számítógépes grafika és képfeldolgozás tárgy vizsgájára való felkészüléshez ===&lt;br /&gt;
&lt;br /&gt;
====Térfogat vizualizáció====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;113. Írjon programot, amely egy L(x, y, z) saját színnel és C(x, y, z) opacitásfüggvénnyel jellemzett, a [-1,-1,-1], [1,1,1] kockába zárt térfogatot megjelenít. A szem a [0,0,-2] pontban van, a z irányba néz, az ablak a [0,0,-1] pontban, a z-tengelyre merőlegesen áll és mérete 1x1-s.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* A getColor függvény egy sugár mentén számítja ki az eredő fényességet. Az ablaktól indulva végighalad a sugár mentén, és ds térközönként lekéri az opacitást és a fényességet, majd a sugár mentén ezeket összegzi. A draw függvény végigmegy az 1x1-es ablakon századonként, és minden pixelen át küld egy sugarat.&lt;br /&gt;
* Ha a sugár mentén ds lépésekkel a szem felé haladva &amp;lt;math&amp;gt; c_0, c_1, ..., c_n &amp;lt;/math&amp;gt; a meglátogatott pontok opacitása, és &amp;lt;math&amp;gt; l_0, l_1, ..., l_n &amp;lt;/math&amp;gt; a kisugárzott fénye, akkor a szembe jutó fény: &amp;lt;math&amp;gt; \sum_{i=0}^n \left( l_i ds \prod_{j=i+1}^n (1-c_j ds)\right) &amp;lt;/math&amp;gt;. Ugyanis, a sugár tulajdonképpen ds vastagságú rétegeken halad át, amik (kis ds esetén) a vastagságukkal arányos fényt bocsátanak ki, illetve az áthaladó fény arányos részét nyelik el. Mivel minden réteg fénye az összes utána lévőn tompítódik, ezért van a nagy szorzatos tényező. Ha ezt az összeget az n-edik tagtól (a szem felől) kezdve akarja az ember iteratívan számolni, akkor kijön a kódban lévő számítás.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
float getColor(Vector start, Vector dir) {&lt;br /&gt;
  Vector current, entry;&lt;br /&gt;
  float ds=0.01;&lt;br /&gt;
  float cSum=0, lSum=0;&lt;br /&gt;
  dir=dir.normalize();&lt;br /&gt;
  entry=start+dir*((-1-start.z)/dir.z);&lt;br /&gt;
  for (current=entry; current.z&amp;lt;1; current=current+ds*dir) {&lt;br /&gt;
	 lSum=L(current.x, current.y, current.z)*ds*(1-cSum)+lSum;&lt;br /&gt;
	 cSum=1-(1-C(current.x, current.y, current.z)*ds)*(1-cSum);&lt;br /&gt;
  }&lt;br /&gt;
  return lSum;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw() {&lt;br /&gt;
  Vector start(0, 0, -2), dir;&lt;br /&gt;
  for (float x=-0.5; x&amp;lt;=0.5; x+=0.01) {&lt;br /&gt;
	 for (float y=-0.5; y&amp;lt;=0.5; y+=0.01) {&lt;br /&gt;
		dir=Vector(x, y, 1);&lt;br /&gt;
		pixel(x, y, getColor(start, dir));&lt;br /&gt;
	 }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;114. Masírozó kockák (marching cubes) algoritmus.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Az algoritmussal egy 3D struktúrát lehet megjeleníteni. Van egy függvényünk, ami a 3D tér pontjaihoz egy-egy értéket rendel, és szeretnénk kirajzolni azt a felületet, ahol a függvény adott küszöbértékkel egyenlő (vagyis egy implicit felületet rajzolunk ki). A függvény általában 3D tömbbel (vagyis az adott térközönként vett mintáival) adott.&lt;br /&gt;
* A térre ráteszünk egy kockarácsot, és mindegyik kocka-csúcspontra eldöntjük, hogy a felület melyik oldalán van (vagyis, a függvény ottani értéke nagyobb vagy kisebb, mint a küszöbérték). Ha egy él két végpontja különböző oldalán van a felületnek, akkor ott egy metszéspont van (a metszéspont helye a konkrét függvényértékek alapján interpolálható), ha azonos oldalon vannak, akkor nincs metszéspont. (Itt elhanyagoltuk azt a lehetőséget, hogy egynél többször is metszhet egy élet a felület.)&lt;br /&gt;
* Majd, mindegyik kockába kis felület-darabokat rajzolunk, az alapján, hogy melyik élén van metszéspont. Erre kell egy táblázat, hogy milyen metszéspont-elrendezések esetén milyen felület-darabokat kell rajzolni (lásd pl. a Wikipédia cikkben az ábrát). Az összes kockába rajzolt felületelemek együtt kiadják a felület közelítő képét.&lt;br /&gt;
* Bizonyos metszéspont-eloszlások esetén több különböző módon is felvehetők a felületdarabok. Úgy kell ilyenkor választani, hogy a szomszédos kockák illeszkedjenek egymáshoz.&lt;br /&gt;
* Általában a csúcsokhoz normálokat is rendelnek: a valószerű megjelenítéshez a normál a függvény ottani gradiensvektora kell legyen. Ha a függvény 3D tömbbel van adva, ezt a környező mintákból lehet közelíteni.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Marching_cubes Wikipédia: masírozó kockák]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;115. Írjon térfogati modellek megjelenítéséhez fénysugárkövető (segítség: térfogati sugárkövetés, amikor a fénnyel megegyező irányban haladunk) programot. Feltételezheti, hogy a térfogati adatok egy 256x256x256-os voxel tömbben vannak, amely a világ koordinátarendszerben a [0,0,0,], [1,1,1] pontok közötti, a tengelyekkel párhuzamos élű kockának felel meg. A szem a  [0.5, 0.5, &amp;lt;math&amp;gt; -\infty &amp;lt;/math&amp;gt;] pontban van (segítség: párhuzamos vetítés!), és a z irányba néz. Az ablak közepe a [0.5, 0.5, 0]  pontban van, a z irányra merőleges, mérete 1x1. Az képernyő felbontása 256x256 pixel. A voxel színek és opacitások számításánál csak a 0.5 és 0.6 közötti értékeket tekintse nem átlátszónak és a diffúz visszaverődési törvényt adaptálja a szín számításához (segítség: a normálvektort a gradiensből számítsa, az opacitást pedig a gradiens abszolút értékével szorozza). A diffúz BRDF az RGB hullámhosszokon (0.1, 0.4, 0.9). A pontszerű fényforrás a 0,0,0 pontban van, az intenzitása tetszőleges távolságban, helyen és hullámhosszon 1. Feltételezheti, hogy a szokásos vektor és színműveletek rendelkezésre állnak.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- [[KisGergelyG|G]] - 2008.12.26.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Infoalap]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>