Questions tagged «skinning»

1
如何在Android中可靠地实现GPU外观?
我正在尝试让角色皮肤在Android上正常工作。 这个想法很原始:我有我的蒙皮矩阵,并且与每个顶点一起,我最多发送四个矩阵索引和四个相应的权重。我将它们汇总到顶点着色器中,并将其应用于每个顶点。 这就是我在游戏的iOS版本中的顶点着色器中所做的事情(不要介意法线): attribute vec4 in_pos; attribute vec4 in_normal; attribute vec2 in_texture_coords; attribute vec4 in_bone_index; attribute vec4 in_bone_weight; varying vec2 fs_texture_coords; uniform mat4 world_view_projection; uniform mat4 bones[@bind_matrix_count]; void main() { // Skinning vec4 transformed_pos = ((in_pos * bones[int(in_bone_index.x)]) * in_bone_weight.x) + ((in_pos * bones[int(in_bone_index.y)]) * in_bone_weight.y) + ((in_pos * bones[int(in_bone_index.z)]) …

3
如何将多个矩阵发送到顶点着色器?
我正在使用骨骼/蒙皮练习动画。我正在尝试为着色器每个顶点发送一个矩阵。我可以想到这两种方法。 方法一 这样的每个骨基质都有一个统一的手柄 u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); 并在其中onDraw将它们每个发送到着色器: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); 如果我有大量矩阵,显然这不是一个好方法。我的第二个想法我还没有尝试过,因为有很多代码可以重构 方法2 是用来glUniformMatrix4fv一次将它们全部发送出去(假设我有20个矩阵) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); 哪里matrices是float[16 * 20]。但是,然后修改每个骨骼的矩阵变得有点乏味。例如,如果我想获得第3个矩阵,则需要 float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); 而保存这些值可能会变得更加烦人。 我现在正在使用方法1,但看起来并不十分聪明... 将多个矩阵发送到OpenGL ES 2着色器的最佳方法是什么? LE:我正在使用Android,因此我正在寻找Java解决方案。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.