如何将对象位置传递给顶点着色器?

我正在使用搅拌机游戏引擎 。 我想创造一个大的平面,并在移动物体附近局部变形。

到目前为止(尽管作为着色器的初学者),我已经写了一个顶点着色器,将顶点移动到正确的位置(现在是常量位置)。

我无法find一种方法来交换每个帧更新对象的位置,而着色器正在运行。 我甚至不确定是否有可能。 我只想从着色器访问特定对象的中心。

你需要在着色器中创建一个variables来保存这个对象的位置。 在GLSL中,你会创建一个统一的variables ; 这个variables在整个着色器的调用中具有相同的值(因此,“统一”;您可能会看到开发人员更熟悉D3D,将这种types的variables也称为“着色器常量”variables)。

每当你想用这个着色器渲染某个东西时,你都会把这个uniformvariables设置为你想要的值。


这就是说,然而,看起来你只是用这套制服来取代世界上的一些物体。 更常见的方法是使用着色器中应用的对象的世界变换matrix 。 这是实现(在现代OpenGL)作为matrix统一variables,很像你简单的vector统一,但也允许旋转和缩放,是更常见的方法。 它也可以很好地扩展到一个实例化的场景,在这个场景中,有几个对象共享相同的几何体,但是在不同的世界位置(听起来像,从你的评论中,你最终想要的)。