Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 使用对象顺序空空间跳过实现体渲染_Opengl_3d_Octree_Volume Rendering - Fatal编程技术网

Opengl 使用对象顺序空空间跳过实现体渲染

Opengl 使用对象顺序空空间跳过实现体渲染,opengl,3d,octree,volume-rendering,Opengl,3d,Octree,Volume Rendering,我从2009年的scenegraph课程笔记中学习了一些体绘制技术。我对对象顺序空格跳过感兴趣,它将边界框光栅化为许多小块,如下图所示: 我想知道如何实现这一点?八叉树?或者其他技术?我已经实现了一个简单的光线投射体绘制程序,没有对象顺序空位跳过。代码片段或伪代码会有很大帮助。基本思想是生成一个作为三角形网格的边界几何体,然后将该网格渲染到屏幕外缓冲区,以便计算第二遍光线行进时使用的开始和结束位置 我在C++中使用OpenGL 4实现了这个,包括源代码。以下是总体概述: 初始化:给定具有iso

我从2009年的scenegraph课程笔记中学习了一些体绘制技术。我对对象顺序空格跳过感兴趣,它将边界框光栅化为许多小块,如下图所示:


我想知道如何实现这一点?八叉树?或者其他技术?我已经实现了一个简单的光线投射体绘制程序,没有对象顺序空位跳过。代码片段或伪代码会有很大帮助。

基本思想是生成一个作为三角形网格的边界几何体,然后将该网格渲染到屏幕外缓冲区,以便计算第二遍光线行进时使用的开始和结束位置

我在C++中使用OpenGL 4实现了这个,包括源代码。以下是总体概述:

  • 初始化:给定具有iso值的体积纹理,在粗网格上生成边界几何体。例如,体积可以是256x256x200,网格单元可以跨越8³体素,因此网格尺寸将是32x32x25。
    • 首先生成体积纹理
      gridTex
      ,其中每个体素包含最大iso值
    • 给定阈值iso值,生成边界几何体。如果栅格体素包含任何可见内容,则视为处于活动状态。对于iso曲面,这意味着该值高于阈值。对于
      gridTex
      中的每对相邻体素,如果一个处于活动状态,另一个处于非活动状态,则生成一个四边形。每次iso值更改时执行此操作
  • 第一步:将边界几何体渲染到屏幕外缓冲区,存储每个片段的最小和最大深度值
  • 第二遍:将正面再次渲染到主缓冲区。
    • 如果不是最小深度值,则丢弃。根据最小深度值和最大深度值计算光线的起点和终点位置
    • 像往常一样进行射线扫描

基本思想是生成一个作为三角形网格的边界几何体,然后将该网格渲染到屏幕外缓冲区,以便计算第二遍光线行进的起始和结束位置

我在C++中使用OpenGL 4实现了这个,包括源代码。以下是总体概述:

  • 初始化:给定具有iso值的体积纹理,在粗网格上生成边界几何体。例如,体积可以是256x256x200,网格单元可以跨越8³体素,因此网格尺寸将是32x32x25。
    • 首先生成体积纹理
      gridTex
      ,其中每个体素包含最大iso值
    • 给定阈值iso值,生成边界几何体。如果栅格体素包含任何可见内容,则视为处于活动状态。对于iso曲面,这意味着该值高于阈值。对于
      gridTex
      中的每对相邻体素,如果一个处于活动状态,另一个处于非活动状态,则生成一个四边形。每次iso值更改时执行此操作
  • 第一步:将边界几何体渲染到屏幕外缓冲区,存储每个片段的最小和最大深度值
  • 第二遍:将正面再次渲染到主缓冲区。
    • 如果不是最小深度值,则丢弃。根据最小深度值和最大深度值计算光线的起点和终点位置
    • 像往常一样进行射线扫描