3D 공간을 이동하기 위해 카메라를 만들고 있는데 설정하는 데 문제가 있습니다. 나는이 작업을 Java로하고 있으며 gluPerspective와 gluLookAt를 함께 사용하면 충돌이 발생합니다 (화면이 미친 듯이 깜박임).OpenGL : 내 카메라 만들기
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(50.0f, h, 1.0, 1000.0);
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
난 후 순방향 눈의 사용을 조정하기, 카메라 행렬을 생성하고 닫 벡터 (http://people.freedesktop.org/~idr/glu3/form_4.png)는 (카메라 코드가 올바른 가정 할
:gluPerspective이 같이 설정된다.
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glMultMatrixf(camera.matrix);
을 그리고 나는 파묻혀에 일부 번역/회전을 내 드로잉 루틴 (전화 : 내가 어떤 일을 그리기 전에
마지막으로, 내가 가진 r은 glRotatef와 glTranslatef를 호출하여 소유).
glMultMatrixf를 호출하지 않으면 카메라는 화면 중심에서 볼 필요가있는 항목을 표시합니다. 그러나 glMulMatrixf를 사용하면 검정색 화면 만 표시됩니다. 대신 glLoadMatrixf를 사용하여 시도 했는데도 작동하지 않았습니다. 내가 뭔가 잘못하고 있는거야? 나는 무언가를 제자리에두고 있습니까? 그렇지 않다면 이것이 어떻게 이루어져야하는지 알려주고 충돌을 일으킬 수있는 카메라 코드를 게시 할 것입니다.
편집 :
private void createMatrix()
{
float[] f = new float[3]; //forward (centre-eye)
float[] s = new float[3]; //side (f x up)
float[] u = new float[3]; //'new up' (s x f)
for(int i=0;i<3;i++){
f[i] = centre[i]-eye[i];
}
f = Maths.normalize(f);
s = Maths.crossProduct(f,upVec);
u = Maths.crossProduct(s,f);
float[][] mtx = new float[4][4];
float[][] mtx2 = new float[4][4];
//initializing matrices to all 0s
for (int i = 0; i < mtx.length; i++) {
for (int j = 0; j < mtx[0].length; j++) {
mtx[i][j] = 0;
mtx2[i][j] = 0;
}
}
//mtx = [ [s] 0,[u] 0,[-f] 0, 0 0 0 1]
//mtx2 = [1 0 0 -eye(x), 0 1 0 -eye(y), 0 0 1 -eye(z), 0 0 0 1]
for(int i=0;i<3;i++){
mtx[0][i] = s[i];
mtx[1][i] = u[i];
mtx[2][i] = -f[i];
mtx2[i][3]=-eye[i];
mtx2[i][3]=-eye[i];
mtx2[i][3]=-eye[i];
}
mtx[3][3] = 1;
mtx2[0][0]=1;mtx2[1][1] = 1;mtx2[2][2] = 1;mtx2[3][3] = 1;
mtx = Maths.matrixMultiply(mtx,mtx2);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
// this.mtx is a float[16] for glMultMatrixf
this.mtx[i*4+j] = mtx[i][j];
}
}
}
, 내가 보는 내 수학 기능을 살펴해야하지 않을 경우 나,이 코드 조각 어딘가에 오류입니다 호핑 해요 : 여기에 카메라 행렬 생성 코드는 무슨 일이야 ..
EDIT2 : 적어도 초기 벡터 (눈, 중심, 최대)는 정확해야하며 카메라를 놓아야 할 곳 (gluLookAt으로 작업했지만 깜박 거리는 문제가 있음)을 언급해야합니다.
게시 한 코드에 아무런 문제가 없습니다 (gluPerspective의 두 번째 인수 인 w/h 비율을 예상하는 경우 제외). 나는 카메라 매트릭스가 틀린 것보다 다른 어떠한 설명도 생각할 수 없다. – Kos
예, 'h'변수의 너비/높이입니다. 왜 누군가가 그것을 'h'라고했는지 모르겠습니다 (그룹 작업). 어쨌든, 행렬을 작성해야하는 코드를 게시했습니다. someoen이 내가 잘못하고있는 것을 발견 할 수 있기를 바랍니다. – Zepee
맞춤형 카메라 매트릭스 대신 ol 'good'gluLookAt'을 사용하지 않는 이유는 무엇입니까? – Kos