Получение координат объекта с камеры - PullRequest
2 голосов
/ 07 января 2011

Я реализовал камеру в Java с использованием вектора положения и трех векторов направления, поэтому я могу использовать gluLookAt(); перемещение в «режиме призрака», работает достаточно хорошо, но я хочу добавить обнаружение столкновения.Я не могу понять, как преобразовать мой вектор положения в координаты, в которых OpenGL рисует мои объекты.

Примерный набросок моего цикла рисования таков:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
camera.setView();
drawer.drawTheScene();

Я не знаю, как поступить;глядя на матрицу ModelView между вызовами и вектором моего положения, я не нашел никакой корреляции.

1 Ответ

2 голосов
/ 07 января 2011

Наконец-то понял, пересмотрев http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html снова.Чтобы попасть из пространства глаза (камеры) в пространство объекта, вы должны умножить этот вектор на обратную матрицу ModelView или в коде:

Vector4f vpos = new Vector4f(0, 0, 0, 1); 
// (0,0,0,1) because it's relative to the cam
float mv[]=new float[16];
ByteBuffer temp = ByteBuffer.allocateDirect(64);
temp.order(ByteOrder.nativeOrder());
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, (FloatBuffer)temp.asFloatBuffer());
temp.asFloatBuffer().get(mv);
Matrix4f m4 = new Matrix4f();
m4.load((FloatBuffer)temp.asFloatBuffer());
m4.invert();
vpos = Matrix4f.transform(m4, vpos, vpos);
...