현재 Java에서 메뉴 시스템을 코딩하고 있으며 세계 좌표를 화면 좌표로 변환해야합니다. 나는 그것을 수행하는 방법에 대한 많은 게시물을 읽고 다음과 같은 구축 :opengl 정규화 된 장치가 1보다 큰 좌표
float[] v = new float[]{0,0,0,1}; //four vector location of object in object space
//multiply by model matrix
v[0] = model[0]*v[0] + model[4]*v[1] + model[8]*v[2] + model[12]*v[3];
v[1] = model[1]*v[0] + model[5]*v[1] + model[9]*v[2] + model[13]*v[3];
v[2] = model[2]*v[0] + model[6]*v[1] + model[10]*v[2] + model[14]*v[3];
v[3] = model[3]*v[0] + model[7]*v[1] + model[11]*v[2] + model[15]*v[3];
//multiply by projection matrix
v[0] = projection[0]*v[0] + projection[4]*v[1] + projection[8]*v[2] + projection[12]*v[3];
v[1] = projection[1]*v[0] + projection[5]*v[1] + projection[9]*v[2] + projection[13]*v[3];
v[2] = projection[2]*v[0] + projection[6]*v[1] + projection[10]*v[2] + projection[14]*v[3];
v[3] = projection[3]*v[0] + projection[7]*v[1] + projection[11]*v[2] + projection[15]*v[3];
//account for distortions
v[0] = v[0]/v[3];
v[1] = v[1]/v[3];
v[2] = v[2]/v[3];
v[3] = v[3]/v[3];
//transform to screen coords.
onScreenX = (int)((viewport[2] * (v[0] + 1.0f))/2.0f) + viewport[0];
onScreenY = (int)((viewport[3] * (v[1] + 1.0f))/2.0f) + viewport[1];
System.out.println(onScreenX + ", " + onScreenY);
지금은 데 큰 문제는 내가 관점 분할을 한 후 나는 그러나 -1과 1 사이의 값을 가져야한다는 것입니다 객체가 화면에 선명하게 표시되어 있어도이 범위를 벗어나는 것들을 얻을 수 있습니다. 내가 여기서 무엇을 놓칠 수 있는지 잘 모르겠습니다.
나는 이미 함수 gluProject()
을 알고 있지만이 계산은 내 glu
개체가있는 곳에서 멀리 떨어져 있으므로 함수는 쓸모가 없습니다. 행렬 수학으로 끝내야합니다.
o.O 나는이 간단한 버그를 놓치기에는 너무 오랫동안이 코드를 작업 했음에 틀림 없다. 그 점을 지적 해 주셔서 대단히 감사합니다. 꿈처럼 지금 일합니다. –