Opengl / glsl着色器动画和灯光问题

时间:2012-12-05 09:35:04

标签: opengl 3d glsl shader lighting

最近我把我的第一个认真的步骤(或者至少我认为是这样)放到了opengl / glsl和着色器中。 我设法构建和渲染VBO,创建和编译着色器,并以某种方式搞乱它们。 我正在使用顶点着色器修复我的opengl视图(校正纵横比)并执行动画。这是通过varius矩阵操作实现的。

有人会问为什么我使用顶点着色器制作动画,但是阅读全球各地的文章我觉得维护静态VBO最好不要经常更新它们。某种GPU> CPU战斗。 现在我可能错了,这就是为什么我到达这里寻求援助的原因。我的观点是,在未来我可能会制作一个游戏(例如)将有很多硬币供玩家抓取,我希望它们能够静态存储在GPU端。然后使用着色器旋转它们。

继续......“让光明。”

我还设法在顶点着色器中使用我的法线来重现光照。这一切都很好,除了灯光与我的立方体旋转(目前我使用立方体作为测试假人)。现在,我知道这里有什么问题。这是我的顶点着色器完全改变一切(甚至我的光源)。我可以想办法解决这个问题。一种方法是在我的光源上施加反向负转换力,这样我就可以保持静止,因为其他一切都在旋转。

这里的一切都模糊了。我到达stackoverflow以获取有关如何前进的指导。我试图从某种意义上思考更大:如果将来我会有很多对象我想要执行基本动画(例如旋转,缩放,翻译)。这需要我有不同的着色器,甚至包含其中的每个功能的打包器。我怎么会用这个呢。我会在同一个着色器内的每个对象之前传递不同的值吗?

现在,说实话,我想处理照明问题。但是我有一种感觉,我即将接近这个的方式将在阴影动画中设置我的一般方法。有人建议(在另一个问题的stackoverflow中)应该使用不同的着色器并在每次VBO渲染之前交换它们。我对我的关注有足够的效率,但我肯定喜欢这个想法。

1 个答案:

答案 0 :(得分:0)

  

有人建议(在另一个问题的stackoverflow中)应该使用不同的着色器并在每次VBO渲染之前交换它们。

这是哪个问题/答案?因为您通常应该尽可能避免切换着色器。也许这个人的意思是制服,它是着色器的参数,但可以便宜地改变。

此外,您的问题过于宽泛,也不够简洁(所有背景故事都隐藏了实际问题)。我强烈建议你将疑虑分成几个小问题,可以单独回答。