Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java VBO纹理don';LWJGL不能正常工作_Java_Opengl_Lwjgl_Vbo - Fatal编程技术网

Java VBO纹理don';LWJGL不能正常工作

Java VBO纹理don';LWJGL不能正常工作,java,opengl,lwjgl,vbo,Java,Opengl,Lwjgl,Vbo,我尝试使用VBO渲染我的3d对象 我创建了这个类: public class Object3DTexturedRendered { private TextureRendered texture; private int vboId = 0; private int vboiId = 0; private int vbotId = 0; private int verticesTexCoords[][]; private int verticesIndex[]; private FloatBu

我尝试使用VBO渲染我的3d对象

我创建了这个类:

public class Object3DTexturedRendered {

private TextureRendered texture;
private int vboId = 0;
private int vboiId = 0;
private int vbotId = 0;
private int verticesTexCoords[][];
private int verticesIndex[];
private FloatBuffer verticesBuffer;
private FloatBuffer texturesBuffer;
private IntBuffer indexBuffer;

public Object3DTexturedRendered() {

}

public Object3DTexturedRendered(TextureRendered _texture) {
    texture = _texture;
}

public void renderVBO() {
    glEnable(GL_TEXTURE_2D);

    if (texture.getTexture() != null) {
        texture.getTexture().bind();
    }

    ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, vboId);
    glVertexPointer(3, GL_FLOAT, 0, 0L);

    ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, vbotId);
    glTexCoordPointer(2, GL_FLOAT, 0, 0L);

    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB, vboiId);
    glDrawRangeElements(GL_TRIANGLES, 0, (verticesIndex.length - 1), verticesIndex.length,
                                          GL_UNSIGNED_INT, 0L);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);

    ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, 0);
    ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB, 0);

    glDisable(GL_TEXTURE_2D);
}

public void initRenderVBO(FloatPointRendered[] listPointsRendered, int _verticesTexCoords[][], int _verticesIndex[]) {
    verticesTexCoords = _verticesTexCoords;
    verticesIndex = _verticesIndex;

    verticesBuffer = BufferUtils.createFloatBuffer(verticesTexCoords.length * 3);
    texturesBuffer = BufferUtils.createFloatBuffer(verticesTexCoords.length * 2);
    for (int[] _ipoint : verticesTexCoords) {
        FloatPointRendered _point = listPointsRendered[_ipoint[0]];
        float[] uv = texture.getXYtoFloat(_ipoint[1], _ipoint[2]);
        verticesBuffer.put(_point.positionToFloatArray());
        texturesBuffer.put(uv);
    }
    verticesBuffer.flip();
    texturesBuffer.flip();

    indexBuffer = BufferUtils.createIntBuffer(verticesIndex.length);
    indexBuffer.put(verticesIndex);
    indexBuffer.flip();

    if (GLContext.getCapabilities().GL_ARB_vertex_buffer_object) {
        IntBuffer vboID = BufferUtils.createIntBuffer(3);
        ARBVertexBufferObject.glGenBuffersARB(vboID);
        vboId = vboID.get(0);
        ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, vboId);
        ARBVertexBufferObject.glBufferDataARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, verticesBuffer, ARBVertexBufferObject.GL_STATIC_DRAW_ARB);

        vbotId = vboID.get(1);
        ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, vbotId);
        ARBVertexBufferObject.glBufferDataARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, texturesBuffer, ARBVertexBufferObject.GL_STATIC_DRAW_ARB);

        vboiId = vboID.get(2);
        ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB, vboiId);
        ARBVertexBufferObject.glBufferDataARB(ARBVertexBufferObject.GL_ELEMENT_ARRAY_BUFFER_ARB, indexBuffer, ARBVertexBufferObject.GL_STATIC_DRAW_ARB);
    }
}
我的对象都已正确渲染,但纹理有问题。 我的质感是大踏步的。看看这张照片。。。为什么我的纹理是这样的,以及我如何修复这些缺陷

已解决


事实上,我没有正确地将纹理剪切到渲染的GL_三角形中,因此没有正确计算纹理坐标以应用到GL_三角形中

决心!事实上,我没有正确地将纹理剪切到渲染的GL_三角形中!在堆栈溢出时,我们不会在标题中添加“已解决”。如果你已经解决了你的问题,那么把解决方案作为一个答案发布给其他人看,而不是作为评论。请不要添加“谢谢”作为答案。相反,你认为这是最有帮助的这不是一个“谢谢”的回答。我已经写下了修复我的错误的方法。因为我的纹理坐标没有正确计算以应用于渲染的GL_三角形。我已经编辑了我的答案,以增加更多的精确性。