0

我正在与 minko 合作,并且似乎在使用 Android 时遇到了一个小问题。我设法为 linux64、Android 和 html 编译了修改后的代码(基于 Minko 提供的教程)。我只需加载和旋转 4 个 .obj 文件(提供的海盗文件和在 turbosquid 上找到的 3 个文件仅用于演示目的)。

在 linux64 和 html 版本中查看了正确的结果,但在 Android 版本中,尽管二进制文件是从相同的 c++ 代码生成的,但它却有一个“红色”的光。

这里有一些图片来证明这个问题:

linux64:

http://tinypic.com/r/qzm2s5/8

安卓版本:

http://tinypic.com/r/23mn0p3/8

(无法链接 html 版本,但它接近 linux64 版本。)

以下是与灯光相关的部分代码:

        // create the spot light node
    auto spotLightNode = scene::Node::create("spotLight");

    // change the spot light position
    //spotLightNode->addComponent(Transform::create(Matrix4x4::create()->lookAt(Vector3::zero(), Vector3::create(0.1f, 2.f, 0.f)))); //ok linux - html
    spotLightNode->addComponent(Transform::create(Matrix4x4::create()->lookAt(Vector3::zero(), Vector3::create(0.1f, 8.f, 0.f))));

    // create the point light component
    auto spotLight = SpotLight::create(.15f, .4f);    //ok linux and html

    // update the spot light component attributes
    spotLight->diffuse(4.5f);   //ori - ok linux - html

    // add the component to the spot light node
    spotLightNode->addComponent(spotLight);

    //sets a red color to our spot light
    //spotLightNode->component<SpotLight>()->color()->setTo(2.0f, 1.0f, 1.0f); 

    // add the node to the root of the scene graph
    rootNode->addChild(spotLightNode);

正如您所看到的,color()->setTo它已被关闭并适用于除 Android 之外的所有设备(清理和重建)。知道这里问题的根源是什么吗?

任何指针将不胜感激。

谢谢。

4

1 回答 1

0

您能否在其他 Android 设备或更新的 ROM 上对其进行测试并给我们结果?LG-D855 (LG G3) 由 Adreno 330 提供支持:已知这些 GPU 具有 GLSL 编译效果,尤其是像我们在主分支上的 Phong.fragment.glsl 中使用的循环和/或结构。

dev 分支上的Phong.fragment.glsl已被大量重构以解决此问题(目前仅适用于定向光)。

您可以尝试开发分支和定向灯,看看它是否解决了问题。不过要小心:dev 分支引入了 beta 3,并进行了一些 API 更改。最大的 API 变化是现在使用 GLM 的数学 API,以及 *.effect 文件格式。最好的方法是简单地更新您的数学代码以使用新的 API,其他一切都应该直截了当。

于 2015-04-06T08:45:40.683 回答