【问题标题】:three.js JSONLoader Material Not Showing三.js JSONLoader 材质不显示
【发布时间】:2014-03-01 05:57:31
【问题描述】:

我正在尝试从 Maya 导入一个对象,这是 json 文件

{

    "metadata" :
    {
        "formatVersion" : 3.1,
        "sourceFile"    : "myobj.obj",
        "generatedBy"   : "OBJConverter",
        "vertices"      : 22470,
        "faces"         : 42837,
        "normals"       : 128511,
        "colors"        : 0,
        "uvs"           : 52126,
        "materials"     : 1
    },

    "scale" : 1.000000,

    "materials": [  {
        "DbgColor" : 15658734,
        "DbgIndex" : 0,
        "DbgName" : "lambert2SG",
        "colorAmbient" : [0.0, 0.0, 0.0],
        "colorDiffuse" : [0.0, 0.0, 0.0],
        "illumination" : 4,
        "mapDiffuse" : "mytexture.tga",
        "opticalDensity" : 1.0
    }],
    "vertices": [...] //Omitted because there are too many
    "morphTargets": [],
    "morphColors": [],
    "normals": [...],
    "colors": [],
    "uvs": [...],
    "faces": [...]
}

这是我加载 JSON 文件的方式:

这是我如何初始化场景并加载 json 文件。我有一个很大的远点,因为物体很大:

        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 100000);
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        var controls = new THREE.OrbitControls(camera);
        document.body.appendChild(renderer.domElement);

        var jsonLoader = new THREE.JSONLoader();
        var mesh;
        var render = function () {
            stats.update();
            controls.update();
            requestAnimationFrame(render);
            renderer.render(scene, camera);
        }
        jsonLoader.load("Mesh/myobj.js", function(geometry, materials){
            console.log(materials); // This prints an array, whose first element is a MeshLambertMaterial.
            mesh = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial( materials )); 
            // If I remove the second parameter, 
            //the object renders correctly without texture. 
            //Otherwise the screen shows nothing.
            console.log(geometry);
            scene.add(mesh);
        });
        render();
        camera.position.y = 10000;

对不起,如果我做了一些愚蠢的事情。我是three.js的新手。 如果我将纹理应用于对象,屏幕将不显示任何内容。我已经尝试了我能找到的一切。请帮忙!

【问题讨论】:

  • 试试new THREE.MeshFaceMaterial( materials )
  • @WestLangley 那没用。对不起:(
  • three.js 不支持 .tga 文件。将文件转换为 .png。
  • @WestLangley 我刚试过。没有。但我发现,如果它们附有材料,甚至是基本的蓝色立方体,它们都不会出现。可能我错过了一些东西。我正在用更多代码更新帖子。
  • 我想我已经找到了问题(经过 6 小时的反复试验)。出于某种原因,我不能直接从 JSONLoader 应用材料。我必须使用 ImageUtils 从文件中手动加载纹理。 :(

标签: json three.js


【解决方案1】:

您是否已将相机正确添加到场景中? scene.add(camera);

【讨论】:

猜你喜欢
  • 2015-09-01
  • 1970-01-01
  • 2014-08-06
  • 2012-08-13
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多