2011-11-01 3 views
2

js lib에서 도움을 받아, 더 작은 직육면체를 내부에 포함하는 직육면체 컨테이너를 만들려고합니다.pre3d를 사용하여 중첩 된 큐 보이드

이제 제대로 이해하지 못하는 것은 내부 직육면체를 미리 정의 된 좌표에 배치하는 방법입니다. transform2.translate에 대한 일반 공식은 무엇입니까? 이 수식은 내가 안에 넣고 싶은 모든 직육면체에 적용됩니다.

다음은 지금까지 내가 한 것입니다. 이 두 파일을 demos 디렉토리에 넣으면 즉시 작동해야합니다.

// experiment.js 
window.addEventListener('load', function() { 

    var screen_canvas = document.getElementById('canvas'); 
    var renderer = new Pre3d.Renderer(screen_canvas); 

    var transform1 = new Pre3d.Transform(); 
    transform1.translate(-0.5, -0.5, -0.5); 

    var transform2 = new Pre3d.Transform(); 
// **** This is where i need your help ****// 
    transform2.translate(10 - 10/2, 10 - 10/2 - 2, 10 - 10/2); 
// **** **** **** ****// 
    var cubes = [ 
    { //container 
    shape: Pre3d.ShapeUtils.makeBox(10, 10, 10), 
    color: new Pre3d.RGBA(9/10, 9/10, 9/10, 0.3), 
    trans: transform1 
    }, 
    { //axis 
    shape: Pre3d.ShapeUtils.makeBox(10, 0.01, 0.01), 
    color: new Pre3d.RGBA(0, 0, 0, 0.3), 
    trans: transform1 
    }, 
    {//axis 
    shape: Pre3d.ShapeUtils.makeBox(0.01, 10, 0.01), 
    color: new Pre3d.RGBA(0, 0, 0, 0.3), 
    trans: transform1 
    }, 
    {//axis 
    shape: Pre3d.ShapeUtils.makeBox(0.01, 0.01, 10), 
    color: new Pre3d.RGBA(0, 0, 0, 0.3), 
    trans: transform1 
    }, 
    { 
    shape: Pre3d.ShapeUtils.makeBox(10.0, 2, 2), 
    color: new Pre3d.RGBA(1.2, 0, 0, 0.3), 
    trans: transform2 
    } 
]; 


    var num_cubes = cubes.length; 
    var cur_white = false; // Default to black background. 

    function draw() { 

    for (var i = 0; i < num_cubes; ++i) { 
     cube = cubes[i]; 
     renderer.fill_rgba = cube.color; 
     renderer.transform = cube.trans; 
     renderer.bufferShape(cube.shape); 
    } 
    renderer.ctx.setFillColor(1, 1, 1, 1); 
    renderer.drawBackground(); 

    renderer.drawBuffer(); 
    renderer.emptyBuffer(); 
    } 

    renderer.camera.focal_length = 1.5; 

    DemoUtils.autoCamera(renderer, 0, 0, -30, 0, 0, 0, draw); 


    draw(); 
}, false); 

샘플 HTML은 간다 :

// experiment.html 
<html>  
<head>  
<title>experiment Front end</title>  
<style> 
    body * { 
    font-family: sans-serif; 
    font-size: 14px; 
    } 
    body.white { 
    background-color: white; 
    color: black; 
    } 
    body.black { 
    background-color: black; 
    color: white; 
    } 
    span.spaceyspan { margin-right: 20px; } 
    div.centeredDiv { text-align: center; } 
    li { list-style: none; } 
    td { padding-right: 10px; } 
</style> 

<script src="../pre3d.js"></script> 
<script src="../pre3d_shape_utils.js"></script> 
<script src="demo_utils.js"></script> 
<script src="experiment.js"></script> 
</head> 

<body> 

<div class="centeredDiv"> 
<canvas id="canvas" width="800" height="600"> 
    Sorry, this demo requires a web browser which supports HTML5 canvas! 
</canvas> 
</div> 


</body> 
</html> 

답변

0

이 일을하기 위해 동심 구속 조건을 사용합니다. 동심원 구속 조건은 두 개의 동심 기하학 구조를 서로에 대해 동심원으로 만듭니다. 다음은 프로세스입니다

  • 하면 외부 큐브
  • 장소 같은 지점에서 내부 큐브의 중심점
  • 반복

참고 문헌의 중심점을 찾기

관련 문제