首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Minko:如何在3d加载的模型上应用材质(纹理)

Minko:如何在3d加载的模型上应用材质(纹理)
EN

Stack Overflow用户
提问于 2016-03-09 00:17:39
回答 2查看 143关注 0票数 0

我有一个fbx模型,我加载在引擎中,但当我尝试以编程方式在此模型上应用纹理时,它不起作用,但它在像立方体这样的原始对象上起作用。

这就是我要做的

代码语言:javascript
复制
 auto fileLoaderComplete = sceneManager->assets()->loader()->complete()->connect([&](file::Loader::Ptr loader)

{


            auto chair = sceneManager->assets()->symbol(FBX_MODEL_FILENAME);


            //chair->addComponent(Transform::create());

            auto chairMaterial = material::BasicMaterial::create();

            chairMaterial->diffuseMap(sceneManager->assets()->texture(TEXTURE_FILENAME));


            chair->addComponent(Surface::create(

                 geometry::QuadGeometry::create(sceneManager->assets()->context()),                                                                                                                      
                 chairMaterial,                                                                                                                      
                 sceneManager->assets()->effect("effect/Basic.effect")

            ));



            chair->component<Transform>()->matrix(chair->component<Transform>()->matrix() * math::scale(math::vec3(0.005f)));

            // Add the symbol to the scene

            root->addChild(chair);

            }); 

但是没有任何纹理应用到模型上。如何让它正常工作?

EN

回答 2

Stack Overflow用户

发布于 2016-03-09 01:27:51

我不知道您真正想要实现的是什么,但是这段代码向您的椅子模型的根节点添加了一个带有纹理的四边形。如果启用了三角形剔除,并且你的相机没有面对这个四边形,你看不到任何变化是正常的。

您需要做的是检索包含要设置纹理的曲面的节点并更新其材质。

它应该看起来像这样:

代码语言:javascript
复制
auto fileLoaderComplete = sceneManager->assets()->loader()->complete()->connect([&](file::Loader::Ptr loader)
{
    auto chair = sceneManager->assets()->symbol(FBX_MODEL_FILENAME);
    auto texture = sceneManager->assets()->texture(TEXTURE_FILENAME);

    auto surfaceNodeSet = scene::NodeSet::create(chair)
        ->descendants(true)
        ->where([](scene::Node::Ptr n)
    {
        return n->hasComponent<Surface>();
    });

    for (auto surfaceNode : surfaceNodeSet->nodes())
    {
        auto surface = surfaceNode->component<Surface>();
        surface->material()->data()->set("diffuseMap", texture->sampler());
    }

    chair->component<Transform>()->matrix(chair->component<Transform>()->matrix() * math::scale(math::vec3(0.005f)));

    // Add the symbol to the scene
    root->addChild(chair);
});
票数 0
EN

Stack Overflow用户

发布于 2016-03-12 11:32:19

感谢你的帮助https://stackoverflow.com/a/35874003/3278271

我弄明白了为什么在这种情况下,即使使用surfaceNode>component()->material(),纹理仍然不起作用。原因是我的fbx模型不包含UV贴图。

所以现在的问题是如何以编程方式定义UV?

在Unity中,你可以像这样做http://forum.unity3d.com/threads/programmatically-generate-uv-map.26095/

但是如何在Minko中做到这一点?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35872481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档