2012-04-04 2 views
0

OpenGL에서 직사각형을 회전시킬 수있었습니다 (C++). 나는 "분리 된 축 정리"를 사용하여 충돌을 위해 두 개의 직사각형을 테스트하는 프로그램을 만들고 있습니다. 정리를 사용하려면 사각형 모퉁이의 x 및 y 좌표가 필요하지만 문제는 해당 좌표를 glRotatef(...)이라고 부르지 만 직사각형 모퉁이의 좌표는 회전 된 값으로 변경되지 않습니다. 사각형은 반드시 회전해야합니다. glRotatef가 호출 된 후 어떻게 내 사각형의 좌표를 업데이트 할 수 있습니까?좌표 위치를 업데이트하지 않습니까?

코드 :

// float r1.x[4] and r1.y[4] hold the x and y position of each of the 4 corners, starting with the upper left (r1.x[0], r1.y[0]) 
    glLoadIdentity(); 
    glTranslatef((r1.x[0] + r1.x[2])/2, (r1.y[1] + r1.y[3])/2, 0); // Translates matrix to center of rectangle 
    glRotatef(r1.angle, 0, 0, 1); 
    glTranslatef(-((r1.x[0] + r1.x[2])/2), -((r1.y[1] + r1.y[3])/2), 0); // Translates back 
    r1.angle++; 

    glBegin(GL_QUADS); 
     glVertex2f(r1.x[0], r1.y[0]); 
     glVertex2f(r1.x[1], r1.y[1]); 
     glVertex2f(r1.x[2], r1.y[2]); 
     glVertex2f(r1.x[3], r1.y[3]); 
    glEnd(); 

답변

2

변환은 (glTranslatefglRotatef 등)는 OpenGL에서 호출하면 화면에 그려진하기 전에 제공하는 점을 곱한 얻을 내부 변환 행렬을 업데이트합니다. OpenGL은 전혀 데이터에 접근하지 않습니다.

일반적으로 그게 당신이 원하는 것입니다. 시간이 일정한 모델을 가지고 있지만 변형 된 모델입니다.

, 당신은 당신의 데이터를 업데이트해야합니까 그러나 경우에, 당신은 수동으로, 자신 만의 변환 행렬을 만들 곱 다음 (glLoadIdentity로) 깨끗한 변환 행렬로 그릴 필요

당신은 조금 얻을 수 그래도 OpenGL에서 변형 행렬을 얻을 수 있기 때문에 OpenGL에서 도움을 받지만 권장하지 않습니다. 수학은 그다지 어렵지 않고 어떻게하는지 배우는 것에 감사 할 것입니다.

관련 문제