OpenGL编程指南-顶点数组、视图变换、投影变换

1.从绘制立方体来理解顶点数组以及视图变换

看了Opengl编程指南第二章的内容,其中一个很重要的概念就是顶点数组,也按照书上所说写了一个绘制立方体的程序,其实是一个很简单的程序,可是一开始总是只显示一个正方形。这样的问题第一反应肯定是视角的问题,于是就想到视角变换glRotatef。

其实刚开始一直在尝试投影变换的设置,由于不理解投影变换和视角变换的区别。后面仔细去看Nate Robbin的投影教程,才明白投影解释的是如何把模型投影到平面上,glOrtho、glFrustum、gluPerspective这三个函数都是对投影参数的设置,其实质如何从三维到二维的过程,而不是模型自身如何变换。
这里写图片描述
而视角变换才是解决模型从哪个角度去显示,其实质是模型自身如何放置问题
这里写图片描述

void display3()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glRotatef(55, 1.0, 1.0, 0.0);//
    static const GLfloat vertex_list[][3] =
    {
        -0.5f, -0.5f, -0.5f,
        0.5f, -0.5f, -0.5f,
        -0.5f,  0.5f, -0.5f,
        0.5f,  0.5f, -0.5f,
        -0.5f, -0.5f,  0.5f,
        0.5f, -0.5f,  0.5f,
        -0.5f,  0.5f,  0.5f,
        0.5f,  0.5f,  0.5f,
    };      
    /*glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(3, GL_FLOAT, 0, vertex_list);*/
    static const GLint index_list[][4] = {
        0, 2, 3, 1,
        0, 4, 6, 2,
        0, 1, 5, 4,
        4, 5, 7, 6,
        1, 3, 7, 5,
        2, 6, 7, 3,
    };      
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, vertex_list);
    glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, index_list);  
    glFlush();

}
2.如何理解模型视图变换

书上说可以从两个方面去理解,一个是全局坐标系,一个是局部坐标系。前面一个可以理解为模型放置好之后去执行变换,所以在实际操作过程中是和代码相反的顺序;后面一个是以模型中心建立局部坐标系,然后去移动坐标系在进行绘制,所以这个顺序恰好相同。

就那书上的例子绘制太阳和月亮来说,

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    glPushMatrix();
    glutWireSphere(1.0, 20, 16);
    glRotatef((GLfloat)year, 0.0, 1.0, 0.0);
    glTranslatef(2.0, 0.0, 0.0);
    glRotatef((GLfloat)day, 0.0, 1.0, 0.0);
    glutWireSphere(0.2, 10, 8);
    glPopMatrix();
    glutSwapBuffers();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值