【问题标题】:array of points with OpenGL Android带有 OpenGL Android 的点数组
【发布时间】:2013-02-19 04:22:19
【问题描述】:

我试图像时尚一样在网格中制作一组点,但一个点只出现在中间:I

private Point[][] sq = new Point[10][10];

@Override
public void onDrawFrame(GL10 gl) {



    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    gl.glLoadIdentity();

    for(int x = 0; x< 10 ; x++){
        for(int y = 0; y< 10 ; y++){
            sq[x][y] = new Point(x/10,y/10);
            gl.glTranslatef(0.0f, x/10,-5.0f);
             sq[x][y].draw(gl, 0, 1, 0);
        }
    }

【问题讨论】:

    标签: java android opengl-es multidimensional-array point


    【解决方案1】:

    假设 openGL ES 与标准 openGL 相同,您每次转换时都需要推送和弹出矩阵。否则,您将第一次翻译 0,然后翻译 0.1,然后翻译 0.3,然后翻译 0.6,等等......

    但我假设您要翻译 0、0.1、0.2、0.3、0.4 等...

    我也不确定您为什么只使用 x 值沿 y 轴平移?我认为:

    gl.glTranslatef(0.0f, x/10,-5.0f);
    

    应该是这样的:

    gl.glTranslatef(x/10.0f, y/10.0f, -5.0f);
    

    我想你想要这样的东西:

    for(int x = 0; x< 10 ; x++){
        for(int y = 0; y< 10 ; y++){
    
            sq[x][y] = new Point(x/10.0f, y/10.0f);
    
            gl.glPushMatrix();
            gl.glTranslatef(x/10.0f, y/10.0f, -5.0f);
            sq[x][y].draw(gl, 0, 1, 0);
            gl.glPopMatrix();
        }
    }
    

    【讨论】:

    • 正确 - 在 Ryans 示例代码中,每个 Translate 都会影响最后一个。您必须恢复矩阵状态。
    • 谢谢,成功了!我只是在平移 y 轴,看看它是否真的在显示它们……我真的很累
    • 太棒了,你应该接受这个作为答案:) 我也认为使用 didierc 给出的建议是值得的。
    【解决方案2】:

    您可以使用gl.glVertex2f 来绘制顶点,并将坐标存储在数组中:

    float [] coords = new float[200];
    for (int x = 0; x < 10; x++) {
        for (y = 0; y < 10; y++) {
            coords[(x * 10 + y) * 2] = (float)x/10.0f;
            coords[(x * 10 + y) * 2 + 1] = (float)y/10.0f;
        }
    }
    
    for (int i = 0; i < 100; i++)
        gl.glVertex2f(coords[i * 2], coords[i * 2 + 1]);
    

    如果要绘制规则网格,给定具有绝对坐标的顶点,则不需要使用gl.glTranslate

    最后,您可以避免每次进行渲染时都重新构建点数组:只需构建一次数组——比如现在在构造函数中,然后只在数组上循环以在onDrawFrame 方法中进行绘制。不过我不知道你以后的计划是什么,但如果数组大小没有改变,即使你需要移动点,你也会通过始终使用相同的方式获得一些性能。

    作为练习,我建议创建一个类来包装坐标数组并提供对数组的一些简单操作。这可以很好地介绍 OpenGL 支持的顶点数组和缓冲区功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2011-10-22
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多