[英]How to Render Cross Section without Slicing the Mesh Geometry?
给定世界上一个切片平面,如果三角形在平面的正侧,我想看到它们,与平面相交的那些被分割,并且在正平面上的部分也可以看到。
如果每次改变平面时我都将三角形网格切片,当有大量三角形时可能会很慢,并且也会重新生成纹理坐标。
如果我仔细设置相机(视图)和投影,它可能会产生类似的结果,但此结果取决于视图。
那么,是否有渲染技术可以利用 GPU 的裁剪结果来渲染与视图无关的横截面?
横截面是这样的:
使用着色器真的很容易。 在Opengl/GLSL 中,您只需向片段着色器添加一个if
语句,以确定您的片段是否在您的平面的正确一侧,如果不discard
它。
这将根据您的条件切割您的对象,以便您获得轮廓。 但是,您仍然必须以某种方式处理填充,可能是在第二遍中从深度缓冲区或通过使用模板缓冲区,但两者都只是覆盖整个屏幕的单个GL_QUAD
。
这样做的数学很简单,你需要定义你的半空间。 我能想到的最简单的事情是:
p0=(x0,y0,z0)
- 属于切割平面的 3D 点
n0=(nx,ny,nz)
- 垂直于指向病房观察侧的切割平面
所以任何片段p=(x,y,z)
都是可见的,如果
dot_product(p-p0,n0) >= 0.0
所以
if (nx*(x-x0)+ny*(y-y0)+nz*(z-z0)<0.0f) discard;
不要忘记禁用GL_CULL_FACE
并使用双面材料/照明。 并且所有坐标必须在同一个坐标系中!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.