·天新网首页·加入收藏·设为首页·网站导航
数码笔记本手机摄像机相机MP3MP4GPS
硬件台式机网络服务器主板CPU硬盘显卡
办公投影打印传真
家电电视影院空调
游戏网游单机动漫
汽车新车购车试驾
下载驱动源码
学院开发设计
考试公务员高考考研
业界互联网通信探索
您现在的位置:天新网 > 软件开发 > 开发语言 > 汇编
Win32 OpenGL编程(13) 隐藏表面消除(深度测试)及雾效果
http://www.21tx.com 2009年11月16日 CSDN 九天雁翎

1 2 3 4 5 下一页

  隐藏表面消除(深度测试)

  其实这是个滞后的话题了,事实上应该在光照一节就应该详述的,但是因为光照的内容本来就多,所以当时并没有再牵涉此内容。

  在我们填充三维物体时,与平面绘制不同,因为牵涉到了前面物体遮挡后面物体的问题,假如没有一个很好的内置机制,我们就只能通过程序记住每个物体的Z轴(其实也不一定是Z轴,看当时的观察方向),然后按顺序将远的物体先绘制,然后再绘制离我们近的,通过这种方式,可以让离我们近的物体绘制在后面,覆盖掉远的物体。

  当然,假如觉得不麻烦的话,这样做倒也不是不行,但是假如这些事情是由硬件实现的话,效率可是会上一个层次的,所以OpenGL 也提供了此方法,被称作深度测试。(Depth Test)使用方法那是相当简单,仅仅需要通过glEnable启用就可以了,我们现在看看使用前后的区别。

  我们通过以下函数绘制一大一小两个球

void DrawBigRedSphere()
{
    GLfloat mat_specular[] = { 1.0, 0.0, 0.0, 1.0 };
    GLfloat mat_shininess[] = { 50.0 };
    GLfloat mat_ambient[] = { 1.0, 0.0, 0.0, 1.0 };
    GLfloat mat_diffuse[] = { 1.0, 0.0, 0.0, 1.0 };
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glutSolidSphere(0.5, 32, 32);
}
void DrawSmallBlueSphere()
{
    GLfloat mat_specular[] = { 0.0, 0.0, 1.0, 1.0 };
    GLfloat mat_shininess[] = { 50.0 };
    GLfloat mat_ambient[] = { 0.0, 0.0, 1.0, 1.0 };
    GLfloat mat_diffuse[] = { 0.0, 0.0, 1.0, 1.0 };
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glutSolidSphere(0.3, 32, 32);
}

上一篇: Win32 OpenGL编程(4) 2D图形基础(颜色及坐标体系进阶知识)
下一篇: Win32 OpenGL编程(5)顶点数组详细介绍

1 2 3 4 5 下一页

关于我们 | 联系我们 | 加入我们 | 广告服务 | 投诉意见 | 网站导航
Copyright © 2000-2011 21tx.com, All Rights Reserved.
晨新科技 版权所有 Created by TXSite.net