Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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
Java OpenGL ES 2.0-网格被Y轴和Z轴扭曲_Java_Android_Opengl Es 2.0 - Fatal编程技术网

Java OpenGL ES 2.0-网格被Y轴和Z轴扭曲

Java OpenGL ES 2.0-网格被Y轴和Z轴扭曲,java,android,opengl-es-2.0,Java,Android,Opengl Es 2.0,我正在尝试显示简单网格,但遇到以下问题: 当我尝试平移网格或指定大多数透视矩阵参数(使用matrix.trustumm方法)时,我的网格会变形。它按Z轴收缩,按Y轴拉伸 我的相机矩阵代码: Matrix.setLookAtM(mViewMatrix, 0, 0, 0,-3, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); 我的投影矩阵代码(从此处粘贴的副本:) 我的顶点着色器代码: private static String vertexShaderCode =

我正在尝试显示简单网格,但遇到以下问题: 当我尝试平移网格或指定大多数透视矩阵参数(使用matrix.trustumm方法)时,我的网格会变形。它按Z轴收缩,按Y轴拉伸

我的相机矩阵代码:

Matrix.setLookAtM(mViewMatrix, 0, 0, 0,-3, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
我的投影矩阵代码(从此处粘贴的副本:)

我的顶点着色器代码:

private static String vertexShaderCode =            
"uniform mat4 uMVPMatrix;" +

"attribute vec4 aPosition;" +
"attribute vec2 aTextureCoordIn;"+

"varying vec2 vTextureCoordOut;"+

"void main() {"+
"   vTextureCoordOut = aTextureCoordIn;"+
"   gl_Position = aPosition * uMVPMatrix;" +            
"}";
使用以下代码,使用0.2乘数缩放网格:

mModelMatrix = new float[16];
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.rotateM(mModelMatrix, 0, rotateX, 1, 0, 0);
Matrix.rotateM(mModelMatrix, 0, rotateY, 0, 1, 0);
Matrix.rotateM(mModelMatrix, 0, rotateZ, 0, 0, 1);
Matrix.scaleM(mModelMatrix, 0,  scaleX, scaleY, scaleZ);
Matrix.translateM(mModelMatrix, 0,  translateX, translateY, translateZ);
和mvp矩阵乘以:

float[] mMVPMatrix = new float[16];

Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
我尝试了以下主题的解决方案:,,但没有成功

截图:

我还发现,当我使用以下投影矩阵且不平移网格时,它看起来是正确的: 平截头体(mProjMatrix,0,-比率,比率,-1,1,2,6); 屏幕:

我花了几个小时试图找到解决办法,但没有任何效果。我确信我的矩阵有问题,但我不知道如何解决它


任何想法都将受到高度赞赏。

好吧,android教程存在巨大的混乱。。矩阵相乘的方式决定了顶点着色器主函数中的位置相乘的方式相同,因此:

而不是:

"gl_Position = aPosition * uMVPMatrix;" +     
做:

"gl_Position = aPosition * uMVPMatrix;" +     
"gl_Position = uMVPMatrix * aPosition;" +