我对基于逆运动学和变形目标进行实时角色动画有着迷恋之感。如何在使用iPhone SDK的OpenGL ES中使用着色器
我用Animata,一个开源(基于FLTK,可悲的)IK链式动画程序得到了一个公平的方式。我甚至将他们的渲染代码移植到各种平台上(Java/Processing和iPhone)alt video http://ats.vimeo.com/612/732/61273232_100.jpgvideo of Animata renderers
但是,我从来没有确信他们的代码是特别优化的,它似乎需要大量的CPU模拟渲染每一帧,这对我来说似乎有点不必要。
我现在开始一个项目,使在iPad上,在很大程度上依赖于实时角色动画的应用程序,并通过iOS版的文件翻阅我发现了一个代码段用于“两成骨剥皮着色器”
// A vertex shader that efficiently implements two bone skinning.
attribute vec4 a_position;
attribute float a_joint1, a_joint2;
attribute float a_weight1, a_weight2;
uniform mat4 u_skinningMatrix[JOINT_COUNT];
uniform mat4 u_modelViewProjectionMatrix;
void main(void)
{
vec4 p0 = u_skinningMatrix[int(a_joint1)] * a_position;
vec4 p1 = u_skinningMatrix[int(a_joint2)] * a_position;
vec4 p = p0 * a_weight1 + p1 * a_weight2;
gl_Position = u_modelViewProjectionMatrix * p;
}
有人知道我会如何使用这样的片段?它的情况非常少。我认为这是我需要做的,以做我想做的IK链骨骼动画,但在GPU上。
同样值得一看的是Apple开发人员工具中包含的OpenGL Shader Builder。请注意,添加一个统一的变量不会让它看起来像你可以玩的东西,除非你真的在你的着色器代码中引用这个变量(那个人让我挠头太久)。 Joe的大部分示例都可以在Shader Builder中进行测试,因此您不一定需要编写所有的C才能使您了解原理。 – 2010-08-07 14:26:25