3.OpenGL渲染技巧

 我来答
白露饮尘霜17
2022-06-18 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6276
采纳率:100%
帮助的人:32.1万
展开全部
1.渲染过程产生的问题
看到了不透明墙壁后面的东西,不应该渲染墙壁后的东西(隐藏面消除)

2.油画渲染
距离观察者由远及近的绘制物体,可以解决。
但是这出现了新的问题,如果3个三角形互相叠加,油画算法将无法渲染。

3.正背面剔除
OpenGL可以检查朝向观察者的面并渲染它们,而丢弃背面。
OpenGL如何区分正背面?
通过分析顶点数据的顺序。

4.深度测试
深度:3D世界中像素点距离摄像机的距离。
深度缓冲区:一块内存区域、存储着每个像素点的深度值,值越大距离摄像机越远。
为何需要深度缓冲区?绘制顺序就不重要了。
深度测试:是否绘制物体表面,表面深度值和当前缓冲区深度值比较,大于则丢弃,否则更新像素颜色值和深度值。

5.多边形模型
6.多边形偏移
7.裁剪
8.颜色混合

1.谈谈图形图像渲染中的深度缓冲区?
一块内存区域、存储着每个像素点的深度值,值越大距离摄像机越远。
为何需要深度缓冲区?绘制顺序就不重要了。

2.阐述隐藏面消除解决方案?
正背面剔除、深度测试

3.阐述深度缓冲区带来的隐患、解决方案、预防方案?
原因:深度缓冲区的限制导致深度相差很小。
隐患:交错闪烁出现2个画面
解决方案:让深度值之间产生间隔,在执行深度测试前将立方体的深度值做一些细微的增加,区分重叠的2个图形深度值。
第一步:Polygon Offset方式解决。
glEnable(GL_POLYGON_OFFSET_FILL)
第二步:指定偏移量
void glPolygonOffset(Glfloat factor,Glfloat units);
第三步: 关闭Polygon Offset
glDisable(GL_POLYGON_OFFSET_FILL)

预防方案:
不要将2个物体靠的太近;将裁剪面设置的离观察者远一些;使用高位数的深度缓冲区。

1.深度测试

2.OpenGL 裁剪

3.OpenGL混合
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式