Android OGL ES 2.0正交矩阵结果位置意外
我很难弄清楚为什么我的三角形没有在预期的位置渲染 我想画这个三角形:Android OGL ES 2.0正交矩阵结果位置意外,android,opengl-es,opengl-es-2.0,Android,Opengl Es,Opengl Es 2.0,我很难弄清楚为什么我的三角形没有在预期的位置渲染 我想画这个三角形: private float vVertices[] = { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f}; 首先,我创建一个投影矩阵,如下所述 然后我创建一个视图矩阵,并将这两个矩阵相乘: Matrix.set
private float vVertices[] = { 0.0f, 0.0f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f};
首先,我创建一个投影矩阵,如下所述
然后我创建一个视图矩阵,并将这两个矩阵相乘:
Matrix.setLookAtM(VIEW_MATRIX, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, PROJECTION_MATRIX, 0, VIEW_MATRIX, 0);
现在我将MVP矩阵发送到我的着色器
String vertexShader = "attribute vec4 vPosition; \n" +
"uniform mat4 orthoMatrix;" +
"void main()\n" +
"{\n" +
" gl_Position = vPosition * orthoMatrix;" +
"}";
使用此矩阵平移顶点的位置。
然而,这并不是我所期望的结果
下图是上述代码的结果:
我希望三角形的原点是0,0,0,所以在屏幕的中心是这样的:
从上面的代码中,谁能告诉我我做错了什么,或者我错过了什么
编辑
好吧,看来协调是有点像。。。
看起来是这样的
1 ----+---- -1
当我在正交矩阵调用中反转纵横比参数时,它看起来是正确的。但是为什么是nessecary?您正在反向执行顶点着色器乘法 应该是:
gl_位置=正交矩阵*v位置代码>您确定您的纵横比正确吗?它实际上应该是480.0f/800.0f
;)除非你使用的是横向。我想我是对的,设备向左旋转90°,我称之为setRequestedOrientation(0);requestWindowFeature(窗口。功能\u无\u标题);getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);我认为它将方向设定为风景!?当我改变它的方式,我看不到任何东西在屏幕上,所以一定是有不同的错误。你是转置矩阵,当你上传它?你能发布统一的上传代码吗@Zerd1984mMVMatrixUniformLocation=GLES20.glGetUniformLocation(m_Shader.getProgramId(),“正交矩阵”);GLES20.glUniformMatrix4fv(mMVMatrixUniformLocation,1,false,mMVPMatrix,0)代码>有趣,当我使用矩阵.平截头体时(投影矩阵,0,-纵横比,纵横比,-1,1,3,7)代码>取代了正交矩阵函数,我现在得到的结果与我以相反的方式计算gl_位置时得到的结果相同..嗯,我不确定。我很确定它应该是ortho*vPosition
,你也会注意到,在你引用的另一个问题中,这就是他们乘以它的方式。这是一个自定义函数吗?有没有不使用API函数Matrix.orthoM的原因@Zerd1984
1 ----+---- -1