【问题标题】:Is it possible to raytrace with GLSL while using OpenGL in a normal way以正常方式使用 OpenGL 时是否可以使用 GLSL 进行光线追踪
【发布时间】:2014-10-19 05:02:58
【问题描述】:

是否可以在 GLSL 中编写着色器,以便将 OpenGL 转换为光线追踪器?类似于以下内容。

glUseProgram(rayTracer);
//than do anything you do in OpenGL normally
glEnable(GL_LIGHT0);
gl....//Set light parameters
...
//Draw The theme
glDrawArray(.......);

比结果结果将通过光线跟踪渲染。例如:物理上正确的照明

我已经试过了。但是我无法在顶点/片段着色器中获取所有三角形顶点和颜色/纹理以进行光线跟踪。

是否可以创建这种着色器?如果可能,我应该如何以及从哪里开始?

【问题讨论】:

  • 一句话:不。使用 OpenGL 实现光线追踪器是可能的(虽然不是很简单),但它无论如何都不会像你想象的那样工作。

标签: opengl glsl raytracing


【解决方案1】:

不,这是不可能的。光线追踪是一种球形照明模型。这意味着出于显而易见的原因,需要使用所有对象和光源访问整个场景。 OpenGL 实现的渲染管道一次只能看到一个图元。虽然可以在 GPU 上进行光线控制,但这与仅仅编写一些可以作为替代品同时保持渲染算法的其余部分相同的着色器完全不同。需要对数据进行彻底的重新组织,GL的绘图功能已经没有什么用处了。

【讨论】:

    【解决方案2】:

    查看来自 OpenGL superbible 的这些示例。 http://www.openglsuperbible.com/example-code/

    有一个名为“raytracer”的示例。

    在 Windows/Visual Studio Express 上,为了使其正常运行, 您可能希望将路径更改为绝对路径,使用“\\”目录分隔符而不是“/” 在“load_shaders()”函数中。

    然后,+/- 键会更改递归深度,其他控制键可以在源代码中找到。

    也许这个例子并不像你想象的那么简单, 但是...您可以从这里开始。

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 2015-01-27
      • 2010-09-07
      • 2012-03-26
      • 1970-01-01
      • 2011-09-03
      • 2011-04-09
      • 2014-11-22
      • 2015-09-20
      相关资源
      最近更新 更多