开始学习OpenGL ES.绘图四 [英] Beginning to learn OpenGL ES. Drawing quad

查看:65
本文介绍了开始学习OpenGL ES.绘图四的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试使用开放式GL ES 1.0绘制四边形. 但是我有一个例外,说我尝试绘制比我更多的顶点.

I try to draw a quad with open GL ES 1.0. But I have an exception which say me that i try to draw more vertices than i have.

渲染器代码:

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)

谁能解释我为什么会收到此错误?

Can anyone explain me why i getting this error?

推荐答案

您正在跟踪由2个三角形组成的条带,并且正在传递6个顶点.您应该绘制GL_TRIANGLES或固定索引.

You are tracing a strip of 2 triangles, and you are passing 6 vertices. You should either draw GL_TRIANGLES or fix the indices.

这篇关于开始学习OpenGL ES.绘图四的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆