我對基於逆運動學和變形目標進行實時角色動畫有着迷戀之感。如何在使用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