OpenSCAD中透明立方体内部三角形被隐藏的原因及解决方法
问题原因
OpenSCAD的渲染依赖深度测试机制:绘制物体时,每个像素的深度信息会存入深度缓存,后续绘制的像素如果深度值更大(更靠近相机后方),会被判定为被遮挡而剔除。
你当前先绘制透明立方体,深度缓存已记录立方体各像素的深度值;之后绘制的三角形,所有顶点都处于立方体内部/表面区域,其像素深度值大于立方体对应位置的深度值,因此被深度测试判定为遮挡,最终被隐藏。
解决方法
有两种简单可行的方案:
方案1:调整绘制顺序
把三角形代码放在立方体之前绘制,让三角形先写入深度缓存,后续透明立方体的绘制不会遮挡它:
p1 = [80/2, 0, 0]; p2 = [80, 80/2, 0]; p3 = [80, 0, 80/2]; color([0, 1, 0, 0.9]) polyhedron(points=[p1, p2, p3], faces=[[0, 1, 2]]); color([1, 1, 1, 0.2]) cube(80, center=false);
方案2:将立方体标记为背景物体
用%前缀将立方体设为背景物体,背景物体会在所有前景物体之后绘制,且不会遮挡前景内容:
%color([1, 1, 1, 0.2]) cube(80, center=false); p1 = [80/2, 0, 0]; p2 = [80, 80/2, 0]; p3 = [80, 0, 80/2]; color([0, 1, 0, 0.9]) polyhedron(points=[p1, p2, p3], faces=[[0, 1, 2]]);
内容的提问来源于stack exchange,提问作者Megidd
相关产品推荐
相关产品推荐

