2012-12-05 86 views
0

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

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

前进..“让有光”。

我也设法在顶点着色器中使用我的法线重现照明。除了光线与我的立方体一起旋转(目前我使用立方体作为测试假人)之外,它一切正常。现在,我知道这里有什么问题。这是我的顶点着色器,绝对可以转化所有东西(甚至是我猜测的光源)。我可以想办法解决这个问题。一种方法是在我的光源上应用反向负向转换力,这样我就可以在其他所有元件都旋转时保持静态。

这里是一切模糊。我达到了stackoverflow指导如何前进。我试图以一种合理的方式思考更大的问题:如果将来我会有很多对象想要执行基本的动画(例如旋转,缩放,翻译)。这需要我拥有不同的着色器,甚至包含每个函数都包含的着色器。我怎么会使用这个。在相同着色器内的每个对象渲染之前,我会传递不同的值吗?

现在,说实话,我想处理照明问题。但是我有一种感觉,即将来临的这种方式将为我们制作一般的阴影动画提供了一般方法。其中一个建议(在另一个问题的stackoverflow中)应该真正使用不同的着色器,并在每个VBO渲染之前交换它们。我对我的担心很有效,但我绝对喜欢这个想法。

回答

0

一个建议(这里在另一个问题的stackoverflow),应该真的使用不同的着色器,并在每个VBO呈现之前交换它们。

这是哪个问题/答复?因为通常应尽可能避免切换着色器。也许这个人的意思是制服,它是着色器的参数,但可以换成廉价的。

另外你的问题太广泛了,也不是很简洁(所有的背景隐藏了实际问题)。我强烈建议你将你的疑惑分解为一些可以单独回答的小问题。

+0

这一个 - > http://stackoverflow.com/questions/7218147/render-multiple-objects-with-opengl-es-2-0 你是绝对正确的我的问题,但我认为这是因为我'我想把我的光源当作需要特殊(不同)转换的物体来处理。如果是这样,那么其他的应该遵循相同的原则(意味着每个其他对象/ vbo都需要在我的场景中进行不同的转换。) 这样做有帮助还是最差?:| –

+0

我只想补充一点,我的问题反映了当前im混淆状态。我正在寻找的不是一个代码修复,而是一个方向/正确的指导。这就是为什么我的问题缺乏任何代码。 另外我忘了谢谢你的回答,所以你去了:-) –

+0

@AJJatrid:没有一个答案暗示了切换着色器。他们总是建议切换顶点数组绑定(缓冲区对象或复合数组对象)。关于如何对待灯。那么,通常的做法是使用光照位置的全局(=世界)坐标,并将它们作为统一数组传递给片段着色器。但是,当您想要渲染具有大量光源的场景时,您可能需要查看延迟着色或预计算光量或其组合。照明是一个相当复杂的主题。 – datenwolf