如何定义复杂图形
OpenGL 只提供点、线、三角形的绘制我们如何绘制一个复杂点的图形,比如矩形呢?
我们可以画两个三角形,但是定义图形坐标点时,可以不需要列出两个三角形的所有坐标。
static float squareCoords[] = {
-0.5f, 0.5f, 0.0f, // top left
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f, // bottom right
0.5f, 0.5f, 0.0f // top right
};
private final short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices
...
glDrawElements(
GL_TRIANGLES, drawOrder.length,
GL_UNSIGNED_SHORT, drawListBuffer);
如上所示,我们按逆时针,申明矩形的四个角坐标,以及 OpenGL 按什么顺序访问这些点,并绘出图形。最后我们通过 glDrawElements()
来按照上面的 drawOrder
遍历 squareCoords
中的坐标(GL_TRIANGLES
表示使用三个顶点来组成图形,直到结束)
glDrawElements vs glDrawArrays
这两个函数的却别在于,glDrawArrays
接收的坐标数据就是 OpenGL 绘制图形的完整路径,glDrawElements
接受一组坐标和访问这组坐标的顺序,OpenGL 按照顺序来绘制图形。
网友评论