2013-02-27 4 views
0

Я просто наткнулся на Three.js, и мне это очень понравилось. Я новичок в JavaScript, но я хотел бы узнать больше об анимации и т. Д.Three.js как применить текстуру как материал

// UPDATE У меня есть этот код, но он ничего не делает. Если я попытаюсь сделать это без специальной текстуры, то он отобразит куб. Таким образом, все в настоящее время работает, кроме текстуры.

var camera, scene, renderer; 
var mouseX = 0, mouseY = 0; 

var windowHalfX = window.innerWidth/2; 
var windowHalfY = window.innerHeight/2; 

init(); 
animate(); 

function init() { 
    camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 1, 10000); 
    camera.position.z = 500; 

    scene = new THREE.Scene(); 

    container = document.createElement('div'); 
    document.body.appendChild(container); 

    var cubeTexture = new THREE.texture(); 
    var loader = new THREE.ImageLoader(); 

    loader.addEventListener("load", function(event) { 
     cubeTexture.image = event.content; 
     cubeTexture.needsUpdate = true; 
    }); 

    loader.load("crate.gif"); 

    var geometry = new THREE.CubeGeometry(300, 300, 300); 
    var material = new THREE.MeshBasicMaterial({ map: cubeTexture, overdraw: true }); 

    renderer = new THREE.CanvasRenderer(); 
    renderer.setSize(window.innerWidth, window.innerHeight); 

    var cube = new THREE.Mesh(geometry, material); 
    scene.add(cube); 
    container.appendChild(renderer.domElement); 

    document.addEventListener('mousemove', onDocumentMouseMove, false); 

} 

function onDocumentMouseMove(event) { 

    mouseX = (event.clientX - windowHalfX); 
    mouseY = (event.clientY - windowHalfY); 

} 

function animate() { 

    requestAnimationFrame(animate); 

    render(); 

} 

function render() { 
    camera.position.x += (mouseX - camera.position.x) * 0.05; 
    camera.position.y += (- mouseY - camera.position.y) * 0.05; 
    camera.lookAt(scene.position); 

    renderer.render(scene, camera); 
} 

Любая помощь была бы принята с благодарностью!

ответ

2

Вы должны были видеть свою ошибку в Консоли.

var cubeTexture = new THREE.Texture(); 

Бесплатный совет: сделать это

var geometry = new THREE.CubeGeometry(300, 300, 300, 4, 4, 4); 

иначе, с CanvasRenderer вы получите много искажений.

+0

Oh my , Спасибо большое! Сейчас почти отлично работает. Знаете ли вы, есть ли способ «ограничить», насколько движется камера? Я бы хотел, чтобы эффект был более тонким, если это возможно. Так что камера движется немного. Я попытался опустить переменные camera.position.x/.y в функции рендеринга, но это только замедляет движение вниз. – Andreas

+1

Вы должны принять этот ответ, нажав на галочку, а затем, если у вас есть дополнительные проблемы, отправьте новый вопрос. Но сначала приложите некоторые серьезные усилия, чтобы попытаться понять это сами. :-) – WestLangley

+0

Ну, я попробовал. Но, увидев, что единственное, что я когда-либо делал в JavaScript, - это проверка формы и отсутствие документации для Three.js, иногда это может быть довольно сложно. В любом случае, ответ теперь принят, извините за то, что он не сделал это немедленно. – Andreas

0

Итак, если я правильно понимаю, вы хотите, чтобы изображение растягивалось и двигалось вместе с мышью? Почему бы не использовать javascript для этого? Вы можете легко считывать позиции y & x и затем динамически изменять положение изображения. Исправьте меня, если я ошибаюсь, но если это то, что вы хотите, я рекомендую использовать javascript.

С уважением, Harmen Brinkman.

+0

Я не хочу, чтобы изображение действительно перемещалось. Если вы перейдете на этот сайт http://mrdoob.com/ с браузером, поддерживающим WebGL, и переместите мышь вверх и вниз, влево и вправо. Это то, что я хочу сделать, но только с одним изображением. Существует также аналогичный пример в примерах Three.js, http://mrdoob.github.com/three.js/examples/canvas_particles_waves.html Я просто не знаю, где и с чего начать:/ – Andreas

Смежные вопросы