2012-07-04 5 views
1

나는 수학 시간 문제로 인해 놀랍도록 어려움을 겪고 있습니다. 크기 조정이 가능한 LWJGL (OpenGL) 창이 있습니다. 내가 만들고있는 게임은 2D이지만, glFrustum()을 사용하여 스프라이트의 깊이를 얻습니다. 여기 내 투사 코드에서 (조금 단순화) 조각입니다 :크기 조정시 LWJGL 커서 문제

double divider = 64.0; 
double left = -vw/divider; 
double right = vw/divider; 
double bottom = vh/divider; 
double top = -vh/divider; 

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glFrustum(left * aspect, right * aspect, bottom, top, 8, 65536); 

float zModifier = -256; 
float vRatio = Game.HEIGHT/Display.getHeight(); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(-vw/2.0f, -vh/2.0f, zModifier * vRatio); 

(내가 아주 잘 프러스 텀 비트를 이해하지 못하는 것을 인정해야한다, 나는 어딘가에 인터넷에이 코드 조각을 발견하고는 봉사했다 나 잘 ...)

그러나 스프라이트로 내 자신의 커서를 렌더링하고 커서가 창 테두리와 접촉 할 때 네이티브 커서로 전환합니다. 창 크기를 조정할 때까지이 모든 작업이 잘되었습니다.

지금 내 문제는, 창의 크기를 조정할 때 네이티브 커서가 vRatio에 상대적인 스프라이트 커서와 "동기화되지 않음"입니다. 크기가 조정 된 창 크기에 따라 조금씩 또는 '조금씩'점프됩니다.

스프라이트 커서가 국경과 접촉, 나는 다음을 수행하십시오

  1. 커서의 위치 을 (스프라이트 네이티브 커서의 위치를 ​​설정 기본 커서를 표시 스프라이트 커서를 숨기기 이게 더 이상 제대로 작동하지 않습니다.)

나는이 간단한 수학적 해결책이있는 것처럼 느낍니다. 그러나 나는 그럴 수 없습니다. t out (나는 물건을 시험해 보았다. .. 그러나.).

제 질문이 너무 애매하지 않고 충분한 정보를 제공했으면합니다.

+0

크기를 조정할 때'Game.HEIGHT'을 (를) 업데이트하고 있습니까? – corsiKa

+0

아니요, 아닙니다. 크기가 조정 된 창에 게임 영역을 맞추기 위해 약간의 코드를 사용합니다. – n00bster

+0

알겠습니다. 그래서 창문 너비에 어떤 관심이 있습니까? 게임 창에 항상 동일한 w : h 비율, 즉 – corsiKa

답변

1

처음에는 창 크기가 OpenGL의 크기와 일치합니다. 그러나 창 크기를 조정하면 프로젝션이 변경되어야합니다. 적어도 스케일링 요소가 추가되었습니다. 이것은 왜 커서가 동기화되지 않는지 설명합니다.

항상 동기화 상태로 유지하려면 창 좌표를 세계 좌표로 매핑해야합니다. 이것은 gluUnProject 으로 수행 할 수 있습니다. 이미 문제를 일으키는 해결책의 변화를 고려하지 않고 손으로 그렇게하고 있습니다. 완성도를 들어

는 반대, 세계에서가는, 윈도우 좌표 좌표도 가능

이러한 기능을 사용하는 경우, 당신은 모델 매트릭스, 투영 행렬과 뷰포트에 손을 얻을 수 있습니다 OpenGL: gluProject. 이러한 목적으로 glGet * 패밀리의 기능을 사용하십시오. 이 행렬이 올바르게 설정된 지점에로드해야합니다!

+0

답장을 보내 주셔서 대단히 감사합니다! 저는 이것으로 돌아 왔고, gluUnProject와 완벽하게 작동했습니다! 나중에 코드를 게시 할 예정입니다. 다른 누군가가 이와 같이 고민하고있는 경우에 대비하여 문제. – n00bster

관련 문제