【问题标题】:Beginning to learn OpenGL ES. Drawing quad开始学习OpenGL ES。绘制四边形
【发布时间】:2013-11-29 06:06:10
【问题描述】:

我尝试使用 open GL 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)

谁能解释我为什么会出现这个错误?

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多