Also ich bin mittlerweile soweit, dass ich einen VertexShader habe und diesem sowol eine eigene Matrix mitgeben kann (Model,Projection). Nun habe ich mir gedacht machst du einfach mal 3 Matrizen (testweise) Model , View , Projection
Shader auszug.
Code:
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(in_Position * m, 1.0);
Nun berechne ich die LookAt Matrix und schiebe sie in die viewMatrix( = id * LookAt)
Die lookAt habe ich so wie hier berechnet :http://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml
Am ende steht dann:
glMultMatrixf(M);
glTranslated(-eyex, -eyey, -eyez);
Code:
Type = dense , numRows = 4 , numCols = 4
0,000 0,000 0,000 0,000
0,000 0,000 0,000 0,000
-0,000 -0,000 1,000 0,000
0,000 0,000 0,000 1,000
<=> glMultMatrixf(M);
Type = dense , numRows = 4 , numCols = 4
1,000 0,000 0,000 -0,000
0,000 1,000 0,000 -0,000
0,000 0,000 1,000 -2,000
0,000 0,000 0,000 1,000
<=> glTranslated(-eyex, -eyey, -eyez);
Type = dense , numRows = 4 , numCols = 4
1,000 0,000 0,000 0,000
0,000 1,000 0,000 0,000
0,000 0,000 0,000 0,000
0,000 0,000 0,000 0,000
das Multiplizierte ergebnis.[/CODE]
Wie jetzt jeder erkennen sollte, der Matritzen in der Schule hat, fällt bei einer Multiplikation mit einem Vektor alles bis auf, in vielen Literaturen heist es "w" eintrag, den w eintrag alles weg.
Code:
SimpleMatrix viewingMatr = SimpleMatrix.identity(4);
SimpleMatrix F = new SimpleMatrix(3, 1);
SimpleMatrix UP = new SimpleMatrix(1, 3);
F.setColumn(0, 0, centerX - eyeX, centerY - eyeY, centerZ - eyeZ);
UP.setRow(0, 0, upX, upY, upZ);
float norm_F = (float) Math.sqrt(
(centerX - eyeX) * (centerX - eyeX)
+ (centerY - eyeY) * (centerY - eyeY)
+ (centerZ - eyeZ) * (centerZ - eyeZ));
float norm_UP = (float) (Math.sqrt(
upX * upX
+ upY * upY
+ upZ * upZ));
F = F.scale(1.0 / norm_F);
UP = UP.scale(1 / norm_UP);
SimpleMatrix s = F.mult(UP);
SimpleMatrix u = s.scale(1 / s.normF()).mult(F);
viewingMatr.setRow(0, 0, s.get(0), s.get(1), s.get(2), 0);
viewingMatr.setRow(1, 0, u.get(0), u.get(1), u.get(2), 0);
viewingMatr.setRow(2, 0, -F.get(0), -F.get(1), -F.get(2), 0);
SimpleMatrix trans = SimpleMatrix.identity(4);
trans.setColumn(3, 0, -eyeX, -eyeY, -eyeZ, 1);
habe noch den code angehange der Methoden rumpf sieht so aus:
Code:
public static void lookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)
Ich hoffe von euch sieht einer den Fehler oder kann mir anders weiterhelfen, ich bin grade Betriebsblind glaube ich.