HTML

Despina

Sugárkövetés (raytracing) megvalósítása c++ nyelvben.

Friss topikok

  • tormanator: Az internet nagy hátránya, hogy még szabadidődben is beleszólnak abba, amit csinálsz. float oké, ... (2011.09.03. 19:26) 3D-s vektor osztály
  • tormanator: Látványosan elakadtál, akkor majd én folytatom. sugarkovetes.blog.hu/ (2011.09.03. 14:34) Metszéspontszámítás 1
  • sirpalee: Ne írj saját bmp mentőt. 1. OIIO - win alá macerás fordítani de megéri 2. devIL - egyszerű, fapad... (2010.12.08. 17:31) bmp fájlba mentés

Linkblog

Metszéspontszámítás 1

2010.12.15. 13:43 despina

A sugárkövető rendszer nem más, mint a fény útjának fizikai szimulációja. Az én programomban a fény egyenesen vonalban terjed mindaddig, amíg nem ütközik valamivel. Az ütközés számítása a sugárkövető rendszerek egyik sarokköve. A futási idő nagy részében a program ezt végzi.

A fénysugár program szintjén egy vektor, a felület pedig amivel ütközik egy háromszög. Ennek az ütközésnek a számítása két lépésben történik. Először ki kell számítani az egyenes és a háromszög csúcspontjai által alkotott sík metszéspontját. Ha ez megvan, le kell ellenőrizni a metszéspont a háromszögön belül van-e. Az algoritmus tehát nem csak azt tudja megmondani történik-e ütközés, azt is, hogy hol. Most az első lépést fogom megoldani.

Egyenes

Egy egyenest egyértelműen meghatároz két pontja, vagy egy pontja és az egyenessel párhuzamos vektor. Ezt a vektort irányvektornak hívják. Ez utóbbira van szükség a számításhoz. A sugár viszont két pontjával adott, ezért irányvektornak a végpont mínusz kezdőpontot veszem.

Legyen P pont helyvektora r0. Erre a pontra illeszkedő v vektorral párhuzamos egyenes egyenlete vektoros alakban:

Ahol t paraméter minden valós értéket felvehet.

Sík

A síkot meg lehet adni három nem egy egyenesre eső pontjával, vagy egy pontjával és a síkra merőleges vektorral. Ez a vektor a normálvektor. Számítása a 3 ismert pontból a következőképpen történik:

A sík egyenlete a:

Ahol az r vektor a sík egy tetszőleges pontjának helyvektora, n a normálvektor és D a:

Ahol r0 a sík ismert pontja. Mindez pedig koordinátás alakban:

Metszéspontszámítás

Az egyenes és sík döféspontja nem más, mint az egyenes és sík közös pontja. Vagyis ha a sík egyenletébe helyettesítjük az egyenesét, megoldjuk, majd ha a megoldás pozitív visszahelyettesítjük az egyenes egyenletébe, megkapjuk a keresett pontot. Ha negatív akkor a metszéspont a sugár kezdőpontja mögött van ezért nem érvényes. Az egyenest ha behelyettesítem a sík egyenletébe a következőt kapom:

Ebből ki kell fejezni 't'-t.

Ha kiszámoltuk és pozitív értéket kaptunk, vissza kell helyettesíteni az egyenes egyenletébe és kiszámolni. Ezzel megkapjuk azt a pontot ahol a sugár átdöfi a háromszög 3 pontja által alkotott síkot. Már csak azt kell eldönteni, hogy ez a pont a háromszögön belül van-e.

1 komment

Címkék: vektor metszéspont intersection döféspont

A bejegyzés trackback címe:

https://despina.blog.hu/api/trackback/id/tr572517460

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

tormanator · http://sugarkovetes.blog.hu/ 2011.09.03. 14:34:04

Látványosan elakadtál, akkor majd én folytatom.

sugarkovetes.blog.hu/
süti beállítások módosítása