0
我在OpenGL ES 2.0中有一個投影,但不幸的是我希望Y是積極的,所以我更容易使用TouchEvents。OpenGL ES 2.0投影映射爲正Y?
眼下是這樣的投影矩陣:
private void setOrthographicMatrix(int w, int h)
{
orthographicMatrix[0] = (float) (2.0f/w); //a
orthographicMatrix[3] = -1f; //tx
orthographicMatrix[5] = (float) (2.0f/h); //b
orthographicMatrix[7] = 1f; //ty
orthographicMatrix[10] = -1f; //c
orthographicMatrix[15] = 1f; //1
// a, 0, 0, tx,
// 0, b, 0, ty,
// 0, 0, c, tz,
// 0, 0, 0, 1
}
頂點着色器:
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
uniform mat4 u_MVPMatrix;
void main()
{
//Pass Values to Fragment Shader
v_texCoord = a_texCoord;
//Set Position
gl_Position = a_position * u_MVPMatrix;
}
片段着色器:
precision mediump float;
varying vec2 v_texCoord;
uniform vec4 u_color;
uniform sampler2D u_s_texture;
void main()
{
gl_FragColor = texture2D(u_s_texture, v_texCoord) * u_color;
}
,其結果是:(0,0) - 全角
0,0----------> X++
|
|
|
↓
Y--
我想要投影映射,所以Y在屏幕上變爲正值。
編輯 - 解決方案:
我已經取代了OrthographicMatrix功能的設置使用內置在Android中矩陣庫:
Matrix.orthoM(orthographicMatrix, 0, 0, w, h, 0, -10f, 10f);
而且改變了我的頂點着色器這樣的:
gl_Position = u_MVPMatrix * a_position;
我將如何設置的orthoM?這個'Matrix.orthoM(orthographicMatrix,0,0,w,h,0,-10f,10f);'似乎沒有給我我想要的效果? –
@dnxviral這對我來說看起來很合適,你能說出它究竟是如何工作的嗎? – Tim
@dnxviral:另外,也許可以考慮將你的着色器和統一代碼添加到原始文章中。你生成的矩陣看起來是從OpenGL通常使用的(tx,ty,tz通常是元素[12],[13]和[14],而不是[3],[7],[11 ]) – Tim