Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 04, 2025 22:57

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Raytracing: Kameraproblem
BeitragVerfasst: Do Aug 28, 2008 17:38 
Offline
DGL Member

Registriert: Do Aug 28, 2008 16:29
Beiträge: 3
Hallo,

ich hab mir grad das Raytracing Tutorial durchgelesen ( http://wiki.delphigl.com/index.php/Tutorial_Raytracing_-_Grundlagen_I ) und ich hab folgende Fragen:

1. Könntet ihr mir bitte diesen Code erklären?
Code:
  1. public Ray ShootRay ( int x , int y )
  2. {
  3.     Ray result = new Ray();
  4.     result.Origin = Position;
  5.  
  6.     double xpart , ypart ;
  7.     xpart = ( ( double ) x ) / (double ) widthpixels;
  8.     ypart = ( ( double ) y ) / (double ) heightpixels;
  9.  
  10.     xpart = left + xpart * ( right - left ) ;
  11.     ypart = top + ypart * ( bottom - top ) ;
  12.  
  13.     result.Direction.x = xpart;                            Das ist der x-Wert des Vektors
  14.     result.Direction.y = ypart;                            Das ist der y-Wert des Vektors
  15.     result.Direction.z = 1.0;                               Das ist der z-Wert des Vektors
  16.  
  17.     result.Direction.Normalize();                        
  18.     return result;
  19. }
  20.  




2. Wieso hat man festgelegt, dass die Kamera 1 Pixel vom Bildschirm entfernt ist?
3. Da die Kamera ein Punkt ist und deshalb die Strahlen nicht alle senkrecht auf den Bildschirm treffen, müssten dann nicht unendlich viele Strahlen ausgesendet werden?

4.Was würde passieren, wenn alle Strahlen senkrecht auftreffen würden?


Vielen Dank für eure Antworten und viele Grüße

Coke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 29, 2008 16:37 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
zu 2.) die kamera ist so entworfen, daß die projektionsebene in z richtung von der kamera aus liegt. die 1 steht auch nicht für pixel sondern ist halt einfach eine eins - du kannst auch 2 nehmen, allerdings veränderst du dadurch den abstand zur projektionsebene - als würdest du weiter weg vom bildschirm sitzen; das bild wirkt dann mehr wie durch ein teleobketiv erzeugt. das gleiche liesse sich erreichen indem du den abstand zwischen right und left und den von top und bottom halbierst. am ende wird sowieso normiert...

zu 3.) nein es wird nur für jeden pixel des monitors ein pixel gesendet - du kannst auch mehrere, leicht versetzt verschicken, um kantenglätung zu realisieren.
würdest du alle strahlen senkrecht verschicken, also result.Direction.x = result.Direction.y = 0 , dann würdest du statt einer perspektivischen eine orthogonale projektion erzeugen, bei der die tiefe keinen einfluss auf die größe der objekte hat - als würdest du einen konstruktionsplan oder ein schrägbild zeichnen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 29, 2008 16:43 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Wie Nico schon sagte, du musst halt bedenken, dass du die Strahlen vom Bildschirm / Der Kamera aussendest und nicht von woanders. Des weiteren ist die Kamera eigentlich auch kein Punkt sondern eine Fläche. Und die Strahlen werden nicht parallel losgeschickt, sondern Ellipsenförmig, damit wie beim menschlichen Auge ein Eindruck von Tiefe entsteht. Bei parallelen Strahlen wäre das Ergebnis glaube ich das einer Parallelprojektion. (wie der Name schon sagt)

zu 1.:
Bei meinem Raytracer sieht der Code so aus:
Code:
  1. function TForm1.GetRay(x, y: single): TRay;
  2. begin
  3.   result.d := to_v3f(x - image1.Width / 2,
  4.                    image1.Height - y - image1.Height / 2,
  5.                    FocalDistance);
  6.   result.p := to_v3f(result.d.x, result.d.y, 0);
  7.   result.d := v3f_normalize(result.d);
  8. end;

Dabei ist FocalDistance eine Art "Brennweite", x und y sind die Koordinaten des Pixels auf dem Schirm (TBitmap, TCanvas, wie auch immer).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]