正如我刚才的问题我设法创造OpenGL和JOGL小太阳系:)现在我想旋转的摄像头从不同的角度表现出来。
我设法旋转立方体,但他们的运动平面保持不变。
GL3 GL = drawable.getGL()getGL3();
gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT);
//Model View Matrix
//Mat4 mv = new Mat4();
Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);
mv = mv.mul(MatrixMath.rotationZ(satellite));
mv.set(2, 2, 0.0f);
mv.set(2, 3, 0.0f);
cubeprogram.passUniformMatrix(gl, "model_view", mv);
gl.glDrawArrays( GL3.GL_TRIANGLES, 0, numVertices );
angle += 2.0f;
satellite = angle + 8.0f;
if (angle > 360.0f)
angle -= 360.0f;
float positionX = setMovementX(angle, 0.8f);
float positionZ = setMovementZ(angle, 0.8f);
// mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);
mv = mv.mul(MatrixMath.rotationZ(satellite));
mv.set(0, 3, positionX);
mv.set(2, 3, positionZ);
cubeprogram.passUniformMatrix(gl, "model_view", mv);
gl.glDrawArrays( GL3.GL_TRIANGLES, 0, numVertices );
positionX = setMovementX(satellite, 0.2f);
positionZ = setMovementZ(satellite, 0.2f);
Mat4 sm = new Mat4( 1.0f, 0.0f, 0.0f, positionX,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, positionZ,
0.0f, 0.0f, 0.0f, 1.0f);
mv = mv.mul(sm);
mv = mv.mul(MatrixMath.rotationZ(angle));
cubeprogram.use(gl);
cubeprogram.passUniformMatrix(gl, "model_view", mv);
gl.glDrawArrays( GL3.GL_TRIANGLES, 0, numVertices );
cubeprogram.setUniformMatrix("projection", projection);`
//定义
public static Mat4 lookAt(Vec4 eye, Vec4 at, Vec4 up) {
final Vec4 eyeneg = eye.neg();
final Vec4 n = VectorMath.normalize(eye.sub(at));
final Vec4 u = VectorMath.normalize(VectorMath.cross(up, n));
final Vec4 v = VectorMath.normalize(VectorMath.cross(n, u));
final Vec4 t = new Vec4(0, 0, 0, 1);
final Mat4 c = new Mat4(u, v, n, t);
return c.mul(MatrixMath.translate(eyeneg));
}
public static Mat4 lookAt(float x, float y, float z, Vec4 at, Vec4 up) {
final Vec4 eye = new Vec4(x, y, z, 1.0f);
return lookAt(eye, at, up);
}