You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:24:02