Mengapa lwjgl tidak menggambar Persegi Panjang?

Saya ingin menggambar persegi panjang di lwjgl. Kode seharusnya menggambar persegi panjang, tapi ternyata tidak. Saya menggunakan OpenGL 4.4 (LWJGL tidak mendukung lebih dari itu).
Saya sebagian besar adalah pemula dalam Grafik 3d dan sebagainya sehingga bantuan apa pun akan sangat dihargai.

    float[] vertices= {
            0.5f, 0.5f, 0.0f,
            0.5f, -0.5f, 0.0f,
            -0.5f, -0.5f, 0.0f,
            -0.5f, 0.5f, 0.0f
    };
    float[] indices= {
            0,1,2,
            2,3,0
    };

    Shader vsh=new Shader("vertexShader.vsh",GL_VERTEX_SHADER);
    Shader fsh=new Shader("fragmentShader.fsh",GL_FRAGMENT_SHADER);
    sp=Shader.createProgram(vsh.shader,fsh.shader);

    int VBO,EBO;
    VAO=glGenVertexArrays();
    VBO=glGenBuffers();
    EBO=glGenBuffers();

    glBindVertexArray(VAO);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW);

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER,indices,GL_STATIC_DRAW);

        glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
        glEnableVertexAttribArray(0);
    glBindVertexArray(0);

    glClearColor(1.0f,1.0f,1.0f,1.0f);
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}
void loop(){
    while(!glfwWindowShouldClose(w.window)) {       
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glUseProgram(sp);
        glBindVertexArray(VAO);
        glDrawElements(GL_TRIANGLES, 6,GL_UNSIGNED_INT,0);
        glBindVertexArray(0);

        glfwSwapBuffers(w.window);

        glfwPollEvents();
    }
}
void run() {
    init();
    loop();
}
public static void main(String[] args) {
    new Core().run();
}

Ini berfungsi ketika saya menghapus indeks dan menggunakan glDrawArrays alih-alih glDrawElements.


person Aditya Arsh    schedule 13.10.2019    source sumber


Jawaban (1)


Tipe array indeks harus int dan bukan float:

float[] indices =
int [] indices =

Tipe data dalam buffer array elemen harus cocok dengan yang ditentukan saat glDrawElements dipanggil.

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT,0);

Jenis yang ditentukan harus salah satu dari GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, atau GL_UNSIGNED_INT. Tipe data yang sesuai di java adalah byte, short masing-masing int.

person Rabbid76    schedule 13.10.2019
comment
Terima kasih. Ini berfungsi sekarang. Tidak percaya aku melakukan kesalahan bodoh seperti itu - person Aditya Arsh; 13.10.2019