1

我为 3D 动画做“顶点蒙皮”没有问题。使用模拟器(和genymotion)时一切顺利但是,在真实设备(如三星和联想)上运行时看起来很乱

截图(模拟器)

http://1drv.ms/1BzZ9Ib

在此处输入图像描述

截图(真机)

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 触摸开/关动画。

信息

  1. Xamarin.Android = 4.10.xx
  2. 模拟器目标 = API 16 或 4.1
  3. 真实设备目标 = API 16 或 4.1
  4. App Target = API 10 或 2.3(也在 API 14 和 API 16 中测试),结果保持不变

有什么办法可以解决这个问题吗?

最好的问候,谢谢。

4

0 回答 0