繁体   English   中英

如何在不切割网格几何体的情况下渲染横截面?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM