使用OpenGL函数进行基本体积渲染(用于教学目的)

5
我有一些学生正在做体积渲染项目。我正在尝试设计最基本的示例来帮助他们入门。我的想法是创建一个窗口,并独立设置窗口中的每个像素,基于对底层体积数据集的光线投射。例如,可以使用Windows API函数轻松完成此操作。但是我们想要使用OpenGL。
我有两个想法:
  1. 使用glut创建一个窗口。
  2. 使用某些OpenGL函数手动设置窗口中的每个像素。
或者,稍微复杂一点...
  1. 使用glut创建一个窗口。
  2. 创建与窗口相同大小的离屏纹理。
  3. 根据光线投射的结果逐个设置纹理中的每个像素。
  4. 将纹理翻转到窗口内容。
因此,我的问题有两个方面:是否有比这些选项更好的方法?并且,有人能指出相关的OpenGL函数以实现这些方法吗?

1
我认为仅仅用OpenGL绘制单个像素是浪费的。在一门关于体渲染的大学课程中,我们使用了OpenGL着色语言GLSL来进行光线投射。看看VJo的帖子,他有很好的链接。 - trenki
2
我同意使用一些硬件加速的基于GPU的体积渲染会很棒。但是,有些学生确实达不到这个水平,而那些达到了也不需要我的帮助! - Dave
3个回答

3

第一种选项,即逐像素处理将会非常缓慢!我建议您创建一个与窗口大小相同的RGB缓冲区,并使用glDrawPixels进行绘制。

编辑:

unsigned char * buffer = new unsigned char [width * height * 3];
glRasterPos(0,0);
glDrawPixels(width,height,GL_RGB,GL_UNSIGNED_BYTE,buffer);
delete [] buffer;

你能给我一个快速提示,如何创建RGB缓冲区并将其翻转到/从窗口? - Dave

3

LOL - 来自我的标题“非常基础的体积渲染”。 基于GPU的体积渲染远超出了这个项目的范围。 - Dave
@Dave 好的,抱歉。我不知道有更简单的方法 :( - BЈовић

2
使用OpenGL进行体积渲染的最简单方法是创建一个3D纹理,并绘制一组垂直于您的视角并切割您的3D体积纹理映射的透明平面。
通过对切片应用混合,您可以看到体积。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接