网上找了很多,绘制复杂。
最后在libQGLViewer(一个Qt下面封装的opengl的库,支持鼠标、按键等各种控制)里面看到的代码。
里面还有很多绘制代码,超级吊,感谢原作者。
几行代码搞定:
void drawGrid(qreal size, int nbSubdivisions)
{
GLboolean lighting;
glGetBooleanv(GL_LIGHTING, &lighting);
glDisable(GL_LIGHTING);
glBegin(GL_LINES);
for (int i = 0; i <= nbSubdivisions; ++i) {
const float pos = size * (2.0 * i / nbSubdivisions - 1.0);
glVertex2d(pos, -size);
glVertex2d(pos, +size);
glVertex2d(-size, pos);
glVertex2d(size, pos);
}
glEnd();
if (lighting)
glEnable(GL_LIGHTING);
}
如果要设置坐标的颜色和线的宽度:
可以在
glBegin(GL_LINES);
前面加上两行代码:
glLineWidth(10.0f);
glColor3f(1, 0 , 0);
-----------------------------------------------------------------------------------------------
马蛋,我的平台只支持opengles,那就再来个opengles的版本:
nbSubdivisions最好是设置为2的整数倍
void drawGridGLES(float size, int nbSubdivisions)
{
static QVector<GLfloat> vextexs;
if(vextexs.size() <= 0){
for (int i = 0; i <= nbSubdivisions; ++i) {
const float pos = size * (2.0 * i / nbSubdivisions - 1.0);
vextexs.append(pos);
vextexs.append(-size);
vextexs.append(0);
vextexs.append(pos);
vextexs.append(+size);
vextexs.append(0);
vextexs.append(-size);
vextexs.append(pos);
vextexs.append(0);
vextexs.append(size);
vextexs.append(pos);
vextexs.append(0);
}
}
glEnableClientState(GL_VERTEX_ARRAY);
//画网格线
glVertexPointer(3, GL_FLOAT, 0, vextexs.data());
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glLineWidth(5.0f);
glDrawArrays(GL_LINES, 0, vextexs.size() / 3);
//中间画红色十字线
glVertexPointer(3, GL_FLOAT, 0, vextexs.data() + (nbSubdivisions + 1) / 2 * sizeof (GLfloat) * 3);
glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
glLineWidth(2.0f);
glPointSize(20.0f);
glDrawArrays(GL_LINES, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
}