Это видео покажет мою текущую ситуацию, и я в настоящее время не могу найти ответы на него в Интернете.LWJGL Picking - выберите определенный блок при повороте (gluUnProject())
https://www.youtube.com/watch?v=O8Mh-1Emoc8&feature=youtu.be
Мой код:
public Vector3D pickBlock() {
glDisable(GL_TEXTURE);
IntBuffer viewport = BufferUtils.createIntBuffer(16);
FloatBuffer modelview = BufferUtils.createFloatBuffer(16);
FloatBuffer projection = BufferUtils.createFloatBuffer(16);
FloatBuffer winZ = BufferUtils.createFloatBuffer(1);
float winX, winY;
FloatBuffer position = BufferUtils.createFloatBuffer(3);
glGetFloat(GL_MODELVIEW_MATRIX, modelview);
glGetFloat(GL_PROJECTION_MATRIX, projection);
glGetInteger(GL_VIEWPORT, viewport);
winX = (float)Display.getWidth()/2;
winY = (float)viewport.get(3) - (float)Display.getHeight()/2;
glReadPixels(Display.getWidth()/2, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, winZ);
gluUnProject(winX, winY, winZ.get(), modelview, projection, viewport, position);
glEnable(GL_TEXTURE);
return new Vector3D(position.get(0)/2 + 0.5f, position.get(1)/2 + 0.5f, position.get(2)/2 + 0.5f);
}
возвращает "/2 + 0.5f" потому, что необходимо из-за смещения у меня есть для блоков (если я удалил 0.5f , смещение будет в центре вместо угла)
Хорошо. Да, я уверен, что использую «углы Эйлера» (rx, ry, rz). Я не профессионал в 3D-программировании, LOL. Я посмотрю, что я могу сделать, спасибо за информацию! Я поговорю с вами позже, если мне нужна дополнительная информация;) – StinchinStein
Спасибо! Кажется, я нашел решение. Я подсчитал, в каком направлении находится «игрок», и пошел оттуда. Еще раз спасибо! Я пытался понять это сейчас ... :) – StinchinStein