Qt和其他众多库中,圆形绘制可能并不困难,但是OpenGL不是,因为OpenGL中的一切图形都是基于面和坐标。
渲染一个正方形或者正方体并不困难,只需要指出4或6或8个点,也就是顶点数组,就能看出效果。
但是对于初学者来讲,很难想到该如何渲染一个圆。
其实,只需要增加点数,同时调用正余弦函数,创建圆形顶点数组的简单代码如下:
int i;
/*
为了尽量近似圆形,需要360个点。
每个点有两个值:x轴和y轴,所以需要计算720个数值。
*/
for (i = 0; i < 720; i += 2) {
// x value
vertices[i] = (cos(DEGREES_TO_RADIANS(i/2)) * 1);
// y value
vertices[i+1] = (sin(DEGREES_TO_RADIANS(i/2)) * 1);
}
之后,在渲染函数里面加上:
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, vertices);
颜色渲染方面还是按照常规的步骤:
glClearColor(0.5f, 0.7f, 0.9f, 1.0f); //指定颜色
glClear(GL_COLOR_BUFFER_BIT); //刷出颜色
注意,绘制圆形的时候选定好绘制方式,不然可能绘制出的只是一系列点,在屏幕上显示不明显,误以为代码错误。
glDrawArrays(GL_TRIANGLE_FAN, 0, 360); //这个绘制方法可以理解为连续填充绘制,绘制出的是完整的圆形,不是离散的点
写这篇的原因是,我绘制圆形的时候找了很久才拼凑起有效的方法,算是半个原创吧,希望更多的人能更容易得搜索到,节省时间。