Three.js没有从我的行星构造函数中渲染我的纹理



我有一个函数,它从数据集中获取轨道参数和纹理图像,并创建一个三维对象(行星(。但是,由于某些原因,没有渲染纹理。使用BasicMaterial可以正常工作,但不使用StandardMaterialhongMaterial。(场景中有一个点光源(,我已经测试了循环和函数之外的纹理,它们工作得很好。我不知道还能做什么。我把密码给你了。

for(var i=0;i < results.data.length; i++){

const EC = Number(results.data[i]["Eccentricity"]); //Eccentricity
const IN = Number(results.data[i]["Inclination [Rad]"]) ; //Inclination
const OM = Number(results.data[i]["Orbit Rotation_Y [Rad]"]) ; //Longitude of ascending node
const W = Number(results.data[i]["Orbit Rotation_X [Rad]"]); //Argument of periapsis
const A = Number(results.data[i]["Orbit semi-major axis [UA]"]); //Semi-major axis
const EcRadius = Number(results.data[i]["Relative Equatorial Radius"]); //Radius
const NAM = results.data[i]["Name"]; //Name
const textureUrl = results.data[i]["TextureFileUrl"]; //Texture image of the planet
const loader = new THREE.TextureLoader();
loader.load(textureUrl, function ( texture ) {
// Create the material when the texture is loaded
var tex = texture.clone();
const PlanetMaterial = new THREE.MeshBasicMaterial( {
map: tex
} );
scene.add(CreatePlanet( 0,0,0, EC,IN,OM,W,A,EcRadius, NAM, 0x4E4E4E, 0.5, PlanetMaterial ));
},
undefined,
function ( err ) {
console.error( 'An error happened.');
}
);
} 

CreatePlanet函数只是使用给定的材质创建一个网格。类似:

const geometryPlanet = new THREE.SphereBufferGeometry(EcRadius, 300, 300);
const Planet = new THREE.Mesh(geometryPlanet, PlanetMaterial);
return Planet;

事先谢谢你的帮助。

var tex=texture.clone((;

执行此操作时,能否添加以下行?

tex.needsUpdate = true;

在这种情况下,这是必需的,否则纹理的内容将永远不会上传到GPU。

最新更新