1
我的问题是,我的透视投影做了相反的事情。相反,“缩水”我的对象到遥远的它正在扩大它:透视转换正在做相反
白色的部分是最接近的三角形。我想你明白。
我创建自己的透视投影,我发送给我的vertexshader。我使用的OpenGL如下状态:
gl.glEnable(GL2ES2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2ES2.GL_LEQUAL);
gl.glEnable(GL2ES2.GL_CULL_FACE);
gl.glCullFace(GL2ES2.GL_BACK);
gl.glFrontFace(GL2ES2.GL_CW);
我使用了perspectiveMatrix部分follwoing代码:
eye = {0,0,5};
viewMatrix = Calc.translate(identity_matrix, -eye[0], -eye[1], -eye[2]);
perspectiveMatrix = Calc.buildPerspProjMat(90, 1, 0.5f, 10);
model_view_projection = Calc.multiply(perspectiveMatrix, viewMatrix);
凡Calc.java具有以下功能:
public static float[] translate(float[] m,float x,float y,float z){
float[] t = { 1.0f, 0.0f, 0.0f, x,
0.0f, 1.0f, 0.0f, y,
0.0f, 0.0f, 1.0f, z,
0, 0, 0, 1.0f };
return multiply(t, m);
}
public static float[] buildPerspProjMat(float fov, float aspect, float znear, float zfar) {
float[] m = new float[16];
float ymax = (float) (znear * Math.tan(Math.toRadians(fov/2)));
float ymin = -ymax;
float xmax = ymax * aspect;
float xmin = ymin * aspect;
float width = xmax - xmin;
float height = ymax - ymin;
float depth = zfar - znear;
float q = -(zfar + znear)/depth;
float qn = -2 * (zfar * znear)/depth;
float w = 2 * znear/width;
w = w/aspect;
float h = 2 * znear/height;
m[0] = w;
m[1] = 0;
m[2] = 0;
m[3] = 0;
m[4] = 0;
m[5] = h;
m[6] = 0;
m[7] = 0;
m[8] = 0;
m[9] = 0;
m[10] = q;
m[11] = qn;
m[12] = 0;
m[13] = 0;
m[14] = -1;
m[15] = 0;
return m;
}
感谢。我真的不明白你为什么要按照这个顺序排列它们,但它是有效的!我不得不改变我的翻译和乘法功能。 – Vejto
是的,OpenGL使用列主要排序,你可能习惯于主要行。我以前曾经不止一次地咬过我。 – MikeMx7f