0
我有一個從three.js/editor導出的基本json場景。我想添加一個重複的紋理包裝到這個場景中的一個對象,但我不知道該怎麼做,因爲我發現的唯一例子是在創建對象時添加了包裝。Three.js將重複紋理應用於JSON場景對象
我已經嘗試訪問紋理並給它一個換行,但我想我可能需要從JavaScript添加紋理到對象,然後聲明紋理換行而不是嘗試將其添加到已加載的紋理。
<script>
var camera, scene, renderer;
var mesh;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera(70, window.innerWidth/window.innerHeight, 1, 1000);
camera.position.z = 400;
scene = new THREE.Scene();
var objectLoader = new THREE.ObjectLoader();
objectLoader.load("models/cube.json", function (obj) {
scene.add(obj)
obj.traverse(function(child) {
if (child instanceof THREE.Mesh) {
child.castShadow = true;
child.receiveShadow = true;
}
});
obj.name = "cube";
obj.position.set(0,0,0);
obj.scale.set(200,200,200);
});
renderer = new THREE.WebGLRenderer();
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
//
window.addEventListener('resize', onWindowResize, false);
while (scene.getObjectByName('Box 1')){
var texture = scene.getObjectByName('Box 1').material;
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set(2, 2);
}
}
function onWindowResize() {
camera.aspect = window.innerWidth/window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
}
function animate() {
requestAnimationFrame(animate);
if (scene.getObjectByName('Box 1') ){
scene.getObjectByName('Box 1').material.map.offset.x += 0.001;
}
renderer.render(scene, camera);
}
</script>
謝謝。這工作。我想我已經打了幾次這段代碼,但我的問題是沒有在加載回調中調用它,因爲場景創建只被調用一次。它跳過了我的if語句,因爲場景沒有加載,然後跳到動畫函數中,所以我的代碼甚至沒有被觸摸。 – electronduck