1

我正在尝试使用 OpenSceneGraph 实现多通道渲染方法。但是,我不完全确定我的问题是理论上的还是由于缺乏对 OSG 的应用知识。到目前为止,我已经通过使用正交投影渲染到纹理成功地实现了多通道着色,但我似乎无法使透视投影工作。

可能是我不太明白如何实现多通道着色。当然,我必须使用多通道着色器将整个场景预渲染为纹理,然后在最终渲染中使用该纹理。但是,我不是在谈论为场景中的每个对象创建单独的纹理,而是有效地捕获整个预渲染场景的屏幕截图。然后,仅从该纹理,将渲染效果应用于各个几何图形。

我假设这意味着我必须对顶点着色器中的每个几何图形进行额外的顶点坐标转换。也就是说,经过计算:

gl_Position = ModelViewProjectionMatrix * Vertex;

我需要更进一步并计算顶点的屏幕坐标,以便正确映射顶点(再次,假设纹理由场景的整个屏幕截图组成)。

如果我是正确的,那么我必须能够在与最终渲染中使用的视图相同的透视图中预渲染场景,而不是正交视图。这就是我遇到麻烦的地方。我可以让正交视图做我想做的事,但不是透视图。

我的方法正确吗?我能想象的唯一其他方法是将所有内容渲染到屏幕填充四边形(实际上,与转换为屏幕坐标相同),但这并不能减轻在预渲染阶段使用透视投影的需要.

想法?链接??

编辑:我还应该指出,在我成功的尝试中,我只使用了片段着色器。透视投影有效,但是,当然,我使用的屏幕对齐四边形是偏移而不是居中的。我添加了一个直通顶点着色器,一切都变成了空白。

4

1 回答 1

1

事实证明,我的方法是正确的。它特别好,因为它避免了在我的场景图中添加另一个相机来渲染最终输出——我可以简单地使用主相机。不幸的是,这意味着我所有的输出纹理都以屏幕分辨率渲染,而不是适合对象大小的分辨率。也就是说,如果我的屏幕是 1024 x 1024,那么输出纹理也是如此,图中每个预渲染相机都有一个。效率不高,但现在可以了。

于 2012-06-04T01:20:17.627 回答