Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Das es Techniken gibt, die auf der GPU nicht schneller ablaufen hätte ich jetzt eben grade wegen der Parallelisierung eigentlich nicht erwartet. Weißt du zufällig, inwieweit "komerziellere" Raytracer sowas auch auf die GPU auslagern bzw. wieviele es gibt, die sowas unterstützen? Ich ging bislang immer davon aus, die "begnügen" sich damit, Vielkern-Prozessoren bzw. Vielprozessoren-Systeme durch mehrere Threads voll ausnutzen. GPU(s) gleichzeitig mitrechnen lassen wird ja dann wohl noch ne Ecke komplizierter.
Eigentlich war ich ja überrascht, dass es doch schon so schnell auf Rasterizer-Karten geht (gut, da fehlt ja eigentlich noch der größte Spaß), insbesondere, da ich vor einigen Monaten mal die Ankündigung einer IBM-Raytracerkarte gelesen habe, die den Tod von ATI, nVidia und Rasterizern wegen der Qualität und Performance prophezeit hat. Leider ist mir dazu der Projektname entfallen und auf die Schnelle finde ich da auch nichts. Hat da zufällig jemand Infos zu?
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
sry will nich nerven
aba ich komm halt alleine bei meinem problem bzw meinen problemen (siehe mein letzten post) nich weiter
hoffe du kannst mir ma dem nächst weiter helfen ...
cuz bubble
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
oh sorry, das ging wohl unter. hatte gedacht, daß alles beantwortet war.
du solltest die kamera besser als klasse definieren. wenn dus geschickt anstellst, kannst du die klasse genauso behandeln wie alle anderen objekte musst nur bei anwendung der rotation/verschiebung daran denken, daß das am ende auf die von der kamera erzeugten strahlen genau umgekehrt wirkt. das bild solltest du auch besser mit vorzeichenlosen zahlen speichern - negative werte machen hier eher wenig sinn. üblicherweise genügen sowieso bytes, wenn du allerdings HDR planst, kanns schon sinnvoll sein.
das raytraceimage kannst du durchaus in der kamera lassen. ich hielt es bei meinem tracer aber für sinnvoller, dieses und alle schnittsucher (schatten, licht, etc.) in eine eigene klasse zu legen und sie dann davon sogar verschiedene tracer abzuleiten - etwa welche, die nur den ersten schnitt suchen und dann die normale der oberfläche oder die tiefe im bild anzeigen, nur deren ambiente grundfarbe oder tatsächlich alles rechnen, was der tracer kann. aber im wesentlichen handelt es sich dabei um eine recht grundlegende designfrage, die man am besten für sich selber beantwortet, wie man seinen tracer organisieren will, damit man auch selbst den überblick behält. meine lösung ist da sicher nicht die einzig richtige - da spielt aber v.a. erfahrung und konzentrierte planung eine bedeutende rolle.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also. Das erstere ist etwas besonderes. Ein Operator mit 3 Argumenten. Er macht das selbe wie ein If then else.
Heißt im konkreten Fall:
Code:
if (x1 = x2)
than return 1;
else return 2;
Das zweite ist eine neue For-Schleifen-Art. Eine Schleife über alle Bestandteile eines Arrays. Anstatt einen Zähler hochzuzählen wird nacheinander die Bestandteile eines Arrays in die Hand genommen.
Umgeschrieben in eine klassische For-Schleife hieße das hier:
Code:
var obj : Kugel;
for i := 0 to SichtbareKugeln.length-1 do
begin
obj := SichtbareKugeln[i];
//Hier kommt der eigentliche Schleifeninhalt hin.
end;
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Du kannst auch die Funktion IfThen benutzen. Würd ich aber nicht empfehlen, da derlei Konstrukte den Quelltest doch sehr unleserlich machen.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
huhu,
bin jetzte schon nen kleines stückchen weiter ... hab aber irgendwie nen problem mit licht/schatten
erstmal zur theorie:
man hat ja den nahesten schnittpunkt des körpers zur kamera. nun muss man doch eigentlich von da aus einfach nur jeweils einen strahl zu den lichtquellen "schicken" und gucken ob dieser von anderen körpern getroffen wird und ob diese zwischen lichtquelle und dem eigentlichen schnittpunkt liegen oder?
so nun hab ich aber folgendes problem, die meine kugel (die im moment noch wie nen kreis aussieht >.< ) ist auf den Koordinaten (0,0,50) und meine lichtquelle auf der Koordinate (0,10,50) also 10 LE drüber wenn man sich jetzte die bilder mit und ohne licht anguckt dann sieht man das da was nicht stimmt
könnt ihr irgendnen fehler entdecken?
cuz bubble
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
durch rechenungenauigkeit schneidet sich der strahl von der kugel zur sonne oft mit der kugel direkt dort wo du ihn hast starten lassen - den startpunkt mithilfe der normalen ein klein bischen von der oberfläche wegbewegen löst das problem.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
huhu,
ich komm schon wieder mit einem Problem.
Dieses Mal gehts um den Reflektionsstrahl. Und zwar weiß ich nicht wie man den berechnet ... Ich hab schon gegooglet und nix gefunden. Mir Bücher in der Uni ausgeliehen, wieder nix. Dann hab ich gestern meine Mathe-Lehrerin gefragt. Sie wusste wie man den berechnet, hat's aber nicht hinbekommen es so zu erklären, dass ich es verstehe (das ist bei Lehrerin allgemein das Problem, nicht das hier jmd was falsches über mich denkt )
Genauer brauch ich beim Reflektionsstrahl eigentlich nur noch den Richtungsvektor
cuz bubble
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
also ich würd mal sagen Einfallswinkel = Ausfalswinkel
der Reflektionsstrahl hat also als Ursprung deinen Schnittpunkt und als Richtungsvektor deinen Normalvektor minus deinen Einfallsvektor. (korrigiert mich wenn ich falsch liege )
aber das müsste eigendlich so hinkommen
also ich muss jetzt ja auch mal mein Lob für diese Tutorials ausdrücken.
Die sind wircklich sehr gut um sich in die Materie einzuarbeiten und dann von dort aus weiter zu machen.
Ich bin erstaunt wie schnell man dabei gute Ergebnisse erzielen kann, ich hab letzte Woche angefangen mir einen Raytracer zu schreiben und hab schon ein paar schöne Bilder erzeugen können. Er kann zwar bisher nur Kugeln, Ebenen, und Dreiecke aber damit kann man ja schon was anfangen.
Hab mal ein Bild in Anhang gepackt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: So Jan 07, 2007 21:26 Beiträge: 130 Wohnort: mal hier mal da mal irgendwo
Das damalige Projekt Raytracer hatte ich eingestellt, durch Hardware-Schäden hatte ich einen kompletten Datenverlust.
Da ich nun das Projekt ganz neu aufrolle, bin ich auf ein Problem gestoßen. Muss dazu sagen, dass ich das ganze unter Delphi entwickle:
Das Problem ist folgendes: Ich habe Objekt TScene, da drinne ist zur Zeit nur ein Objekte-Array, das halt Informationen über die aktuelle Szene enthält, die wird halt der Render-Prozedur des Raytracer-Objekts übergeben. Diese berechnet dann die Farbe für jeden Pixel. Bisher habe ich nur Kugeln implementiert, soll sich noch ändern, dazu solls aber erstmal mit Kugel funktionieren. Das Problem ist, dass ich egal wie Groß die Kugel ist, oder wo ihr Mittelpunkt ist, dass alle Pixel des Bildes die Farbe der Kugel bekommen (Ich möchte erstmal ganz simpel die Farbe der Kugel halt ausgeben)
Ich habe ein eigenes Objekt für Farben gebastelt, welches die Farbkanäle RGBA hat. Alle "Kanalwerte" sind single-Variablen.
Also ich habe 2 vermutungen, was der Fehler sein könnte, finde ihn aber nicht :-/
1. Variante: Die RayIntersection-Funktion ist falsch.
2. Variante: Meine ShootRay-Funktion ist fehlerhaft.
Zu Variante 1:
Code:
function TSphereObject.RayIntersection(const Ray: TRay;
Ich hoffe hier versteht mein Problem, wenn Informationen fehlen einfach Bescheid sagen
Edit: Was höhst interessant sein sollte und mir gerade aufgefallen ist:
Der Strahl hat ja ein Skalar für den Richtunsvektor, davon hab ich fast jeweils 2, alle sind gerundet 110 bzw. -90, bei Radien von 10, 0.1 und 0.001
Quasi immer gleich... Ich versteh aber nicht wieso :S
cuz bubble
_________________ Wenn Worte nichts als Worte sind, dann müssen's Steine sein! Solange - bis sie pleite sind - schmeißt Fensterscheiben ein! - Fidl Kunterbunt -
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.