2014-12-10 2 views
0

같은 방법으로 같은 속도로 회전해야하는 두 개의 상자를 만들어야하며 위치는 달라야합니다. 그들이 다르게 회전 할 수있게 그 잘못은 무엇처리 : 두 개의 3D 상자 만들기 및 회전

float rotatevalue; 
void setup() 
{ 
    rotatevalue = 0; 
    size(500, 500, OPENGL); 
    if (frame != null) { 
    frame.setResizable(true); 
    } 
} 

void draw() 
{ 
    background(245, 238, 184); 
    fill(246, 225, 65); 
    rotatevalue = rotatevalue + 2; 
    pushMatrix(); 
    translate(width/4, height/4); 
    rotateX(radians(rotatevalue)); 
    rotateY(radians(rotatevalue)); 
    box(50); 
    popMatrix(); 

    pushMatrix(); 
    translate(3*width/4, height/4); 
    rotateX(radians(rotatevalue)); 
    rotateY(radians(rotatevalue)); 
    box(50); 
    popMatrix(); 
} 

: 나는 다음과 같은 코드를 사용했다

http://i.stack.imgur.com/JMua9.png

: 내가 가진 모든이 무엇입니까?

+0

나는 질문을 이해하고 있는지 모르겠다. 두 상자가 같은 방식으로 회전하고있는 것처럼 보입니다. 그것을 증명하기 위해 서로의 위에 상자를 놓으십시오. –

+0

OpenGL의 관점과 그들 사이의 큰 거리 때문에 당신은 단지 착시 현상을 경험하고 있습니다 :) – Majlik

+0

착시 현상이 아닌 스크린 샷 사람을보십시오. 나는 cinemizer 안경을 가지고 일하고 있는데, 둘 사이의 그림을 보면서 "병합"하고 다른 움직임을 봅니다. – Tauboga

답변

0

OpenGL 매트릭스 스택을 사용하는 데 익숙하지 않아 조금 벗어날 수 있습니다. 내 자신의 모델 행렬을 계산하여 정점 셰이더에 전달합니다. 제가 이것을 할 때, 저는 번역하기 전에 먼저 회전을합니다.

0

2D 스케치 안에 3D 오브젝트를 그리려면 눈이 실제 세계를 투영하는 것과 같은 유형의 투영법을 사용해야합니다. 자세한 내용은 perspectiveprojection에 대해 자세히 알아보십시오.

상자가 같은 방식으로 회전합니다. 나는이 기본 예제에서 그것을 보여주기 위해 노력할 것이다. 여기서 스케치 중간에 5 상자를 볼 수 있습니다 :

void setup(){ 
    size(500, 500, OPENGL); 
    fill(246, 225, 65); 
    //ortho(); 
} 

void draw(){ 
    background(245, 238, 184); 
    translate(width/2, height/2);  

    draw_box(0); 
    draw_box(1); 
    draw_box(2); 
    draw_box(3); 
    draw_box(4); 
} 

void draw_box(int pos){ 
    pushMatrix();  
    switch(pos){ 
     case 0: translate( 0, 0); break; 
     case 1: translate( 0,-100); break; 
     case 2: translate( 0, 100); break; 
     case 3: translate(100, 0); break; 
     case 4: translate(-100, 0); break; 
    }     
    box(50); 
    popMatrix(); 
} 

회전이 없으므로 동일해야합니다. 아니! 그것은 철도 트랙과 같습니다 = 그들은 평행하지만 장거리에서는 (img)

자세한 내용은 유사한 상자를 얻기 위해 정사영 투영을 시도하십시오 ortho을 참조하십시오. 더 나은 결과를 얻으려면 더 중심적이어야합니다.