Seite 1 von 10

(Echtzeit-)Raytracing-Engine

Verfasst: 07.06.2005 16:46
von NicTheQuick
Hallo!

Wie einige vielleicht schon wissen, bin ich momentan an einem kleinen Raytracer, der die einfachsten Körper berechnen und darstellen kann, also Kugeln, Ebenen und Dreiecke.

Jetzt bin ich schon um einiges weiter gekommen, nachdem ich die komplette Engine nochmals neu geschrieben habe.
Hier ein paar Screenshots:

rötliches Licht, Ebene rechts, 30% Verspiegelung bei den Kugeln
Bild

rötliches Licht, Ebene rechts und links, 100% Verspiegelung bei den Kugeln
Bild

rötliches Licht, Ebene oben und unten, 100% Verspiegelung bei den Kugeln
Bild

1. Programm
  • 200x200 Auflösung
  • Koordinaten- und Winkelanzeige
  • rötliches umherfliegendes Licht
  • bläuliches Licht an der Kamera
  • Schattenwurf
  • zwei Ebenen ohne Verspiegelung
  • Kugeln vollverspiegelt
2. Programm
  • Größe einstellbar
  • Anzeige ein- ausblendbar
  • Rekursionstiefe einstellbar
  • 30% spiegelnde Ebenen oben und unten
  • vollverspiegelte Kugeln
  • rötliches umherfliegendes Licht
  • Schattenwurf
3. Programm
  • Größe einstellbar
  • Anzeige ein- ausblendbar
  • Rekursionstiefe einstellbar
  • nicht spiegelnde Ebenen oben und unten
  • vollverspiegelte Kugeln
  • rötliches umherfliegendes Licht
  • Schattenwurf
///Edit1:
Wenn jemand an dem Quellcode interessiert ist, der die RayTracing-Engine benutzt, soll er Bescheid sagen. Dann kann man sich auch schonmal einen Eindruck darüber verschaffen, wie leicht sie zu handhaben ist.

///Edit2:
Für alle, bei denen die Links mal wieder nicht gehen: http://mitglied.lycos.de/NicTheQuick1986/Forum/013/

Verfasst: 07.06.2005 18:07
von Franky
Interessante Sache :D

Nur ist es bei mir leider recht langsam (das muss aber scheinbar so, wenn ich da auf deine FPS-Anzeigen schau)

Viel mehr kann ich dazu auch nicht sagen, da ich mich mit Raytracing net auskenn :roll:

Verfasst: 07.06.2005 18:14
von NicTheQuick
Okay.

Wer wissen will, was Raytracing ist und wie es funktioniert, hier ein 36-Seitiges PDF.

Verfasst: 07.06.2005 18:25
von THEEX
Hut ab, nur solltest vielleicht mal weniger Details oder sonst was abspecken, damit es mal auf Deinem eigenen Server flüssig läuft (dann isses auch auf meinem schnell).

Verfasst: 07.06.2005 18:38
von NicTheQuick
Ich rendere einfach jeden Pixel. Das mit dem Subsampling finde ich dafür nicht so toll. /:-> Außerdem hab ich es sowieso noch nicht geschafft, es auf x- und y-Achse anzuwenden. :wink:

Auf meinem Rechner läuft es bei kleinen Auflösungen schnell genug. Aber da auf den Screenshots immer das erste gerenderte Bild zu sehen ist und meine FPS-Routine immer den Durchschnitt der ersten 5 Bilder zurückgibt, sieht es so aus, als ob meine FPS so klein wäre.

Ich mache demnächst mal eine kleine Video-Demo, wo Kugeln rumrollen, sich gegenseitig anstoßen, usw. :allright: (Dauert aber sicherlich noch etwas --> lernen :roll: )

Verfasst: 07.06.2005 18:45
von Epyx
WHOOAA einfach nur der Hammer, echt!!!! :shock: :shock: :shock:
Auf die UserLib freue ich mich schon :D

Verfasst: 07.06.2005 20:17
von _ZOMTEX_
Hallo Nic,

leider laufen die Programme bei mir nicht, wenn ich es starte geht kurz ein Konsolenfenster auf und weiter passiert nix. Wahrscheinlich liegt es wieder an meiner bescheidenen Graka.

Nun ja!

Gruß

Michael

Verfasst: 07.06.2005 20:48
von DarkDragon
_ZOMTEX_ hat geschrieben:Hallo Nic,

leider laufen die Programme bei mir nicht, wenn ich es starte geht kurz ein Konsolenfenster auf und weiter passiert nix. Wahrscheinlich liegt es wieder an meiner bescheidenen Graka.

Nun ja!

Gruß

Michael
Nein, schau dir die dateien die du downloadest mal mit notepad an. Du wirst merken du hast die Tripod Fehlerseite runtergeladen ;) . Geh manuell durch seine Verzeichnisse und lad dir da den spaß runter ;) .

Verfasst: 07.06.2005 21:02
von _ZOMTEX_
@DarkDragon

danke, jetzt gehts! :-)

Verfasst: 07.06.2005 22:57
von NicTheQuick
Epyx hat geschrieben:WHOOAA einfach nur der Hammer, echt!!!! :shock: :shock: :shock:
Auf die UserLib freue ich mich schon :D
Die Userlib ist in der Mache. Leider funktioniert da irgendwas mit Tailbite nicht. Aber keine Angst, für die Endfassung der Userlib lasse ich einen ASM-Freak dran, der da vielleicht noch was dran machen kann und es somit schneller gehen wird.

Es sind bisher 60 Befehle verfügbar (oder sie sollten zumindest verfügbar sein). Hier die Liste:

Code: Alles auswählen

RTMovePoint
RTInitCam
RTDeInit
RTSetGamma
RTGetGamma
RTSetRecursionDepth
RTGetRecursionDepth
RTSetCamPosition
RTSetCamPositionEx
RTGetCamPosition
RTSetCamAngle
RTSetCamAngleEx
RTGetCamAngle
RTSetCamFOV
RTGetCamFOV
RTGetCamDirection
RTSetBackroundColor
RTSetBackroundColorEx
RTGetBackroundColor
RTSetAmbientLight
RTSetAmbientLightEx
RTGetAmbientLight
RTCalculateRays
RTRayTrace
RTDrawWorld
RTGetPixelRGB
RTCreateSphere
RTCreateSphereEx
RTCreateTriangle
RTCreateTriangleEx
RTCreatePlane
RTCreatePlaneEx
RTSetColorTriangle
RTSetColorTriangleEx
RTSetColor
RTSetColorEx
RTSetAttributes
RTSetReflection
RTSetReflectionTriangle
RTSetTransparency
RTSetTransparencyTriangle
RTMoveObject
RTMoveObjectEx
RTFreeObject
RTCreatePointLight
RTCreatePointLightEx
RTCreateSpotLight
RTCreateSpotLightEx
RTSetSpotLightFOV
RTGetSpotLightFOV
RTSetSpotLightDirection
RTGetSpotLightDirection
RTSetLightColor
RTSetLightColorEx
RTSetLightPosition
RTSetLightPositionEx
RTMoveLight
RTMoveLightEx
RTFreeLight
RTEngineShared
Tailtbite kompiliert problemlos. Die ersten paar Funktionen im Testcode werden auch wunderbar ausgeführt, aber eine dann nicht mehr. Kann es sein, dass eine Library-Funktion keine andere Library-Funktion mehr aufrufen darf? Z.B. rufe ich die Funktion [c]RTCreateSphereEx()[/c] aus der Userlib auf, die aber intern nochmal die Funktion [c]RTCreateSphere()[/c] aufruft. Funktioniert sowas nicht?

///Edit: Anscheinend funktioniert das wirklich nicht. Liegt das vielleicht daran, dass die Funktion [c]RTCreateSphere()[/c] nicht mit in die EXE eingebunden wird, weil ich sie nicht direkt im Code aufrufe, sondern nur indirekt durch [c]RTCreateSphereEx()[/c]? Kann man daran was ändern? Wer kennt sich aus? Fast alle Befehle mit der Endung "Ex" benutzen die gleichnamigen Befehle ohne das "Ex".