我的轮换工作正常:
public void onDrawFrame(GL10 unused) {
float[] scratch = new float[16];
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
Matrix.setLookAtM(mViewMatrix, 0, 0f ,0f, -3f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
Matrix.setRotateM(mRotationMatrix, 0, i, 0, 0, 1.0f);
Matrix.multiplyMM(scratch, 0, mMVPMatrix, 0, mRotationMatrix, 0);
mTriangle.draw(scratch);
}
使用此着色器顶点:
private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
"}";
但是当我想改变我的0x; 0y坐标位于左上角时这样:
private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = vec4 ( vPosition.x * 2.0 / 1280.0 - 1.0," +
"vPosition.y* - 2.0 / 800.0 + 1.0," +
"vPosition.z, " +
"1.0);" +
"}";*
使用这些顶点:
static float triangleCoords[] = {
300.0f, 0.0f, 0.0f,
0.0f, 500.0f, 0.0f,
1280.0f, 500.0f, 0.0f
};
图片:http://i.stack.imgur.com/aRQa9.jpg
我的三角形看起来像我想要但我再也看不到我的旋转了。为了解决我试过很多东西,比如用uMVPMatrix乘以这个,但现在我可以看到旋转,但我总是得到坐标问题,因为它出现在屏幕中间,我的顶点三角形不适合它应该的大小:
图片:http://i.stack.imgur.com/tH02H.png
我的android屏幕分辨率是1280 * 800我只想让这个三角形旋转而不用这种方式进行修改。 有人可以解释一下如何做到这一点。
编辑: 感谢Andon M. Coleman和SAKrisT,我能够将我的原点指向左上方0:0的android坐标。
如果可以提供帮助:
public void onDrawFrame(GL10 unused) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
Matrix.orthoM(mProjectionMatrix, 0, left, right, top, bottom, near, far);
Matrix.setLookAtM(mViewMatrix, 0, 0, 0, 1.0f, 0.0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);
Matrix.setRotateM(mRotationMatrix, 0, 0, 0, 0, 1.0f);
Matrix.multiplyMM(mProjectionMatrix, 0, mMVPMatrix, 0, mRotationMatrix, 0);
mTriangle.draw(mProjectionMatrix);
}