我为 3D 动画做“顶点蒙皮”没有问题。使用模拟器(和genymotion)时一切顺利。但是,在真实设备(如三星和联想)上运行时看起来很乱。
截图(模拟器)
截图(真机)
1drv.ms/1BzZ2we
传递皮肤变换矩阵
int location = ...;
int arrayCount = ...;
float[] skinTransform = ...;
GL.UniformMatrix4(location, arrayCount, false, skinTransform);
GLSL 顶点
uniform mat4 World;
uniform mat4 View;
uniform mat4 Projection;
uniform mat4 Bones[20];
attribute vec4 Position;
attribute vec4 BoneIndices;
attribute vec4 BoneWeights;
attribute vec2 UV;
varying vec4 v_Position;
varying vec2 v_UV;
void main()
{
mat4 skinTransform;
int boneIndex = int(BoneIndices.x);
skinTransform += Bones[boneIndex] * BoneWeights.x;
boneIndex = int(BoneIndices.y);
skinTransform += Bones[boneIndex] * BoneWeights.y;
boneIndex = int(BoneIndices.z);
skinTransform += Bones[boneIndex] * BoneWeights.z;
boneIndex = int(BoneIndices.w);
skinTransform += Bones[boneIndex] * BoneWeights.w;
vec4 skinPos = Position * skinTransform;
vec4 worldPosition = skinPos * World;
vec4 viewPosition = worldPosition * View;
v_Position = viewPosition * Projection;
v_UV = UV;
gl_Position = v_Position;
}
APK
http://1drv.ms/1BzYV3Q 触摸屏开/关动画。
信息
- Xamarin.Android = 4.10.xx
- 模拟器目标 = API 16 或 4.1
- 真实设备目标 = API 16 或 4.1
- App Target = API 10 或 2.3(也在 API 14 和 API 16 中测试),结果保持不变
有什么办法可以解决这个问题吗?
最好的问候,谢谢。