小编Joh*_*son的帖子

适用于Android OpenGL ES的GPU上的骨骼动画

我正在我的Android手机中实现骨骼动画,这就是我的方法:

  1. 计算CPU端的所有骨骼转换矩阵

  2. 创建一个浮动纹理来存储这些矩阵(所以这是在每个帧的开头完成的).代码如下所示:

    if(texID) {
        glDeleteTextures(1, &texID);
        texID = 0;
    }
    
    glGenTextures(1, &texID);
    glBindTexture(GL_TEXTURE_2D, texID);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_FLOAT, p);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在顶点着色器中,从此纹理中获取矩阵并应用于顶点位置

这种方法在使用POWERVR GPU的Motorola Milestone XT-701中运行良好.但是当我在Qualcomm snapdragon(SE Xperia X10i和Google Nexus one)上运行它时,有许多三角形消失(看起来是随机的),所以看起来模型是闪烁的.

我还尝试通过仅渲染一个动画模型来降低场景复杂度,并且闪烁变小但仍然存在.有谁知道我可能做错了什么?这是某种同步问题吗?

你可以在这里看到快照(前两张图片是正确的,后两张图片是错误的).我的grogram的APK文件可以在这里下载.(它不需要任何许可,所以不要担心)

这是我使用的顶点着色器:

struct light {
    lowp vec4    position;  // light position for a point/spot light or
                      // normalized dir. for a directional light
    lowp vec4    ambient_color;
    lowp vec4    diffuse_color; …
Run Code Online (Sandbox Code Playgroud)

android gpu opengl-es

5
推荐指数
1
解决办法
3609
查看次数

标签 统计

android ×1

gpu ×1

opengl-es ×1