如何在opengl/opengles里面绘制网格坐标系

网上找了很多,绘制复杂。

最后在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);
}




  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值