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

Aktuelle Zeit: Do Mär 28, 2024 09:08

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Die leidigen Matrizen wiedermal
BeitragVerfasst: Di Sep 11, 2012 20:23 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Hallo Leute,
nach langer Zeit hab ich mich mal wieder an meine Entwicklungen gesetzt. Ich bin inzwischen auf Lwjgl gewechselt und auf glsl3. Nachdem da ja nun weite Teile der Renderpipeline wegfallen und selbst in die Hand genommen werden muessen und das ja offenbar auch der Weg ist, in den die Entwicklung geht, moechte ich das gern mal versuchen.
Allerdings scheitere ich an den Matrizen... Ich orientiere mich an: http://openglbook.com/the-book/chapter- ... dimension/

Ich hatte bereits eine Anwendung, in der ich mich frei durch eine Welt bewegen konnte und in der durch glsl1.2 eine Figur in den Raum gerendert wurde.
Nun entfaellt mir die modelviewprojection Matrix in glsl und ich muss mich selber drum kuemmern. Die Projektionsmatrix war einfach, die Auswirkungen hab ich auch sofort gesehen. Ich hab in meiner Cameraklasse die entsprechenden gluPerspective Methoden rausgenommen und selbst eine Projektionsmatrix errechnet (alles bisher noch test code..):

Code:
  1.       projectionMatrix = MatrixUtils.CreateProjectionMatrix(45.0f, window.getWidth() / window.getHeight(), nearClipping, farClipping);
  2.       glMatrixMode(GL_PROJECTION);
  3.       glLoadIdentity();
  4.       FloatBuffer tmp = BufferUtils.createFloatBuffer(16);
  5.       projectionMatrix.store(tmp);tmp.rewind();
  6.       glLoadMatrix(tmp);
  7.       glMatrixMode(GL_MODELVIEW);


Das sieht nun gleich aus, wie vorher - so weit so gut.
Nun brauch ich fuer den gezeigten Shader noch die ModelMatrix und die ViewMatrix:
Code:
  1. #version 400
  2.  
  3. layout(location=0) in vec4 in_Position;
  4. layout(location=1) in vec4 in_Color;
  5. out vec4 ex_Color;
  6.  
  7. uniform mat4 ModelMatrix;
  8. uniform mat4 ViewMatrix;
  9. uniform mat4 ProjectionMatrix;
  10.  
  11. void main(void)
  12. {
  13.     gl_Position = (ProjectionMatrix * ViewMatrix * ModelMatrix) * in_Position;
  14.     ex_Color = in_Color;
  15. }
  16.  


Als Modelmatrix hab ich eine identityMatrix gewaehlt, weil ich das Model nicht weiter verschieben moechte. Und als ViewMatrix nehm ich die Matrix meiner Camera, die ich bereits errechne bei Drehungen, Bewegungen etc.
Alle Matrizen uebergeben und ausgefuehrt wird die Figur nicht angezeigt. Selbst wenn ich nur die Modelview, die ja Identity ist, uebergebe und multipliziere, seh ich das Objekt schon nichtmehr.

Mal kurz den entsprechenden Snippet:
Code:
  1.       projectionMatrix = camera.getProjectionMatrix();
  2.       modelMatrix = new Matrix4f();
  3.      
  4.       viewMatrix = new Matrix4f();
  5.       // Use the vertex array object. This will automatically cause OpenGL
  6.       // to read our vertex position/color data and the indices data.
  7.       glUseProgram(test.getProgramId());
  8.      
  9.       projectionMatrix.store(matrix44Buffer); matrix44Buffer.flip();
  10.       glUniformMatrix4(test.getProjectionMatrixLocation(), false, matrix44Buffer);
  11.       modelMatrix.store(matrix44Buffer); matrix44Buffer.flip();
  12.       glUniformMatrix4(test.getModelMatrixLocation(), false, matrix44Buffer);
  13.       viewMatrix.store(matrix44Buffer); matrix44Buffer.flip();
  14.       glUniformMatrix4(test.getViewMatrixLocation(), false, camera.getCameraEntity().getMatrix().get(true));


Vielleicht verstehe ich die drei matrizen ja grundsaetzlich falsch. Mein Verstaendnis ist:
- model Matrix: die Matrix des Modells, die ich auch getrost als identity lassen kann, wenn ich das Objekt weder verschieben noch drehen will (also nur die "rawdaten" des VBOs verwenden will)
- view Matrix: die Matrix meines Blickes, sprich meiner Camera. Wie ist meine Camera gedreht und ausgerichtet.
- projectionMatrix: wie wird die welt von 3d in 2d transformiert. orthogonal oder perspektivisch

Bin gerade etwas ratlos, weil ich auch so schwierig rausfinden kann, wo genau der Fehler liegt.
Wuerd mich ueber Hilfe freuen.
Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Die leidigen Matrizen wiedermal
BeitragVerfasst: Mi Sep 12, 2012 18:13 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
ich kenne nur die MODELVIEW_MATRIX, keine MODEL oder VIEW matrix...

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Die leidigen Matrizen wiedermal
BeitragVerfasst: Mi Sep 12, 2012 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
end hat geschrieben:
ich kenne nur die MODELVIEW_MATRIX, keine MODEL oder VIEW matrix...


Die ModelView Matrix ist nichts anderes als die Multiplikation der View- mit der Model-Matrix. Die Model-Matrix definiert die Transformation von lokalen Objektkoordinaten in Weltkoordinaten (World-Space). Die View-Matrix definiert die Transformation in den View-Space. Die Projektionsmatrix dann in den Screen-Space.

@Topic: Ich bin mir gerade nicht ganz sicher, aber kann es sein, dass du durch die Klammer im Shader die Multiplikationsreihenfolge verdrehst?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Die leidigen Matrizen wiedermal
BeitragVerfasst: Mi Sep 12, 2012 22:48 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Ja das ist natürlich ein guter Hinweis

Ich habs mal ganz explizit umgedreht:

gl_Position = ((ModelMatrix * ViewMatrix) * ProjectionMatrix) * in_Position;

Aber nun noch ein Hinweis, der mir grad aufgefallen ist. In dem Tutorial wird glsl4 angegeben. Wenn ich das ausführe liefert mir die Console:
0(2) : warning C7568: #version 400 not fully supported on current GPU target profile

Das verwundert mich, denn laut internet supported meine Grafikkarte GLSL4 (http://www.nvidia.com/object/product_qu ... _m_us.html).
Nun ist natürlich auch die Frage, ob ich so eine hohe Version für diesen einfachen Shader überhaupt brauche. Ich hab mal 140 eingestellt, die Warnung verschwindet, aber ich sehe das Objekt trotzdem nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Die leidigen Matrizen wiedermal
BeitragVerfasst: Do Sep 13, 2012 11:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Shaddow hat geschrieben:
Aber nun noch ein Hinweis, der mir grad aufgefallen ist. In dem Tutorial wird glsl4 angegeben. Wenn ich das ausführe liefert mir die Console:
0(2) : warning C7568: #version 400 not fully supported on current GPU target profile

Das verwundert mich, denn laut internet supported meine Grafikkarte GLSL4 (http://www.nvidia.com/object/product_qu ... _m_us.html).
Nun ist natürlich auch die Frage, ob ich so eine hohe Version für diesen einfachen Shader überhaupt brauche. Ich hab mal 140 eingestellt, die Warnung verschwindet, aber ich sehe das Objekt trotzdem nicht.


Du verwechselst da wohl etwas. Die Karte unterstützt ShaderModel 4.0, diese Nummerierung hat aber nichts mit der unterstützten GLSL-Version zu tun. ShaderModel 4.0 entspricht GLSL 3.30. Shadermodel 5.0 z.B. entspricht GLSL 4.2.

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


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


Wer ist online?

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