0
在我的场景中,我有2个网格属性。其中一个是创建的,另一个是stl
文件。当我加载页面时,只有我创建的网格可见。 stl
文件中的下一个文件根本没有显示。stl文件加载的预加载方法
据我所知,加载文件和渲染mesh
需要时间。为了解决这个问题,我添加了一个setTimeout
函数。它运作良好。
但在加载全部mesh
之后调用renderer
函数的正确方法是什么?
例如:在jQuery中我使用$when().done()
- 如何在这里处理?
我的代码:
$(function() {
var scene, camera, renderer;
var init = function() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera (45, window.innerWidth/window.innerHeight, 0.1, 1000);
renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0xEEEEEE);
var axes = new THREE.AxisHelper(20);
scene.add(axes);
var cubeGeometry = new THREE.BoxGeometry(4, 4, 4)
var cubeMaterial = new THREE.MeshBasicMaterial({color: 0xff0000});
var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
cube.position.x = -4;
cube.position.y = 3;
cube.position.z = 0;
scene.add(cube);
camera.position.x = -30;
camera.position.y = 40;
camera.position.z = 30;
camera.lookAt(scene.position);
var loader = new THREE.STLLoader();
loader.load('stl/model.stl', function (geometry) {
var material = new THREE.MeshPhongMaterial({ color: 0xffffff });
var mesh = new THREE.Mesh(geometry, material);
mesh.position.set(0, - 0.25, 0.6);
mesh.rotation.set(0, - Math.PI/2, 0);
mesh.scale.set(0.5, 0.5, 0.5);
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add(mesh);
});
setTimeout(function() {
$('#webGL').append(renderer.domElement);
renderer.render(scene, camera)
}, 100)
}
function render() {
}
init();
})
作为aditional的问题,我使用HTTP''创建文件stl':// www.123dapp.com/design'我创建后,当'load'使用'STLLoader'不会出现任何内容。但我得到的对象安慰。你有什么想法提出这个? – 3gwebtrain
如果你使用上面的代码,我没有看到那里的灯。添加一个:'''scene.add(new THREE.AmbientLight(0xAAAAAA));''。如果这不能帮助它更好地解决这个新问题的新问题。 –
当然让我试试。我问的原因是,我正在创建一个正确显示,另一个'加载'没有显示。 – 3gwebtrain