积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
OpenGL中线框图的消隐
error997 (error997)    2014-11-20 20:21:07      目标    课题
   隐藏线消除
使用深度缓存的2通道绘制的OpenGL实现:
1. 禁写颜色缓存
切换到: 纯代码  
   
    glColorMask(0, 0, 0, 0);

2. 启用深度测试
切换到: 纯代码  
   
    glEnable(GL_DEPTH_TEST);
    glDepthFunc (GL_LESS);

3. 以多边形填充模式绘制对象,要使用多边形偏移(Pass1)
切换到: 纯代码  
   
    glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
    glPolygonOffset(1.1f, 4.0f);
    glEnable (GL_POLYGON_OFFSET_FILL);  //启用多边形偏移
    drawScene ();
    glDisable (GL_POLYGON_OFFSET_FILL);

4. 启用颜色缓存
切换到: 纯代码  
   
    glColorMask(1, 1, 1, 1);

5. 采用两种线绘制方式之一绘制对象中包含的线段(Pass2).
   具体实现代码
切换到: 纯代码  
   
   int DrawGLScene(GLvoid)        // 从这里开始进行所有的绘制
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度缓存
    glLoadIdentity();     // 重置模型观察矩阵
    glTranslatef(0.0f,0.0f,-5.0f);      // 移入屏幕 5 个单位
    static float xrot=0.0f,yrot=0.0f,zrot=0.0f;
    glRotatef(xrot,1.0f,0.0f,0.0f);      // 绕X轴旋转
    glRotatef(yrot,0.0f,1.0f,0.0f);      // 绕Y轴旋转
    glRotatef(zrot,0.0f,0.0f,1.0f);      // 绕Z轴旋转
    
    glDisable(GL_TEXTURE_2D);
    
    glColorMask(0,0,0,0);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glPolygonOffset(1.1f, 4.0f);
    glEnable (GL_POLYGON_OFFSET_FILL);  //启用多边形偏移
    //auxSolidSphere(1.0);
    auxSolidTeapot(1.0);
    glDisable (GL_POLYGON_OFFSET_FILL);
    glColorMask(1, 1, 1, 1);
    glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);
    //auxSolidSphere(1.0);
    auxSolidTeapot(1.0);
    
    xrot+=1.3f;        // X 轴旋转
    yrot+=1.2f;        // Y 轴旋转
    zrot+=1.4f;        // Z 轴旋转
    return TRUE;       //  一切 OK
}
   

效果图:

转自 http://blog.csdn.net/y___y/article/details/1568341
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累