开始学习OpenGL ES。绘制四边形。

3
我尝试用OpenGL ES 1.0绘制四边形。但是我遇到了一个异常,告诉我我正在尝试绘制比我拥有的顶点数更多的顶点。
渲染器的代码如下:
package com.example.MyGLTest;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

public class OpenGLRenderer implements GLSurfaceView.Renderer{

    FloatBuffer plaineVerticesBuffer;
    FloatBuffer plaineIndicesBuffer;

    private float[] plaineVertices = {
            -1, -1, 0, //bottom left corner
            -1,  1, 0, //top left corner
            1,  1, 0,  //top right corner
            1, -1, 0   // bottom right rocner
    };
    private float plaine_indices[] = {
            0,1,2, // first triangle (bottom left - top left - top right)
            0,2,3 // second triangle (bottom left - top right - bottom right);
    };

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {


        ByteBuffer bb = ByteBuffer.allocateDirect(plaineVertices.length * 4);
        bb.order(ByteOrder.nativeOrder());
        plaineVerticesBuffer = bb.asFloatBuffer();
        plaineVerticesBuffer.put(plaineVertices);

        ByteBuffer bb1  = ByteBuffer.allocateDirect(plaine_indices.length * 4);
        bb1.order(ByteOrder.nativeOrder());
        plaineIndicesBuffer = bb1.asFloatBuffer();
        plaineIndicesBuffer.put(plaine_indices);
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {

    }

    @Override
    public void onDrawFrame(GL10 gl) {
        //GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
        gl.glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

        gl.glVertexPointer(4,GL10.GL_FLOAT,0, plaineVerticesBuffer);
        gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, 6 ,GL10.GL_FLOAT, plaineIndicesBuffer);
    }
}

logcat 的错误:

java.lang.ArrayIndexOutOfBoundsException: remaining() < count < needed
        at com.google.android.gles_jni.GLImpl.glDrawElements(Native Method)
        at com.example.MyGLTest.OpenGLRenderer.onDrawFrame(OpenGLRenderer.java:60)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1531)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)

有人能解释一下为什么我会收到这个错误吗?
1个回答

0

你正在追踪一条由2个三角形组成的带子,并且你正在传递6个顶点。你应该绘制GL_TRIANGLES或修复索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接