나는 카메라가 3 차원 공간에서 정지 된 2 차원 평면 위로 움직이는 openframeworks에서 게임을 만들고 있습니다. 카메라가 항상 움직이기 때문에 모든 프레임에 대해 5 개의 좌표를 선택해야합니다 (마우스 1 개, 뷰포트 모서리 4 개). 그러나 gluUnproject 함수가 너무 느린 것을 발견했습니다. Z = 0 인 고정 평면에서 좌표 만 따기 때문에 내 카메라 클래스의 modelview 및 투영 행렬을 사용하여 좌표를 매우 저렴하게 계산할 수 있어야한다는 것을 알았지 만 해결할 수 없습니다. 수학을하는 법. 비 투영 좌표로 좌표 평면은 I 화면을 변환 할 world_dims.x, world_dims.yglunproject 저렴 대안
치수 Z 축에 정렬 된 모델 뷰 및 프로젝션 매트릭스 뷰포트 -
제가카메라가 요약하자면 gluUnproject를 사용하지 않고 비행기에서.
는 Incase의 나는 내가 gluUnproject 기능이 너무 느린 것으로 나타났습니다 그러나 그 비트ofVec3f ofxGrabCam::pickCoordinate(ofVec2f t_mouseP) {
//read z value from depth buffer at mouse coords
ofVec3f t_mouseW(t_mouseP.x, t_mouseP.y, 0);
glReadPixels(t_mouseW.x, ofGetScreenHeight()-1-t_mouseP.y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &t_mouseW.z);
if (t_mouseW.z == 1.0f){
return ofVec3f(-99,-99,-99); //represents point not found
}
GLdouble c[3];
gluUnProject(t_mouseW.x, ofGetScreenHeight()-1-t_mouseW.y, t_mouseW.z, matM, matP, viewport, c, c+1, c+2);
ofVec3f mouseW(c[0],c[1],c[2]);
return mouseW;
}
저는 성능이 떨어지고 있습니다 (60fps에서 실행하려고합니다). 확실히 나는 모든 것을 올바르게하고있다.하지만 내 코드를 편집 할 것이다. 나는 지금이 방법 http://www.mvps.org/directx/articles/rayproj.htm을 조사해 왔지만 여전히 운이 없다. 특정 순서로 수행해야하는 특정 전환을 내게 줄 수 있습니까? –
저는 gluUnproject가 주요 병목 현상이 있음을 발견했으며,이 질문에 대안에 대한 답이 있다면 사랑했을 것이라고 말하고 싶습니다. – Jeff
@ Jeff : 성능 저하는 gluUnProject 때문이 아닙니다. 병목 현상은 glReadPixels입니다. 원하는 모든 것이 광선이라면 glReadPixels을 사용하지 말고 0과 1을 Z 좌표로 사용하십시오. – datenwolf