Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OGL ES 2.0正交矩阵结果位置意外_Android_Opengl Es_Opengl Es 2.0 - Fatal编程技术网

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_全屏);我认为它将方向设定为风景!?当我改变它的方式,我看不到任何东西在屏幕上,所以一定是有不同的错误。你是转置矩阵,当你上传它?你能发布统一的上传代码吗@Zerd1984
mMVMatrixUniformLocation=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