【问题标题】:Opengl/glsl shader animation and lighting issueOpengl/glsl 着色器动画和光照问题
【发布时间】:2012-12-05 22:18:58
【问题描述】:

所以最近我开始了我的第一个严肃步骤(或者至少我是这么认为的)进入 opengl/glsl 和一般的着色器。 我设法构建和渲染 VBO,创建和编译着色器,并以某种方式处理它们。 我正在使用顶点着色器来修复我的 opengl 视图(更正纵横比)并执行动画。这是通过各种矩阵操作来实现的。

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

继续前进。“要有光”。

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

这就是一切都变得模糊的地方。我到达 stackoverflow 以获取有关如何前进的指导。我正在尝试从某种意义上思考更大的问题:如果将来我会有很多我想为其执行基本动画的对象(例如旋转,缩放,平移)怎么办。这是否需要我拥有不同的着色器,甚至是一个包含每个功能的打包着色器。我什至会如何使用它。我会在每个对象在同一个着色器中渲染之前传递不同的值吗?

现在,老实说,我想处理照明问题。但我有一种感觉,我即将解决这个问题的方式将设置我在一般着色动画中的一般方法。有人建议(在另一个问题的 stackoverflow 中)应该真正使用不同的着色器并在每次 VBO 渲染之前交换它们。我担心这是否足够有效,但我绝对喜欢这个想法。

【问题讨论】:

    标签: opengl 3d glsl shader lighting


    【解决方案1】:

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

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

    此外,您的问题过于宽泛,也不是很简洁(所有背景故事都隐藏了实际问题)。我强烈建议您将您的疑问分解为一些可以单独回答的小问题。

    【讨论】:

    • 这个 -> stackoverflow.com/questions/7218147/… 你对我的问题绝对正确,但我认为这是因为我正在考虑将我的光源视为需要在我的场景中进行特殊(不同)转换的对象。如果这是这样,那么其余的应该遵循相同的(意味着在我的场景中需要不同转换的所有其他对象/vbo。)这有帮助还是让它变得更糟? :|
    • 我想补充一点,我的问题反映了我目前的困惑状态。我正在寻找的不是代码修复,而是方向/正确的指导。这就是为什么我的问题缺少任何代码。我也忘了谢谢你的回答,所以你去:-)
    • @ApJatrid:没有一个答案建议切换着色器。他们总是建议切换顶点数组绑定(缓冲区对象或复合数组对象)。关于如何处理灯光。好吧,通常的方法是使用全局(=世界)坐标作为灯光位置,并将它们作为统一数组传递给片段着色器。但是,当您要渲染具有大量光源的场景时,您可能需要查看延迟着色或预先计算的光量,或它们的组合。照明是一个相当复杂的主题。
    • “他们总是建议切换顶点数组绑定(缓冲区对象或复合数组对象)。”
    • ...我想我应该拆分对象和光源并在顶点着色器中以不同的方式处理它们(如果这可能的话),这样光源在它周围的所有其他东西(对象) 旋转
    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 2012-04-04
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    相关资源
    最近更新 更多