当在我的 draw 方法中调用“ glGetFloatv ”时,我发现 ModelMatrix 填充了零,但我希望 ModelMatrix 被填充,因为对象在 Z 和 Y 轴上平移了一个单位。寻找可能是什么原因,我发现 LogCat 正在抛出下一条消息:“ libEGL 调用了未实现的 OpenGL ES API ”。
我可以猜测我没有运行正确的 OpenGL 版本,但我已经强制使用 OpenGL ES 2,但问题仍然存在。
我的源代码如下:
渲染类
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
objectToDraw.Draw(gl);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig egl) {
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
对象绘制方法。
public void Draw(GL10 gl){
gl11 = (GL11) gl;
gl11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, _matrix,0);
super.Draw();
gl.glPopMatrix();
}
最后,我没有使用 Eclipse 模拟器,我正在 HTC Wild Fire 设备上调试应用程序(模拟器太慢)