(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
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)
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:
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
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:
#Definition der Punkte
v 1.0-1.0-1.0
v 1.0-1.01.0
v -1.0-1.01.0
v -1.0-1.0-1.0
v 1.01.0-1.0
v 1.01.01.0
v -1.01.01.0
v -1.01.0-1.0
#Definition der Flächen:
f 1234
f 5876
f 1562
f 2673
f 3784
f 5148
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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.
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
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"
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 network • my 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
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)
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 network • my 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
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.