2016-05-04 35 views
1

嘿,如果有人可以請幫我動畫這個對象:在three.js中無法獲得搖擺(動畫)的尾巴?

上下移動| 左右旋轉| a查找| Z到往下看

鏈接到一部開拓創新的文件:http://www.aacctrust.org/anim/anim.htm

JSON模型文件(動畫尾WAG):

http://wikisend.com/download/654748/wolf.json

問題是JSON模型文件已經具備有關尾巴動畫的必要細節。狼的尾巴是想搖擺。 但它並沒有,我已經嘗試了一切,但沒有任何幫助。

代碼中出現錯誤,或者我沒有正確導出frm Blender。

下面是代碼:

<html> 

<head> 
    <style> 
     body { margin: 0; } 
    </style> 
</head> 

<body> 
<canvas id="myCanvas"></canvas> 


    <script src="three.js"></script> 

    <script> 

    var scene = new THREE.Scene(); 
    var canvas = document.getElementById("myCanvas"); 
    renderer = new THREE.WebGLRenderer({ canvas: canvas }); 
    var camera = new THREE.PerspectiveCamera(75, (canvas.width/canvas.height) , 1, 10000); 
    var clock = new THREE.Clock(),mixer; 
    var forest,wolf,animation;    
    var fwd,bck,lft,rgt,up,down = 0 ; 
    var action = {}; 

    camera.fov *= 0.3; 
    camera.updateProjectionMatrix();    

    renderer.setSize(window.innerWidth, window.innerHeight); 
    document.body.appendChild(renderer.domElement); 
    renderer.setClearColor (0x22222222, 1); 

    camera.position.z = 28; 

    var material = new THREE.MeshPhongMaterial({ map:  THREE.ImageUtils.loadTexture('wolf_uvcons.png') }); 
    // Wolf Texture Above # Forest Uses Local Materials @Blender 

    var loader = new THREE.JSONLoader(); 

    loader.load('forest.json', function(geometry, materials) { 
       forest = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials)); 
       forest.scale.x = forest.scale.y = forest.scale.z = 0.25; 
       forest.rotateX(Math.PI/2);forest.rotateZ(Math.PI );   //load :env: 
       forest.translation = THREE.GeometryUtils.center(geometry); 
       scene.add(forest); 
     }); 




    loader.load('wolf.json', function(geometry, materials) { 
     wolf = new THREE.SkinnedMesh(geometry,material); 
     wolf.scale.x = wolf.scale.y = wolf.scale.z = 0.25;     //load wolf 
     wolf.translation = THREE.GeometryUtils.center(geometry); 
     scene.add(wolf); 
     wolf.add(camera); 
     wolf.translateY(-27); /// Bring it down 
     wolf.translateZ(100); /// Bring it down 

     action.idle = new THREE.AnimationAction(geometry.animations[ 0 ]);   
     action.idle.weight = 1; 

    // Create animation mixer and pass object to it 
     mixer = new THREE.AnimationMixer(wolf); 
     mixer.addAction(action.idle); 

     }); 


    var light = new THREE.AmbientLight(0xFFFFFFFF,1); 
    scene.add(light); 
    var pointLight = new THREE.PointLight(0xffcccc,0.41); 
    pointLight.position.set(0, 100, 3); 
    scene.add(pointLight); 
    var pointLight1 = new THREE.PointLight(0xff0000,0.81); 
    pointLight1.position.set(100, 200, 3); 
    scene.add(pointLight1); 

    function moveWolf() 
    { 

     if (fwd==1) 
     { wolf.translateZ(-1);} 
     if (bck==1) 
     { wolf.translateZ(1);} 
     if (lft==1) 
     { wolf.rotateY(Math.PI/200)} 
     if (rgt==1) 
     { wolf.rotateY(-Math.PI/200);} 
     if (up==1) 
     { camera.rotateX(Math.PI/200);} 
     if (down==1) 
     { camera.rotateX(-Math.PI/200);} 

     } 

    function animate() { 

    requestAnimationFrame(animate); 
    moveWolf(); 
    render(); 

    var delta = clock.getDelta(); 
    var theta = clock.getElapsedTime(); 

    if (mixer) { mixer.update(delta); } 
} 

function render() { 
    renderer.render(scene, camera); 
    } 

    animate(); 
</script> 

<script> 
document.onkeydown = checkKey1; 
document.onkeyup = checkKey2; 

function checkKey1(e) { 

e = e || window.event; 

if (e.keyCode == '38') { 
    // up arrow 
    fwd=1; 
} 
else if (e.keyCode == '40') { 
    // down arrow 
    bck=1; 
} 
else if (e.keyCode == '37') { 
    // left arrow 
    lft=1; 
} 
else if (e.keyCode == '39') { 
    // right arrow 
    rgt=1; 
} 
else if (e.keyCode == '65') { 
    up=1; 
} 
else if (e.keyCode == '90') { 
    down=1; 
} 
} 


function checkKey2(e) { 

e = e || window.event; 

if (e.keyCode == '38') { 
    // up arrow 
    fwd=0; 
} 
else if (e.keyCode == '40') { 
    // down arrow 
    bck=0; 
} 
else if (e.keyCode == '37') { 
    // left arrow 
    lft=0; 
} 
else if (e.keyCode == '39') { 
    // right arrow 
    rgt=0; 
} 
else if (e.keyCode == '65') { 
    // right arrow 
    up=0; 
} 
else if (e.keyCode == '90') { 
    // right arrow 
    down=0; 
} 

} 
</script> 

</body> 
</html> 

回答

1

UPDATE:

在等待我在自我探索之旅去回覆的過程;)

而且發現了一個幾乎可以接受的解決方案,步驟如下:

  1. 文件>>導出>> Wavefront(OBJ)

  2. 確保將動畫作爲選項進行檢查。

  3. 單擊導出(而出口PLZ做一個單獨的文件夾,因爲沒有文件可以根據幀的數量很大。)

  4. 複製在攪拌機的文件夾>的Python> Bin目錄。

  5. 將轉換器從three.js utils OBJ for python3複製到Blender> Python> Bin目錄。在管理員模式下

  6. 啓動命令提示符,運行以下命令:

蟒蛇objtothreejs_conv_python3 -i meshdirname \ meshname_000001.obj -o output.js -m 「meshdirname \ meshname _ * OBJ」

輸出動畫將是變形動畫,並且需要在混音器中對MorphAnim進行一些更改。