尝试使用LWJGL3绘制基本形状

时间:2018-07-17 21:54:39

标签: java opengl lwjgl

所以我想使用VAO和VBO绘制形状,我想我所做的一切都正确,但是每当我运行代码时,我都会获得具有清晰颜色的窗口。之前我在调用创建功能之前尝试初始化三角形时遇到问题,我是否缺少一些开始绘制的功能?

这是我的代码:

Optional<T>

我希望你们能提供帮助,非常感谢。

1 个答案:

答案 0 :(得分:0)

  

我没有使用着色器。那是我的问题吗?这是必须的吗

在OpenGL中进行渲染的最先进方法是使用Shader

如果不使用着色器,则必须通过glVertexPointer定义顶点数据数组

vaoId = glGenVertexArrays();
glBindVertexArray(vaoId);

vboId = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, vertBuf, GL_STATIC_DRAW);

glVertexPointer( 2, GL_FLOAT, 0, 0 ); // <---------------

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

,您必须通过glEnableClientState( GL_VERTEX_ARRAY )启用客户端的顶点坐标功能:

glBindVertexArray(vaoId);
glEnableClientState( GL_VERTEX_ARRAY ); // <---------------

glDrawArrays(GL_TRIANGLES, 0, vertexCount);

glDisableClientState( GL_VERTEX_ARRAY ); // <---------------
glBindVertexArray(0);

请注意,客户端功能(或顶点属性数组)的这种状态存储在Vertex Array Object中。 因此,当指定顶点数组对象时,启用顶点坐标就足够了。绘制几何图形时,可以省略启用和禁用顶点坐标的操作:

vaoId = glGenVertexArrays();
glBindVertexArray(vaoId);

vboId = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, vertBuf, GL_STATIC_DRAW);

glVertexPointer( 2, GL_FLOAT, 0, 0 ); 
glEnableClientState( GL_VERTEX_ARRAY ); // <---------------

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

glBindVertexArray(vaoId);

glDrawArrays(GL_TRIANGLES, 0, vertexCount);

glBindVertexArray(0);