我弄清楚,为什么我的三角形没有呈现在预期的位置。
我想绘制这个三角形:
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};
首先,我按照here
所述创建投影矩阵float aspect_ratio = 800.0f/480.0f;
ortho_matrix(-aspect_ratio, aspect_ratio, -1.0f, 1.0f, -1.0f, 1.0f, PROJECTION_MATRIX);
然后我创建一个View Matrix并将这两个相乘:
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);
现在我将mvpMatrix发送到我的Shader,
String vertexShader = "attribute vec4 vPosition; \n" +
"uniform mat4 orthoMatrix;" +
"void main()\n" +
"{\n" +
" gl_Position = vPosition * orthoMatrix;" +
"}";
使用此矩阵转换顶点。 但是,这不是我期待的结果。
以下图片是上述代码的结果:
我希望三角形的原点是0,0,0 - 所以在屏幕的中心是这样的:
从上面的代码中,有人能告诉我我做错了什么,或者我错过了什么?
修改的 好吧,似乎koordinates以某种方式反映了...... 所以它看起来像这样
1 ----+---- -1
当我反转ortho_matrix调用中的aspect_ratio参数时,它看起来是正确的。但为什么这个nessecary?
答案 0 :(得分:0)
你正在向后做顶点着色器乘法。
应该是:
gl_Position = orthoMatrix * vPosition;