音视频开发-OpenGL图形显示常见问题以及解决办法

本文介绍了在3D图形渲染中遇到的正背面剔除和深度测试问题。通过分析和使用OpenGL的正背面剔除功能,可以避免隐藏面的错误渲染。同时,深度测试通过深度缓冲区确保正确处理距离远近的物体,解决覆盖问题。针对ZFlighting闪烁问题,文章提出了Polygon Offset方法来创建深度间隔,减少图形重叠导致的闪烁。
摘要由CSDN通过智能技术生成

渲染过程中可能产生的问题

在绘制3D场景的时候,我们需要决定哪些部分是对观察者 可⻅的,或者哪些部分是对观察者不可⻅的.对于不可见的部分,应该及早丢弃.例如在⼀个不透明的墙壁后,就不应该渲染.这种情况叫做”隐藏面消除”(Hidden surface elimination).

油画算法

  1. 先绘制场景中的离观察者较远的物体,再绘制较近的物体.
  2. 例如下面的图例: 先绘制红色部分,再绘制黄色部分,最后再绘制灰色部分,即可解决隐藏面消除的问题
    在这里插入图片描述
    使用油画算法,只要将场景按照物理距离观察者的距离远近排序,由远及近的绘制即可.那么会出现什么问题? 如果三个三⻆形是叠加的情况,油画算法将⽆法处理。
    在这里插入图片描述

分析

当我们去看一个正方体时,只能最多看到3个面,正方体有6个面,那么其他3个面是看不到的,那么也不需要渲染。所以,我们只需要渲染我们看到的3个面!

那么怎么判断那些面是可见的,哪些面是不可见的呢?即如何告诉OpenGL哪些面是正面。哪些面是反面?
答案就是通过分析顶点数据的顺序

  • 正面:按照逆时针顶点连接顺序的三角形
  • 背面:按照顺时针顶点连接顺序的三角形

在这里插入图片描述
分析:

  • 左侧三⻆形顶点顺序为: 1—> 2—> 3 ; 右侧三角形的顶点顺序为: 1—> 2—> 3
  • 当观察者在右侧时,则右边的三⻆形方向为逆时针⽅向则为正面,⽽左侧的三⻆形为顺时针则为背面
  • 当观察者在左侧时,则左边的三角形为逆时针⽅向判定为正面,⽽右侧的三角形为顺时针判定为背⾯.

正⾯和背面是有三角形的顶点定义顺序和观察者方向共同决定的.随着观察者的⻆度方向的改变,正面背面也会跟着改变。

正背面剔除

从而引入OpenGL的正背面剔除概念

  1. 开启表面剔除(默认为背面剔除)
void glEnable(GL_CULL_FACE);
  1. 关闭表面剔除
void glDisable(GL_CULL_FACE);
  1. 用户选择剔除哪个面(正面/背面)

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值