使用 OpenGL 函数的非常基本的体积渲染(用于教学目的)[关闭]

Posted

技术标签:

【中文标题】使用 OpenGL 函数的非常基本的体积渲染(用于教学目的)[关闭]【英文标题】:Very basic volume rendering using OpenGL functions (for teaching purposes) [closed] 【发布时间】:2011-04-08 13:59:52 【问题描述】:

我有一些学生在做一个关于体积渲染的项目。我正在尝试设计最基本的可能示例来帮助他们入门。我想要做的是有一个窗口并根据通过基础体积数据集的光线投射独立设置窗口中的每个像素。例如,这可以通过 Windows API 函数轻松完成。但是我们想用OpenGL。

我有两个想法:

    使用 glut 创建一个窗口。 使用一些 OpenGL 函数手动设置窗口中的每个像素。

或者,稍微复杂一点...

    使用 glut 创建一个窗口。 创建与窗口大小相同的屏幕外纹理。 根据光线投射的结果分别设置纹理中的每个像素。 将纹理翻转到窗口内容。

所以我的问题是双重的:有没有比这些选项更好的方法?有人可以指出相关的 OpenGL 函数来完成这些方法吗?

【问题讨论】:

我认为仅使用 OpenGL 来绘制单个像素是一种浪费。在关于体积渲染的大学课程中,我们使用 OpenGL 着色语言 GLSL 进行光线投射。看看 VJo 的帖子,他有很好的链接。 我同意使用一些基于硬件加速 GPU 的体积渲染会很不错。但是,有些学生确实做不到这一点,而那些不需要我帮助的学生! 【参考方案1】:

第一个选项,逐个像素会真的慢!我建议你创建一个与窗口大小相同的 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 缓冲区并将其翻转到窗口/从窗口翻转的任何快速提示? 太棒了,正是我需要的。【参考方案2】:

查看其中一个光线投射示例,然后选择一个适合您需要的示例:http://www.daimi.au.dk/~trier/?page_id=98http://cumbia.informatik.uni-stuttgart.de/ger/research/fields/current/spvolren/

【讨论】:

LOL - 来自我的标题“非常基本的体积渲染”。基于 GPU 的体绘制超出了本项目的范围。 @Dave 好的,抱歉。我不知道有什么更简单的:(【参考方案3】:

使用 opengl 进行体渲染的最简单方法是创建 3D 纹理并绘制一组与您的观察方向垂直的透明平面,然后切片您的 3D 体纹理贴图。

通过对切片应用混合,您可以看到体积。

【讨论】:

以上是关于使用 OpenGL 函数的非常基本的体积渲染(用于教学目的)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 CG 和 openGL 中使用统一的 1D 纹理参数时出错

OpenGL 渲染上下文-context

Opengl矩形不会渲染

Linux OpenGL 实践篇-14-多实例渲染

OpenGL实时渲染传输

OpenGL / GLU:是不是有用于绘制圆的内置函数?