gpt4 book ai didi

java - 将 GL_PRIMITIVE_RESTART_FIXED_INDEX 与 Open GL ES 3.0 结合使用

转载 作者:行者123 更新时间:2023-12-01 08:52:32 26 4
gpt4 key购买 nike

我正在尝试在 Open GL ES 3.0 中使用三角形扇形来绘制一个简单的立方体。启用 GL_PRIMITIVE_RESTART_FIXED_INDEX 让我定义绘制立方体所需的 2 个风扇。

我得到的结果是一个错误(致命信号 11 (SIGSEGV),代码 2,tid 3055 (GLThread 139) 中的故障地址 0x74d7e390)和应用程序崩溃...

为了帮助您找到可能出现错误的位置,我添加了下面使用的代码。

立方体定义:

    //             4--------7
// -| -|
// - | - |
// 0--------3 |
// | | | |
// | 5-----|--6
// | - | -
// |- |-
// 1--------2
// point 0
coord[0]=-0.5f;
coord[1]=0.5f;
coord[2]=0.5f;
coord[3]=1f;

// point 1
coord[4]=-0.5f;
coord[5]=-0.5f;
coord[6]=0.5f;
coord[7]=1f;

// point 2
coord[8]=0.5f;
coord[9]=-0.5f;
coord[10]=0.5f;
coord[11]=1f;

// point 3
coord[12]=0.5f;
coord[13]=0.5f;
coord[14]=0.5f;
coord[15]=1f;

// point 4
coord[16]=-0.5f;
coord[17]=0.5f;
coord[18]=-0.5f;
coord[19]=1f;

// point 5
coord[20]=-0.5f;
coord[21]=-0.5f;
coord[22]=-0.5f;
coord[23]=1f;

// point 6
coord[24]=0.5f;
coord[25]=-0.5f;
coord[26]=-0.5f;
coord[27]=1f;

// point 7
coord[28]=0.5f;
coord[29]=0.5f;
coord[30]=-0.5f;
coord[31]=1f;

drawingOrder=new short[17];

// first triangle fan : front, top and left faces
drawingOrder[0]=0;
drawingOrder[1]=1;
drawingOrder[2]=2;
drawingOrder[3]=3;
drawingOrder[4]=7;
drawingOrder[5]=4;
drawingOrder[6]=5;
drawingOrder[7]=1;
drawingOrder[8]=-1;

// second triangle fan : bottom, back and right faces
drawingOrder[9]=6;
drawingOrder[10]=2;
drawingOrder[11]=1;
drawingOrder[12]=5;
drawingOrder[13]=4;
drawingOrder[14]=7;
drawingOrder[15]=3;
drawingOrder[16]=2;

绘图功能:

    public void draw(float [] transformMatrix) {
GLES30.glUseProgram(programmeOpenGL);

verticePositionIndex = GLES30.glGetAttribLocation(programmeOpenGL, "positionsSommets");

GLES30.glEnableVertexAttribArray(verticePositionIndex);

GLES30.glVertexAttribPointer(verticePositionIndex , NB_COORDINATES_PER_VERTICE, GLES30.GL_FLOAT, false, verticeMemorySize, verticesList);

verticeColorIndex= GLES30.glGetAttribLocation(programmeOpenGL,"couleursSommets");

GLES30.glEnableVertexAttribArray(verticeColorIndex);

GLES30.glVertexAttribPointer(verticeColorIndex, 4, GLES30.GL_FLOAT, false, 16, colorList);

transformMatrixIndex = GLES30.glGetUniformLocation(programmeOpenGL, "matriceTransformation");

GLES30.glUniformMatrix4fv(transformMatrixIndex , 1, false, transformMatrix, 0);

GLES30.glEnable(GLES30.GL_PRIMITIVE_RESTART_FIXED_INDEX);

GLES30.glDrawElements(GLES30.GL_TRIANGLE_FAN,17,GLES30.GL_UNSIGNED_SHORT,verticesOrderList);

GLES30.glDisable(GLES30.GL_PRIMITIVE_RESTART_FIXED_INDEX);

GLES30.glDisableVertexAttribArray(verticePositionIndex );

GLES30.glDisableVertexAttribArray(verticeColorIndex);
}

我可以补充一点,如果我只绘制一个扇形(无论是第一个还是第二个),它都会正确显示......

有什么想法吗?

最佳答案

只需将 0xFFFF(无符号 65535)的等效二进制值编码为 Java short。对于带符号的短0xFFFF = -1。当您在缓冲区中复制时,它将“正常工作”。

关于java - 将 GL_PRIMITIVE_RESTART_FIXED_INDEX 与 Open GL ES 3.0 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42292834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com