作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数可以从数据集中获取轨道参数和纹理图像并创建一个 3d 对象(一个行星)。但是由于某种原因,纹理没有被渲染。使用 BasicMaterial 它可以正常工作,但不能使用 StandardMaterial 或 PhongMaterial。 (场景中有一个点光源),我已经测试了循环外的纹理和功能,它们工作得很好。我不知道还能做什么。
我把代码放在这里。
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
函数只是用给定的 Material 创建一个网格。喜欢:
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。
关于javascript - Three.js 没有从我的星球构造函数中渲染我的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65598027/
我正在使用 D3.js 沿着旋转行星的示例代码做一些事情: http://rveciana.github.io/geoexamples/?page=d3js/d3js_svgcanvas/rotati
我是一名优秀的程序员,十分优秀!