Java N-IDE运行OpenGL ES 1.0教程代码无法绘制三角形求助
问题修复方案
核心错误点及修改步骤如下:
- 上下文版本不匹配:你在
MyGLSurfaceView中调用setEGLContextClientVersion(2)申请了OpenGL ES 2.0的上下文,但所有渲染代码都是OpenGL ES 1.0的固定管线API,二者完全不兼容,导致绘制指令无效。 - 绘制颜色完全透明:
onDrawFrame中调用gl.glColor4f时alpha通道参数设为0.0f,三角形完全透明无法显示。 - 可选优化:缺少投影矩阵配置,图形可能会随屏幕比例拉伸。
1. 修正OpenGL ES上下文版本
修改MyGLSurfaceView.java中的构造函数,将上下文版本改为1:
public MyGLSurfaceView(Context context) { super(context); // 申请ES 1.0上下文,也可直接删除该行,Android默认申请ES1.x版本上下文 setEGLContextClientVersion(1); renderer = new MyGLRenderer(); setRenderer(renderer); }
2. 修正颜色透明度设置
修改MyGLRenderer.java的onDrawFrame方法中颜色参数,将alpha通道改为1.0:
// 最后一个参数为alpha通道,1.0代表完全不透明 gl.glColor4f(0.63671875f, 0.76953125f, 0.22265625f, 1.0f);
3. 可选:添加正交投影适配屏幕比例
修改MyGLRenderer.java的onSurfaceChanged方法,添加矩阵配置避免图形拉伸:
public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); // 配置正交投影适配屏幕宽高比 gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); float aspectRatio = (float) width / height; gl.glOrthof(-aspectRatio, aspectRatio, -1f, 1f, -1f, 1f); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); }
完成上述修改后重新编译即可正常显示目标三角形。
内容的提问来源于stack exchange,提问作者Thomas Mason
相关产品推荐
相关产品推荐

