PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Raytracer in Java


Gast
2007-02-24, 15:36:27
Moin

ich habe mir überlegt, mal einen kleinen Raytracer in Java zu schreiben (nur um das mal gemacht zu haben und weil ich in Java ziemlich eingerostet bin) und im gleichen Zug mal etwas mit MultiThreading zu exprimentieren. Während ich mir über die eigentlich Umsetzung des Algorithmus relativ klar bin, frage ich mich womit ich das Drumherhum beschreibe.


Wie repräsentiere ich am Besten die Szenengeometrie bzw. in welchen Formaten macht es Sinn dies in Java zu importieren?
Wo rendere ich in Java rein? Ich möchte gern, daß man zusehen kann wie das Bild gerendert wird und frage mich wie ich das Bild der Szene aufbaue? In C++ würde ich wohl SDL nehmen, was nehme ich in Java?


danke!

ollix
2007-02-26, 13:20:41
1. Ich erinnere mich mal für ein Tool VRML benutzt zu haben, was auch gut funktioniert hat. Ist aber schon eine Weile her - evtl. gibs aber auch was für Collada.

2. Du kannst z.B. nach OpenGL rendern: http://en.wikipedia.org/wiki/Jogl Habe das noch nicht gemacht, das mag aber ggf. Sinn machen.

Shink
2007-02-26, 13:39:27
2.) Spricht etwas dagegen, es mit den Java-Bordmitteln zu machen (AWT, Java 2D)?

Ganon
2007-02-26, 14:39:43
@Shink

AWT eher nicht, aber Java2D ist schon passend. Nutzt ja eh OpenGL bzw. DirectX zur Darstellung.

Gast
2007-02-26, 15:06:44
wie kann man etwas, das OpenGL nutzt, bloß Java2D nennen, das schreckt doch jeden potentiellen Interessenten nur ab :D

kloffy
2007-02-26, 15:10:59
In C++ würde ich wohl SDL nehmen, was nehme ich in Java?
sdljava (http://sdljava.sourceforge.net/)?

Shink
2007-02-26, 16:21:17
wie kann man etwas, das OpenGL nutzt, bloß Java2D nennen, das schreckt doch jeden potentiellen Interessenten nur ab :D
Nun ja, OpenGL erlaubt seit Anbeginn seiner Existenz (glaub ich zumindest) auch effiziente 2D-Darstellungen. AWT verwendet auch OpenGL/DirectX - Java2D baut darauf auf.

Gast
2007-02-27, 15:20:45
Äh, OpenGL? DirectX? Hallo? Hier geht es um das Setzen einzelner Pixel für einen Raytracer. Wie wäre es mit einem einfachen BufferedImage, vom dem das Raster holen und direkt ins int[]-Array die Farbwerte schreiben, alle X Pixel einmal neu auf den Bildschirm malen und gut ist?

Gast
2007-02-27, 16:15:25
Nun ja, OpenGL erlaubt seit Anbeginn seiner Existenz (glaub ich zumindest) auch effiziente 2D-Darstellungen.
Glaubst du falsch. Direkten Zugriff auf den Framebuffer hast du damit nicht (also per Lock wie in DirectDraw).

Aber sonst: Was mein Vorposter sagte. Für einen Raytracer dürfte das Anzeigen des Bildes am Ende das kleinste Problem sein.

ScottManDeath
2007-02-27, 17:37:54
Thou shall save an image file. ;)

Gast
2007-02-27, 22:25:22
Da das hierzu gut paßt: Ich will mir zu etwas ganz ähnlichem flott einen Satz Vektoren-Klassen basteln und habe eben dies vor kurzem schon in C# gemacht und dies rüberportieren. In C# fand ich sehr cool, wie sich swizzling über die Properties realisieren lies. Geht ggf. auch mit Java inzwischen etwas der Form?

ScottManDeath
2007-02-27, 22:43:49
Denke nicht, dass es so einfach geht. Was mich aber bei Java interessiert ist wie man Vektoren/Matrizen performant als Referenzen implementiert? In C# hat man die Moeglichkeit eigene Value Types zu nutzen, die auf dem Stack leben und nicht vom GC verwurstet werden. Zudem sind Vektoren ohne Operator Overloading *aehm*, nun ja nicht so einfach handzuhaben.

In C++ kann man das mit unions und poesen #defines (http://www.forum-3dcenter.org/vbulletin/showthread.php?t=274125) machen, da Java beides nicht hat duerfte es schwer werden. Allerdings kann man sich mit einem Mygeneration (http://www.mygenerationsoftware.com/portal/default.aspx)template entsprechende xyz(...) Methoden generieren fuer Swizzling.

Gast
2007-02-28, 16:04:18
Moin

ich habe mir überlegt, mal einen kleinen Raytracer in Java zu schreiben (nur um das mal gemacht zu haben und weil ich in Java ziemlich eingerostet bin) und im gleichen Zug mal etwas mit MultiThreading zu exprimentieren. Während ich mir über die eigentlich Umsetzung des Algorithmus relativ klar bin, frage ich mich womit ich das Drumherhum beschreibe.


Wie repräsentiere ich am Besten die Szenengeometrie bzw. in welchen Formaten macht es Sinn dies in Java zu importieren?
Wo rendere ich in Java rein? Ich möchte gern, daß man zusehen kann wie das Bild gerendert wird und frage mich wie ich das Bild der Szene aufbaue? In C++ würde ich wohl SDL nehmen, was nehme ich in Java?


danke!

DirectX? Das SDK runterladen und J# dazu. (Ist zwar dann managed code aber darauf kommt es dir ja nicht an, wenn ich das richtig verstanden habe)

Silpion
2007-02-28, 16:41:29
Die Szenengeometrie solltest du gemäß den zu erwartenden Szenen aufbauen. Ich hatte mal einen Raytracer geschrieben, bei dem man mit den Objekten CSG-Operationen ausführen konnte, dadurch konnte man mit sehr wenigen Objekten hübsche Szenen gestalten. Wenn deine Szenen aus vielen Dreiecken oder ähnlichem bestehen, bietet sich ein Octtree oder ähnliches an.