所以最近我开始了我的第一个严肃步骤(或者至少我是这么认为的)进入 opengl/glsl 和一般的着色器。我设法构建和渲染 VBO,创建和编译着色器,并以某种方式处理它们。我正在使用顶点着色器来修复我的 opengl 视图(更正纵横比)并执行动画。这是通过各种矩阵操作来实现的。
有人会问我为什么要使用顶点着色器来制作动画,但是阅读全球各地的文章后,我的印象是最好保持静态 VBO,而不是不断更新它们。某种 GPU > CPU 之战。现在我可能错了,这就是为什么我要在这里寻求帮助。我对此的看法是,将来我可能会制作一款游戏,其中(例如)会有很多硬币供玩家抓取,我希望它们静态存储在 GPU 端。然后使用着色器旋转它们。
继续……“要有光”。
我还设法在顶点着色器中使用我的法线来重现光照。除了光随着我的立方体旋转(目前我使用立方体作为测试假人)之外,一切都很好。现在,我知道这里出了什么问题。这是我的顶点着色器绝对转换一切(我猜甚至是我的光源)。我可以想出一两种方法来解决这个问题。一种方法是在我的光源上施加反向负变换力,这样我就可以在其他一切旋转时保持它的静止。
这就是一切都变得模糊的地方。我到达 stackoverflow 以获取有关如何前进的指导。我试图从某种意义上思考更大的问题:如果将来我会有很多我想要执行基本动画的对象(例如旋转、缩放、平移)。这是否需要我拥有不同的着色器,甚至是一个包含每个功能的打包着色器。我什至会如何使用它。我会在每个对象在同一个着色器中渲染之前传递不同的值吗?
现在,老实说,我想处理照明问题。但我有一种感觉,我即将解决这个问题的方式将设置我在一般着色动画中的一般方法。有人建议(在另一个问题的stackoverflow中)应该真正使用不同的着色器并在每次VBO渲染之前交换它们。我担心这是否足够有效,但我绝对喜欢这个想法。