可以使用顶点数组渲染 Raycasting 吗?
Is it ok to render Raycasting using vertex array?
我正在使用光线投射制作简单的 fps 游戏,因为我认为它是一种非常快速和轻便的方法。
我的 Raycasting 函数将数据保存到顶点数组中,然后由 OpenGl 渲染。
但是因为这个数组包含屏幕上每个像素的顶点,这意味着我每帧渲染 2073600 个顶点 (1920x1080),在我看来这不是很好。
所以在这一点上,我认为最好放弃整个光线投射的东西,让它看起来像光线投射但具有真正的 3d,这意味着每帧只渲染大约 20 个顶点。
那么,我该怎么办?我应该只使用不同的渲染方法来使用光线投射吗?我应该使用真正的 3d 吗?还是每帧 2073600 个顶点就可以了?
最快的方法是直接在 GPU 上进行光线投射,您可以为此使用计算着色器(我对此没有任何经验)但是也可以在标准着色器渲染管道上执行此操作,请参阅我的 GLSL 版本:
- raytrace through 3D mesh
- raytrace through 3D voxel grid
您需要添加 BVH 或八叉树才能为复杂场景提供合理的速度...
如果您坚持在 CPU 侧进行光线投射,那么最好将您的输出存储到 2 个纹理中,一个保持深度,另一个保持 RGB 颜色。如果您能够以足够的精度访问 4 个分量纹理,则可以使用 RGBD 格式和单一纹理。然后渲染你只渲染单个 QUAD 和片段着色器做剩下的......
我正在使用光线投射制作简单的 fps 游戏,因为我认为它是一种非常快速和轻便的方法。 我的 Raycasting 函数将数据保存到顶点数组中,然后由 OpenGl 渲染。 但是因为这个数组包含屏幕上每个像素的顶点,这意味着我每帧渲染 2073600 个顶点 (1920x1080),在我看来这不是很好。 所以在这一点上,我认为最好放弃整个光线投射的东西,让它看起来像光线投射但具有真正的 3d,这意味着每帧只渲染大约 20 个顶点。
那么,我该怎么办?我应该只使用不同的渲染方法来使用光线投射吗?我应该使用真正的 3d 吗?还是每帧 2073600 个顶点就可以了?
最快的方法是直接在 GPU 上进行光线投射,您可以为此使用计算着色器(我对此没有任何经验)但是也可以在标准着色器渲染管道上执行此操作,请参阅我的 GLSL 版本:
- raytrace through 3D mesh
- raytrace through 3D voxel grid
您需要添加 BVH 或八叉树才能为复杂场景提供合理的速度...
如果您坚持在 CPU 侧进行光线投射,那么最好将您的输出存储到 2 个纹理中,一个保持深度,另一个保持 RGB 颜色。如果您能够以足够的精度访问 4 个分量纹理,则可以使用 RGBD 格式和单一纹理。然后渲染你只渲染单个 QUAD 和片段着色器做剩下的......