gpt4 book ai didi

java - 为什么 lwjgl 不绘制矩形?

转载 作者:行者123 更新时间:2023-11-30 10:00:03 25 4
gpt4 key购买 nike

我想在 lwjgl 中画一个矩形。代码应该绘制一个矩形,但它没有。我正在使用 OpenGL 4.4(LWJGL 不支持除此之外的版本)。
我主要是 3d 图形的初学者,因此非常感谢任何帮助。

    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 时,它会起作用。

最佳答案

索引数组的类型必须是 int 而不是 float:

float[] indices =
int [] 索引 =

元素数组缓冲区中的数据类型必须与 glDrawElements 时指定的相匹配被称为。

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT,0);

指定的类型必须是 GL_UNSIGNED_BYTEGL_UNSIGNED_SHORTGL_UNSIGNED_INT 之一。 java中对应的数据类型分别是byteshortint

关于java - 为什么 lwjgl 不绘制矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58362427/

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