我是3D技术的新手,通过引用我已经设法运行一些代码来渲染3D对象。该对象由3D Software Maya生成。我收到这些文件 - .obj(目标文件) .mtl(材料文件) .png(纹理文件)。
使用'three.js'我尝试在浏览器中渲染对象,为此我使用了以下给出的三种方法 - 1. OBJLoader并显式加载纹理文件。 2. OBJMTLLoader 3.通过将.obj文件转换为.js的JSON加载程序。 在所有情况下,3D对象都成功渲染,但我遇到的常见问题是它根本没有加载它的“纹理”。对象文件,材质文件和纹理文件都在同一位置。据观察,阴影应用于对象,因此我可以看到一些部分色彩鲜艳但“纹理”部分(png文件)未应用于对象,因此部分看起来是黑色和黑色。没有错误,因为浏览器没有显示任何错误。
使用JSON加载程序的代码段 -
var oLoader = new THREE.JSONLoader();
oLoader.load('Main_unit_01.js', function (geometry, materials) {
// get original materials
var material = new THREE.MeshFaceMaterial(materials);
//var material = new THREE.MeshPhongMaterial();
//material.map = new THREE.ImageUtils.loadTexture(
// "final_texture_v01.png");
var mesh = new THREE.Mesh(geometry, material);
mesh.scale.set(10, 10, 10);
Test.scene.add(mesh);
OBJMTL加载器需要材质文件,使用这种方法可以看出它加载了对象和材质文件而不是纹理,这里是MTL文件中存在的一小部分信息 -
newmtl phongE1SG
illum 4
Kd 0.00 0.00 0.00
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
map_Kd final_texture_v01.png
Ni 1.00
Ks 0.50 0.50 0.50
以下是.js文件中存在的信息的一部分,它是.obj到.js转换的结果 -
"DbgColor" : 238,
"DbgIndex" : 3,
"DbgName" : "phongE1SG",
"colorAmbient" : [0.0, 0.0, 0.0],
"colorDiffuse" : [0.0, 0.0, 0.0],
"colorSpecular" : [0.5, 0.5, 0.5],
"illumination" : 4,
"mapDiffuse" : "final_texture_v01.png",
"opticalDensity" : 1.0
在上面的材料和js文件中,我们可以看到'.png'文件已经被提到了一些标签。在阅读了一些博客上给出的一些建议后,我试图明确地设置这些文件的相对路径,但没有成功。我在这里检查了大部分博客并应用了大部分建议,但它没有成功。我也检查了" github.com"寻求帮助但无法得到任何帮助。浏览器都没有给出任何错误,例如找不到特定文件。 以下是我遵循的几个链接。 1. three.js JSONLoader Material Not Showing 2. Loading textures with JSONloader
我无法发布超过2个链接,但我已经关注了很多网站。
请建议是否有任何解决方案来获取对象上的纹理。
答案 0 :(得分:0)
MTL文件Kd
属性对应于js属性colorDiffuse
。 Ka
属性为colorAmbient
。正如你所看到的那样,它们都是0.这就是你无法看到模型的原因。尝试制作环境项(0.2,0.2,0.2)和扩散项(0.8,0.0,0.8)。