เหตุใด lwjgl จึงไม่วาดรูปสี่เหลี่ยมผืนผ้า

ฉันต้องการวาดรูปสี่เหลี่ยมผืนผ้าใน lwjgl โค้ดควรวาดรูปสี่เหลี่ยมผืนผ้า แต่ไม่ได้เป็นเช่นนั้น ฉันใช้ OpenGL 4.4 (LWJGL ไม่รองรับเกินกว่านั้น)
ส่วนใหญ่ฉันเป็นมือใหม่ในด้านกราฟิก 3 มิติ ดังนั้นความช่วยเหลือใดๆ ก็ตามจะได้รับการชื่นชมอย่างมาก

    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();
}

ใช้งานได้เมื่อฉันลบดัชนีและใช้ glDrawArrays แทน glDrawElements


person Aditya Arsh    schedule 13.10.2019    source แหล่งที่มา


คำตอบ (1)


ประเภทของอาร์เรย์ของดัชนีต้องเป็น int แทนที่จะเป็น float:

float[] indices =
int [] indices =

ประเภทของข้อมูลในบัฟเฟอร์อาร์เรย์องค์ประกอบจะต้องตรงกับที่ระบุไว้เมื่อ glDrawElements ถูกเรียก

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT,0);

ประเภทที่ระบุต้องเป็นประเภทใดประเภทหนึ่งจาก GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT หรือ GL_UNSIGNED_INT ประเภทข้อมูลที่สอดคล้องกันใน Java คือ byte, short ตามลำดับ int

person Rabbid76    schedule 13.10.2019
comment
ขอบคุณ. มันใช้งานได้แล้ว ไม่อยากจะเชื่อเลยว่าฉันทำผิดพลาดโง่ ๆ แบบนี้ - person Aditya Arsh; 13.10.2019