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

Aktuelle Zeit: Di Jul 15, 2025 16:41

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



Ein neues Thema erstellen Auf das Thema antworten  [ 30 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: So Nov 07, 2004 14:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hallo!

Ich habe mir das Licht-Tutorial angesehen.
Allerdings habe ich ein Problem mit der Position.

Zitat:
Stationäre Lichtquellen

Lichtquellen, die an einer bestimmten Stelle in der Szene stehen, müssen mit der Kamerabewegung mitgeschoben werden. Entsprechend muss das Licht angegeben werden, bevor die Modelviewmatrix durch Objekte verschoben wird, aber nachdem die Kamera initialisiert wurde.

glLoadIdentity;
..glRotatef, glTransaltef.. für die Kamera
glLightfv(GL_LIGHT0, GL_POSITION, @position[0]);
glPushMatrix;
..glRotatef, glTransaltef.. für die Objekte
DrawObjekts;
glPopMatrix;


Das ist der Ausschnitt des Positionierens...
Das geht doch genau so, wie das Positionieren einer Box?!

Ich rotiere mein "Level" ganz normal. und IN diesem Level steckt auch mein Licht.
Also müsste dies doch dort bleiben wos ist oder?
Also an der Stelle zeichne ich noch nen Dreieck, wo das Licht sein soll.
Aber irgendwie wandert es mit.

Soll ich noch Bilder machen?

_________________
www.audi32.de


Zuletzt geändert von Adler am So Nov 07, 2004 15:05, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
So, habe jetzt glaube ich wirklich gut gelungene Bilder gemacht, an denen man es gut erkennen kann.
Also:

EDIT:
Das dreieck ist im 2. Bild links oben.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 15:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Wo ist denn im unteren bild das licht?
Naja oben sieht die Kugel falschrum beleuchtet aus, wenn ichs richtig erkenne.
Sind die Normalen eventuell falsch berechnet, zeigen sie in die falsche richtung oder werden sie falsch aufgerufen???

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Ja die Kugel ist blau weiß-
Deshalb kommt des oben einem so vor .. ^^
Aber auch das Level sieht doch falsch aus.

Warum ist im zweiten Bild denn links dunkel und net rechts?! Es sollte doch vom dreieck aus in alle richtungen Dunkel werden oder nicht?

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 16:15 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
think about the difference between:

setting the light
setting the cammera
drawing the objects

and

setting the camera
setting the light
drawing the objects

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 18:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Huch, die reihenfolge ist schon richtig so (oder ich steh gerade voll aufm schlauch).

Hast du die sache mit den normalen mal durchgesehen???
Ich hatte vor ein par tagen einen fehler mit der normalenrichtung und wollts erst auch nicht glauben.

Vielleicht sind ja auch die lichtcoordinaten vertauscht, oder der vierte parameter der Position ist nicht 1???

Viel mehr fellt mir nicht ein, aber ich denke es ist ein einfacher fehler.

Eventuell könntest du noch mehr Quelltext posten, wenn der nicht zu groß ist??

Die bilder sind ein bischen schlecht zu erkenne, ich seh zum beispiel nichtz genau, ob der boden rechts im zweiten bild hoch oder runter geht (dass würde ja auch eigentlich aus correcter beleuchtung hervorgehen :-)

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 18:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Ach ja

glEnable(GL_NORMALIZE); (irgedndwo vor dem rendern)

kennst du aus dem Tutorial, oder???

Bei Benutzung von Scalebefehlen solltest du dass sonst aktivieren, um die Normalen wieder auf die Länge 1 zu bringen

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
glEnable(GL_NORMALIZE);
Wenn ich das davor setze, ist alles schwarz.
Nun aber mal was anderes, wie siehe ich obs richtig oder falsch beleuchtet ist? :-/
Das mit den Normalen, wie sehe ich das denn?

4ter Wert von Pos ist 1.0

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 19:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Naja du weißt wo dein licht sein sollt.

Wenn jetzt alles, was hell sein sollte, dunkel ist
und alles, was dunkel sein sollte, hell ist, usw
dann sind die Normalen genau falschrum.

Ich weiß ja nicht wie du sie berechnest, ich mach das, wenn p1,p2,p3 die vektoren der Punkte eines Dreieckes sind, mit:
(p1-p2)x(p1-p3)

wobei mann dass natürlich nicht einfach so hinschreiben kann, da delphi ja von sich aus nicht mit vektoren rechnen kann.
also:
nx:=+(p1y-p2y)*(p1z-p3z)-(p1z-p2z)*(p1y-p3y);
ny:=-(p1x-p2x)*(p1z-p3z)+(p1z-p2z)*(p1x-p3x);
nz:=+(p1x-p2x)*(p1y-p3y)-(p1y-p2y)*(p1x-p3x);
Ähm naja dass ist dir wohl auch klar.

Wenns nun alles falschrum ist rechne ich hallt:
(p1-p3)x(p1-p2)

b.z.w.:

nx:=+(p1y-p3y)*(p1z-p2z)-(p1z-p3z)*(p1y-p2y);
ny:=-(p1x-p3x)*(p1z-p2z)+(p1z-p3z)*(p1x-p2x);
nz:=+(p1x-p3x)*(p1y-p2y)-(p1y-p3y)*(p1x-p2x);

Warum glEnable(GL_NORMALIZE); alles schwarz macht ist mir ein rätsel, da sollte sich mal jemand qualiofizierteres zu wort melden :-)

Poste doch mal mehr quelltext z.b.: wo die normalen berechnet werden und die komplette zeichnungsgeschichte.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 20:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Mh :-/

Zitat:
OpenGl berechnet die Farbe des Lichts, das auf ein Objekt trifft mithilfe der Richtung aus der das Licht kommt und der Ausrichtung der Oberfläche eines Vertex.


Da steht doch OpenGL berechnet das?! ^^
Habe keine Normalen berechnet :-(
Da stand doch nur, dass man die Normalen auch mitgeben KANN...
Also muss ich das auch noch machen :-/
Muss ich da jetzt für jedes Dreieck dies berechnen?

Ui.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 20:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ja, Normalen MUSS man berechnen wenn man korrekte Beleuchtung will, das was du da zitierst bezieht sich auf das Licht und nicht die Normalen. OpenGL braucht diese, da man über Normalen diverse Beleuchtungseffekte realisieren kann. (z.B. weiche/harte Kanten)

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 21:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Ok, danke euch!
Dann werde ich erstmal versuchen meine Normalen zu berechnen...
Aber die Frage
"Für jedes Dreieck?" Bleibt noch offen.
Dann muss ich ja meine kompletten Models berechnen oder?
Wie sieht das mit der Geschwindigkeit aus?
Sonst lass ich die Figuren weg :-/

Die Normalen muss ich ja dann jeden Frame berechnen?!
Denn die Figuren bewegen sich ja ...

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 21:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Normalen werden doch im lokalen Koordinatensystem angegeben.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 21:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Ja da muss ich sie dann auch immer berechnen?!
Also fürs Level muss ich die nur einmal berechnen und dann immer auslesen, oder net?
Aber für die beweglichen figuren? jeden Frame oder was? :-/
Ich dachte erst ich hätts kapiert :-/

Ich such mal im Netz nach noch nem Lichttutorial.
Denn bis auf die Normalen ist das gut verständlich :-(

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 07, 2004 21:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
So quasi?
Code:
  1.       glNormal3f(
  2. (+(vMap[m][i].y*y_faktor) -(vMap[m][i].y*y_faktor)) * ((2*m*z_faktor) - (2*m*z_faktor-z_faktor))          -  ((vMap[m][i].y*y_faktor) -(2*m*z_faktor-z_faktor))  * ((vMap[m][i].y*y_faktor) - (vMap[m][i].y*y_faktor))   ,
  3. (-(2*i*x_faktor)          -(2*i*x_faktor))          * ((2*m*z_faktor) - (2*m*z_faktor-z_faktor))          +  ((2*m*z_faktor)          -(2*m*z_faktor-z_faktor))  * ((2*i*x_faktor) - (2*i*x_faktor+x_faktor))   ,
  4. (+(2*i*x_faktor)          -(2*i*x_faktor))          * ((vMap[m][i].y*y_faktor) - (vMap[m][i].y*y_faktor)) -  ((vMap[m][i].y*y_faktor) -(vMap[m][i].y*y_faktor))  * ((2*i*x_faktor) - (2*i*x_faktor+x_faktor))
  5.    );
  6.       glTexCoord2F(0,0); glVertex3f(2*i*x_faktor,vMap[m][i].y*y_faktor,2*m*z_faktor);
  7.       glTexCoord2F(0,1); glVertex3f(2*i*x_faktor,vMap[m][i].y*y_faktor,2*m*z_faktor-z_faktor);
  8.       glTexCoord2F(1,1); glVertex3f(2*i*x_faktor+x_faktor,vMap[m][i].y*y_faktor,2*m*z_faktor-z_faktor);


Übersichtlicher gings net ^^
Ist halt alles bissl "komplexer"

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 30 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]