2014-11-14 3 views
0

Я пытаюсь сделать этот кусок кода работать некоторое время, и я до сих пор не могу понять, что я сделал не так. (LWJGL - Java)LWJGL - Квадрат не отображается

Я попытался проверить в Интернете код других людей, но я не могу найти никакого существенного различия. Я действительно научился использовать OpenGL с C++, поэтому мой ум мог застрять на нем, и поэтому я не могу найти свои ошибки.

Вот в Init (вызывается один раз)

FloatBuffer vertices = BufferUtils.createFloatBuffer(4 * 5); 
    vertices.put(new float[]{ 
      // pos     // Color 
      0.5f, 0.5f,    0.5f, 0.0f, 0.5f, 
      0.5f, -0.5f,   0.5f, 0.0f, 0.75f, 
      -0.5f, -0.5f,   0.0f, 1.0f, 0.0f, 
      -0.5f, 0.5f,   0.5f, 0.5f, 1.0f 
    }); 
    vertices.flip(); 

    ByteBuffer indices = BufferUtils.createByteBuffer(2 * 3); 
    indices.put(new byte[]{ 
      0, 1, 3, 
      1, 2, 3 
    }); 
    indices.flip(); 

    // VAO 
    VAO = GL30.glGenVertexArrays(); 
    GL30.glBindVertexArray(VAO); 

    // VBO 
    VBO = glGenBuffers(); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW); 

    // EBO 
    EBO = glGenBuffers(); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices, GL_STATIC_DRAW); 

    glBindBuffer(GL_ARRAY_BUFFER, VBO); 

    glEnableVertexAttribArray(0); 
    //       v - position in layout (see shader) 
    //       v - Nb of component per vertex (2 for 2D (x, y)) 
    //            v - Normalized ? (between 0 - 1) 
    //              v - Offset between things (size of a line) 
    //                  v - Where to start ? 
    glVertexAttribPointer(0, 2, GL11.GL_FLOAT, false, 5 * Float.SIZE , 0); 

    glEnableVertexAttribArray(1); 
    glVertexAttribPointer(1, 3, GL11.GL_FLOAT, false, 5 * Float.SIZE , 2 * Float.SIZE); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); 

    // Unbinds the VAO 
    GL30.glBindVertexArray(0); 
    glDisableVertexAttribArray(0); 
    glDisableVertexAttribArray(1); 

А вот функция визуализации:

shaderProgram.bind(); 

GL30.glBindVertexArray(VAO); 

GL11.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_BYTE, 0); 

GL30.glBindVertexArray(0); 

glBindBuffer(GL_ARRAY_BUFFER, 0); 

шейдеры:

Vertex:

#version 330 core 

layout(location = 0) in vec2 position; 
layout(location = 1) in vec3 color; 

out vec4 Color; 

void main() 
{ 
    gl_Position = vec4(position, 0.0, 1.0); 
    Color = vec4(color, 1.0); 
} 

Framgent:

#version 330 core 

in vec4 Color; 

out vec4 color; 

void main() 
{ 
    color = Color; 
} 

ответ

0

В в official Java documentation, Float.SIZE определяется как:

Количество битов, используемых для представления значения с плавающей точкой.

glVertexAttribPointer() Поскольку ожидает походку и смещение аргументы в байтах, вы должны разделить это на 8, и использовать вместо (Float.SIZE/8).

+0

Кажется, ничего не делает. Это довольно сложно отладить, поскольку я не могу получить доступ к атрибутам – Gaktan

Смежные вопросы