【问题标题】:OpenGL drawing a Hexigon with verticesOpenGL绘制一个带顶点的六边形
【发布时间】:2012-01-08 17:24:46
【问题描述】:

我正在尝试制作一个基本形状 (Hexigon) 来开始并学习一些有关 Android 平台上 OpenGL 的基础知识,但我遇到了一个小问题。

我已经成功地制作了一个尖尖的六边形,但是当我将它转换成一个扁平的六边形时,它不能正确渲染。这是一些代码,供你们找出问题所在(可能很容易解决..)

顶点/索引

//flat hexagon
private float verticesFlat[] = {     
    0.0f,   0.0f, 0.0f,    //center
    -0.5f,   1.0f, 0.0f,    // left top
    0.5f,   1.0f, 0.0f,    // right top
    1.0f,   0.0f, 0.0f,    // right
    0.5f,   1.0f, 0.0f,    // right bottom
    -0.5f,  -1.0f, 0.0f,    // left bottom
    -1.0f,   0.0f, 0.0f,     // left
};

private short[] indices = { 0, 1, 2, 3, 4, 5, 6, 1 };

标准顶点/索引缓冲区..

// a float is 4 bytes, therefore we multiply the number if
// vertices with 4.
ByteBuffer vbb = ByteBuffer.allocateDirect(verticesFlat.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(verticesFlat);
vertexBuffer.position(0);

// short is 2 bytes, therefore we multiply the number if
// vertices with 2.
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);

onDraw(GL10 gl):

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

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);    

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawElements(GL10.GL_TRIANGLE_FAN, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

我得到的结果如下图所示:

【问题讨论】:

    标签: android opengl-es polygon


    【解决方案1】:

    应该是

    private float verticesFlat[] = {     
        0.0f,   0.0f, 0.0f,    //center
        -0.5f,   1.0f, 0.0f,    // left top
        0.5f,   1.0f, 0.0f,    // right top
        1.0f,   0.0f, 0.0f,    // right
        0.5f,   -1.0f, 0.0f,    // right bottom (notice sign)
        -0.5f,  -1.0f, 0.0f,    // left bottom
        -1.0f,   0.0f, 0.0f,     // left
    };
    

    【讨论】:

    • 你能告诉我我必须做的索引数组吗?我是 openGL 的新手 :-)
    • 您的顶点实际上看起来适合三角形扇形,但我现在正在检查索引。
    • 您的“右下角”y 组件缺少一个负号。
    • 谢谢伙计,完全看过了 :)
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多