업데이트를 위해 하단을 참조하십시오.
나는 인터넷의 주위에 많이 찾고 있었어요 그리고 내가 달성하기 위해 노력하고있어 설명 할 몇 가지 자습서를 발견하지만 난이 일을 얻을 수없는, 어느 튜토리얼은 불완전하거나 적용 할 수 없습니다 내 코드에.
저는 원점 (중심)을 중심으로 2D 이미지를 회전시키는 것처럼 간단한 것을 시도하고 있습니다.
나는이 코드는 그것의에
GameRectangle dest = destination;
Vector2 position = dest.getPosition();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, this->image);
//If the rotation isn't 0 we'll rotate it
if (rotation != 0)
{
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.5, 0.5, 0);
glRotatef(rotation, 0, 0, 1);
glMatrixMode(GL_PROJECTION);
}
glBegin(GL_QUADS);
glTexCoord2d(xStart,yStart);
glVertex2f(position.x, position.y);
glTexCoord2d(xEnd,yStart);
glVertex2f(position.x + this->bounds.getWidth(), position.y);
glTexCoord2d(xEnd,yEnd);
glVertex2f(position.x + this->bounds.getWidth(), position.y + this->bounds.getHeight());
glTexCoord2d(xStart,yEnd);
glVertex2f(position.x, position.y + this->bounds.getHeight());
glEnd();
glDisable(GL_TEXTURE_2D);
//Reset the rotation so next object won't be rotated
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glRotatef(0, 0, 0, 1);
glMatrixMode(GL_PROJECTION);
이 코드는 이미지를 그릴 것 같은 모습입니다이다 질감 0 또는 1
플립 XSTART, xend를, yStart 및 yEnd를 사용 원래 크기와 그것을 회전하지만 이미지를 많이 자르는 왼쪽 상단 모서리에서 회전합니다. GameRectangle.getOrigin()을 호출하면 직사각형의 중심을 쉽게 얻을 수 있지만 어디에서 사용할지 모릅니다. 넣으면
비트 :
glTranslatef(-0.5, -0.5, 0);
내가 전화 후 :
glRotatef(0.5, 0.5, 0);
그것은 중심에서 회전합니다,하지만 완벽한 90도 회전이 아니라면이 이미지를 스트레치한다.
UPDATE
거의 모든 가능한 노력 후, 나는 내가 찾던 결과를 얻었다.
하지만 이것이 최선의 방법인지 잘 모르겠습니다. 내 코드에 문제가 있는지 알려주세요.
위의 설명에서 언급했듯이 동일한 이미지를 여러 번 사용하고 값을 다르게하여 실제 이미지에 아무 것도 저장할 수 없습니다. 그래서 나는 그것을 렌더링 한 후에 매번 값을 재설정해야합니다.
나는이 내 코드를 변경 ://Store the position temporary
GameRectangle dest = destination;
Vector2 position = dest.getPosition();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, this->image);
glTranslatef(dest.getOrigin().x, dest.getOrigin().y, 0);
glRotatef(rotation, 0, 0, 1);
glBegin(GL_QUADS);
glTexCoord2d(xStart,yStart);
glVertex2f(-dest.getWidth()/2, -dest.getHeight()/2);
glTexCoord2d(xEnd,yStart);
glVertex2f(dest.getWidth()/2, -dest.getHeight()/2);
glTexCoord2d(xEnd,yEnd);
glVertex2f(dest.getWidth()/2, dest.getHeight()/2);
glTexCoord2d(xStart,yEnd);
glVertex2f(-dest.getWidth()/2, dest.getHeight()/2);
glEnd();
//Reset the rotation and translation
glRotatef(-rotation,0,0,1);
glTranslatef(-dest.getOrigin().x, -dest.getOrigin().y, 0);
glDisable(GL_TEXTURE_2D);
이 그것이,이 스트레치 또는 작물하지 않습니다에 그려 쿼드과 함께 텍스처를 회전합니다. 그러나 이미지가 사각형으로 채워지는 경우 가장자리가 약간 들쭉날쭉하지만, 앤티 엘리 어싱을 사용하지 않으면이를 피할 수는 없을 것입니다.
당신이 정말로 텍스처가 아닌 쿼드을 회전 하시겠습니까? 이미 OpenGL 행렬을 사용하고있는 경우에는 코드 끝에 행렬을 재설정하는 대신 행렬 스택 (예 : glPushMatrix 및 glPopMatrix)을 사용해야합니다. –
쿼드를 돌리면 충분합니다. 쿼드로 텍스처를 회전시키고 쿼드를 올바르게 회전시키는 방법은 무엇입니까? – Orujimaru
또한 glPushMatrix() 및 glPopMatrix()를 호출해야하는 위치를 잘 모르겠습니다. 원하는 결과를 얻지 못하는 경우, 모든 이미지 또는 이미지를 회전시킵니다. 어떤 차이가 있는지 모르겠지만 동일한 이미지를 여러 번 그리지 만 회전 값이 다른 경우 다른 이미지를 그리면 실제 이미지에 아무 것도 저장할 수 없습니다. – Orujimaru