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