繁体   English   中英

在openGL中使用着色器显示体素

[英]Display voxels using shaders in openGL

我正在使用渲染管道进行体素化,现在我已成功使用顶点+几何+片段着色器对场景进行体素化。 现在,我的体素以3D纹理存储,其大小为例如128x128x128。

我的场景原始模型以(0,0,0)为中心,并且在正轴和负轴上都延伸。 但是,纹理在tex坐标中居中(63,63,63)。

我实现了一个简单的光线边界以进行可视化,但是它没有考虑到相机的运动(我只能从非常固定的位置进行渲染,因为必须考虑3D纹理的不同坐标来生成我的光线)。

我的问题是:我该如何映射光线,以便在3D模型的坐标中以D方向在Po点生成光线,但在纹理坐标中对应位置的体素与3D世界中相机的每个运动相交?重新映射到体素坐标?

现在,我以这种方式生成光线:在相机前面的位置(63,63,-20)创建一个四边形,向(63,63,3)的方向投射光线

我认为您应该将整个视图变换矩阵存储在着色器统一参数中。 然后,对于每个着色器执行,您可以使用其屏幕坐标和视图变换来计算特定像素的视图射线方向。 有了射线方向和相机位置,您就可以像现在一样使用它们。

还有另一种方法可以尝试:

假设您有一个(0,0,0)->(1,1,1)立方体,并根据每个角的位置为其分配颜色,例如(1,0,0)为红色等。

现在,对于每个框架,您都将立方体的前表面绘制到纹理,然后将立方体的后表面绘制到第二个纹理。

在最后的渲染,你可以使用这两种纹理来获得enterexit三维向量,已经在纹理空间,使您的最终着色器简单得多。

您可以在此处阅读更好的描述:

http://graphicsrunner.blogspot.com/2009/01/volume-rendering-101.html

http://web.cse.ohio-state.edu/~tong/vr/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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