Android opengl es 2.0 glpushmatrix等

时间:2012-01-05 16:25:03

标签: android opengl-es

我知道不存在pushmatrix,popmatrix和矩阵堆栈,loadidentity,rotate,translate等。

如何重写现有的1.0-1.1引擎以使用2.0?

我先试了这个:

void glRotate(float x, float y, float z) {
    Matrix.setRotateM(mMMatrix, 0, x, 1, 0, 0);
    Matrix.setRotateM(mMMatrix, 0, y, 0, 1, 0);
    Matrix.setRotateM(mMMatrix, 0, z, 0, 0, 1);

    Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, mMMatrix, 0);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
}

void glTranslate(float x, float y, float z) {
    Matrix.translateM(mMMatrix, 0, x, y, z);

    Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, mMMatrix, 0);
    Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
}

glTranslate它不起作用,我怎样才能翻译我的模拟世界?

glRotate只在Z我的对象中旋转,x,y根本不起作用。

+ 如何实现矩阵栈/ glpush / glpopmatrix?任何人都有一个谢谢?

2 个答案:

答案 0 :(得分:0)

我在1年前遇到了和你一样的问题。

我不得不从头开始编写大部分功能,我可以向你保证这是一个混乱而且非常容易出错。

我建议你从一个非常有效的实现开始,你可以在OpenGL Gold Book(OpenGL ES 2.0编程指南)的samples目录中的“esTransform.c”文件中找到它。

这本书是这样的: http://opengles-book.com/downloads.html

可以从谷歌代码下载代码: http://code.google.com/p/opengles-book-samples/

我建议你无论如何都要买这本书,它很快就会成为你的opengl ES 2.0圣经,而且它做得非常好。

最后,在投入生产之前,请检查源代码的使用许可。

答案 1 :(得分:0)

尝试使用

Matrix.setIdentityM(mMMatrix,0);

在计算矩阵变换之前。

使用Matrix.rotateM()代替Matrix.setRotateM()。