【发布时间】:2012-03-12 15:21:38
【问题描述】:
我正在尝试学习如何编写 GLSL 几何着色器。我的测试项目是这样工作的:我有 N 个 VBO,它们正在建模“草叶”。如果没有着色器,每片草叶基本上只是一条有 20 段的线带。我能够使用几乎 N=10k 刀片或多或少平滑地制作此动画,因此有 200,000 行。
着色器获取每个线段并将其吹出以该线段为中心的相同长度的圆柱体,因此草叶现在是具有维度的管。因此,CPU 没有任何变化,但现在我正尝试利用 GPU 添加更多几何图形,以便为刀片着色。圆柱体有 30 个部分,因此每个刀片有 60 个三角形,1200 个三角形。
问题是,为了让它流畅地动画,我不得不缩减到只有 25 个刀片。那只有 30k 个三角形,这基本上比我之前完全不使用着色器时处理的几何体更少。
这是在 Macbook Pro、Snow Leopard、AMD Radeon HD 6750M 上运行的。不知道这是不是一张好卡。
着色器代码非常简单——顶点着色器只有 gl_Position = gl_Vertex。光照发生在几何着色器中:简单的环境、镜面反射和漫反射组件,基本上直接来自教程。片段着色器同样简单,只是将草的颜色乘以从几何着色器传递过来的光强度。
顺便说一下,这是一个旧版本的 OpenGL,2.1 -- 所以它是 GLSL 1.2,所以要使用地理着色器,它需要 GL_EXT 东西。以防万一。
此外,堆栈是在 Java 之上的 JOGL 之上的 GLGraphics 之上的处理。如果这是一个因素,我会感到惊讶,除非它以某种方式在 CPU 上模拟着色器代码,但我认为 OpenGL 不会自动为你做这种事情。
无论如何,这些数字是否合理,还是我做错了什么?我是否不切实际地期望地理着色器能够创造奇迹?
【问题讨论】:
-
我会在确保在硬件上运行 GS 而不是模拟该功能的驱动程序的卡上尝试此代码。也许一些新的费米级硬件?我有一种强烈的感觉,它会很好用:)
-
@ananthonline:你是说 AMD 的 HD 级硬件没有有硬件几何着色器吗?因为那不是真的。
-
不太确定,因此是“尝试”位。此外,它可能是坏驱动程序或其他东西。确保的唯一方法是尝试其他一些对其他人有效的卡+驱动程序组合。对吗?
标签: java opengl glsl processing shader