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

Aktuelle Zeit: Sa Mai 11, 2024 03:18

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Di Jan 28, 2014 23:47 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
(die im VS 1:1 durchgereicht werden) ist immer counter-clockwise - egal, ob z nun 0.5 oder -0.5 ist.

Das ist mir schon klar.
Zum besseren Verständnis nehme ich anstelle des Dreiecks ein Rechteck zum Zeichen des Zylinder.

Nun das Problem, man zeichnet z.B. einen Zylinder. Wen Z+ gegen mich ist verschiebe ich das gegen mich und rotiere es ein paarmal um den Nullpunkt. Ist ab Z+ in den Bildschirm hinein und das Dreieck wird Z+ verschoben und gedreht, dann sieht man die Innenseite des Zylinders.
Das selbe tritt natürlich auch ein, wen ich den Teapot via OBJ lade.
Das Problem tritt natürlich nur auf wen CullFace aktiv ist.

Ich hoffe ihr versteht was ich meine.

Zitat:
Falsch machen kann man also nix, solange man es einheitlich macht.

Im Wiki habe ich gelesen, das man gewisse Regeln einhalten soll, besonders wen man den Quelltext mal weitergibt.

Zitat:
P.S. : Hab auch grad nen OBJ-Loader für Android gebaut

Ist dieser Opensource ? :wink:

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Mi Jan 29, 2014 18:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
Ich verstehe dein Problem mit dem Zylinder nicht. Du erzeugst halt Drei- oder Vierecke, die den Mantel bilden. Der Zylinder ist ausgerichtet wie ein Fallrohr. Nun kannst du ihn drehen wie du willst, entweder siehst du immer die Backfaces oder immer die Frontfaces (kommt halt auf das Mesh und die Einstellungen an). Das ist m.M.n. unabhängig davon, in welche Richtung die Z-Achse zeigt. Hast du diesen Fall wirklich ausprobiert?

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Mi Jan 29, 2014 18:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Zitat:
P.S. : Hab auch grad nen OBJ-Loader für Android gebaut

Ist dieser Opensource ? :wink:


Das sind nicht mal 50 Zeilen, für die man mit halbwegs brauchbaren Programmierkenntnissen circa ne halbe Stunde braucht ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Mi Jan 29, 2014 19:56 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Beim zweiten Bild habe ich die Z-Achse mit glDepthRange(1.0, 0.0) vertauscht, so das die Z+ gegen mich ist.

Beim ersten Bild ist alles in der Standard-Einstellung und man sieht in den Würfel hinein, so wie beim obersten Post.
Bei dem Würfel mit dem OpenGL Logo sind die Koordinaten im Uhrzeigersinn.

Bei beiden Bildern ist dies aktiviert.
Code:
  1. glEnable(GL_CULL_FACE);
  2. glCullFace(GL_BACK);
  3.  
  4. glFrontFace(GL_CCW);

Die Koodinaten für den Würfel sind vom OBJ-Loader, dabei schreibe ich die Daten 1:1 in den Vertexbuffer.
Code:
  1.   #Definition der Punkte
  2.   v 1.0 -1.0 -1.0
  3.   v 1.0 -1.0 1.0
  4.   v -1.0 -1.0 1.0
  5.   v -1.0 -1.0 -1.0
  6.   v 1.0 1.0 -1.0
  7.   v 1.0 1.0 1.0
  8.   v -1.0 1.0 1.0
  9.   v -1.0 1.0 -1.0
  10.  
  11.   #Definition der Flächen:
  12.   f 1 2 3 4
  13.   f 5 8 7 6
  14.   f 1 5 6 2
  15.   f 2 6 7 3
  16.   f 3 7 8 4
  17.   f 5 1 4 8


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

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Mi Jan 29, 2014 22:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Hast du da jetzt eine Ortho Projektion eingebaut oder immer noch garkeine Projektion?

Benutzt du glDrawArrays mit GL_QUADS oder splittest du die QUADS aus der Obj Datei in Dreiecke auf?

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Mi Jan 29, 2014 23:10 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Benutzt du glDrawArrays mit GL_QUADS oder splittest du die QUADS aus der Obj Datei in Dreiecke auf?

Ich erzeuge 2 Dreiecke mit den Vertex 1,2,3 und 1,3,4.

Ich habe da mal einen Ortho eingebaut, die Objekte sehn jetzt auch ohne glDepthRange gut aus.
Nur mit dem Translate stimmt jetzt dafür jetzt etwas nicht mehr, ich werde das morgen genauer anschauen.
Code:
  1. procedure TKoerper.Draw(CameraMatrix, ProjectionMatrix: TMatrix);
  2.  
  3.   function Ortho(left, right, bottom, top, znear, zfar: single): TMatrix;
  4.   var
  5.     x, y: integer;
  6.   begin
  7.     for x := 0 to 3 do for y := 0 to 3 do Result[x, y] := 0;
  8.     Result[0, 0] := 2 / (right - left);
  9.     Result[1, 1] := 2 / (top - bottom);
  10.     Result[2, 2] := -2 / (zfar - znear);
  11.     Result[3, 0] := -(right + left) / (right - left);
  12.     Result[3, 1] := -(top + bottom) / (top - bottom);
  13.     Result[3, 2] := -(zfar + znear) / (zfar - znear);
  14.     Result[3, 3] := 1;
  15.   end;
  16.  
  17. var
  18.   m: TMatrix;
  19.  
  20. begin
  21.   CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, ProjectionMatrix);
  22.   m := Ortho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0);
  23.  
  24.   CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, m);
  25.   glUniformMatrix4fv(CameraMatrix_id, 1, False, @CameraMatrix);
  26.   glUniformMatrix4fv(WorldMatrix_id, 1, False, @ProjectionMatrix);
  27.  
  28.   if FTexturen and (Length(TexturVertex) > 0) then begin
  29.     glUniform1i(ifTextures_id, 1);
  30.     glBindTexture(GL_TEXTURE_2D, TexturID);
  31.   end else begin
  32.     glUniform1i(ifTextures_id, 0);
  33.     glUniform4fv(VecColor_id, 1, @Color);
  34.   end;
  35.   glBindVertexArray(VAO);
  36.   glDrawArrays(GL_TRIANGLES, 0, Length(vertex));
  37. end;      

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Do Jan 30, 2014 00:01 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Nur mal so am Rande... du übergibst jedem TKörper in der Draw procedure die CameraMatrix und die Projektionsmatrix und sendest die an den Shader? Das brauchst du eigentlich nicht. Also sofern es sich um Objekte handelt, die eh mit den gleichen Matrizen gezeichnet werden.

z.B. Ich habe Projektions-, View- und Modelmatrix. Projektion und View hole ich aus der Camera Klasse und setze sie einmal nach dem binden des Shaders. Vorher wurde die Camera, entsprechend Bewegung oder was auch immer, angepasst. Nur die Modelmatrix kommt aus dem Modell (bei dir TKörper) selber. Im Shader werden sie dann noch multipliziert mit den Vertexdaten.



Noch was: Delphi übergibt Objekte doch per Referenz, oder? Falls ja dann würde
Code:
  1. CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, ProjectionMatrix);

deine CameraMatrix bei jedem Objekt das du zeichnest verändern.

Aber irgendwas stimmt da sowieso nicht. Da kommt die CameraMatrix und die ProjectionMatrix in die Funktion rein.
CameraMatrix wird mit ProjectionMatrix multipliziert, danach Camera mit Ortho. Also je nachdem was da in ProjectionMatrix rein kommt wendest du 2 Projektionen nacheinander an.

Und bei den Parametern für Ortho müsstest du noch das Seitenverhältnis deines Viewports einbeziehen, sonst ist alles verzerrt.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Do Jan 30, 2014 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Noch was: Delphi übergibt Objekte doch per Referenz, oder? Falls ja dann würde....deine CameraMatrix bei jedem Objekt das du zeichnest verändern.

Dann müsste im Procedure-Kopf var stehen:
Code:
  1. procedure TKoerper.Draw(var CameraMatrix, ProjectionMatrix: TMatrix);
  2. // anstelle
  3. procedure TKoerper.Draw(CameraMatrix, ProjectionMatrix: TMatrix);


Zitat:
danach Camera mit Ortho.

Mit was muss ich den Ortho multipilzieren ?

Nachtrag:
Jetzt habe ich den Fehler gesehen.
Code:
  1. m := Ortho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0);
  2. CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, m);
  3. CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, ProjectionMatrix);
  4. // anstelle so
  5. CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, ProjectionMatrix);
  6. m := Ortho(-2.0, 2.0, -2.0, 2.0, -2.0, 2.0);
  7. CameraMatrix := MatrixModif.MultiplyMatrices(CameraMatrix, m);


Zitat:
Und bei den Parametern für Ortho müsstest du noch das Seitenverhältnis deines Viewports einbeziehen, sonst ist alles verzerrt.

Da meinst was ich mit OpenGL 1.x so gemacht habe:
Code:
  1.   gluPerspective(30.0,           // Field-of-view angle
  2.                  gldAspect,      // Aspect ratio of viewing volume
  3.                  1.0,            // Distance to near clipping plane
  4.                  50.0);          // Distance to far clipping plane

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Fr Jan 31, 2014 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
damadmax hat geschrieben:
Noch was: Delphi übergibt Objekte doch per Referenz, oder?

Ja, für alles was einen Konstruktor hat. Strings auch, aber die sind Copy-On-Write, weshalb man das nicht merkt. Dynamische Arrays gehen auch per Referenz über den Stack.

Für alles andere wird gegebenenfalls eine Kopie angelegt (wenn der Parameter nicht gerade const ist).

grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Fr Jan 31, 2014 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ich habe nun noch Frustum eingebaut. Muss man dies anstelle von Ortho aufrufen, oder kombiniert man diese beiden ?

Sind dies richtige Parameter für Frustum ?

Code:
  1. SetFrustum(-2.0, 2.0, -2.0, 2.0, 2.0, 4.0);
  2.  
  3. procedure TCamera.SetFrustum(left, right, bottom, top, znear, zfar: glFloat);
  4. var
  5.   x, y: integer;
  6. begin
  7.   for x := 0 to 3 do for y := 0 to 3 do FFrustumMatrix[x, y] := 0;
  8.   with FrustumWerte do begin
  9.     FFrustumMatrix[0, 0] := 2 * znear / (right - left);
  10.     FFrustumMatrix[1, 1] := 2 * znear / (top - bottom);
  11.     FFrustumMatrix[2, 0] := (right + left) / (right - left);
  12.     FFrustumMatrix[2, 1] := (top + bottom) / (top - bottom);
  13.     FFrustumMatrix[2, 2] := -(zfar + znear) / (zfar - znear);
  14.     FFrustumMatrix[2, 3] := -1;
  15.     FFrustumMatrix[3, 2] := -2 * zfar * znear / (zfar - znear);
  16.   end;
  17. end;  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Fr Jan 31, 2014 21:44 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 14, 2013 21:17
Beiträge: 588
Programmiersprache: C++
glOrtho (und auch die anderen Funktionen, mit denen man gewöhnlich die Projektionsmatrix manipuliert, wie gluPerspective usw) berechnen ein Frustum und speichern es in einer Matrix. Zwei Frustums miteinander zu kombinieren macht in meinen Augen keinen Sinn.

_________________
So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Sa Feb 01, 2014 22:11 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Ortho funktioniert jetzt gut, aber bei Frustum kommt Frust auf, irgendwie ist das Bild total verzehrt.

Dies sollte ein Teekessel sein. Der Ausguss erkennt man ein bisschen. Beim ersten Bild habe ich die CameraMatrix verkleinernd skaliert.


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

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Di Feb 04, 2014 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Hat niemand eine Idee, was ich falsch mache ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Z-Achse vertauscht.
BeitragVerfasst: Mi Feb 05, 2014 09:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Sieht für mich etwas danach aus, als ob mit deiner w-Koordinate, eventuell in der Frustum-Matrix, etwas nicht in Ordnung sein könnte. Ich habe mich damit aber noch nicht so genau auseinander gesetzt.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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.025s | 19 Queries | GZIP : On ]