У меня есть несколько деревьев, которые сильно отстают от игры, поэтому я хотел бы проверить, находятся ли деревья перед камерой или нет.
Я получил некоторую помощь от Математического форума, а также посмотрел Эта ссылка на помогите мне преобразовать шаг/рыскание в нужный вектор направления.
Но по какой-то причине, всякий раз, когда я перемещаю камеру влево, деревья становятся видимыми, и всякий раз, когда я перемещаю ее вправо, они становятся невидимыми (поэтому, если камера указывает на +1 на оси Z, кажется, для рендеринга деревьев, но -1 на оси Z и, похоже, их не отображать). (См. http://i.gyazo.com/cdd05dc3f5dbdc07577c6e41fab3a549 для менее прыгающего .mp4)
Я использую следующий код, чтобы проверить, находится ли объект перед камерой или нет:
Ship you = shipsID.get(UID);
int dis = 300;
Vector3f X = new Vector3f(camera.x(), camera.y(), camera.z());
float x = (float) (Math.cos(Math.toRadians(camera.yaw()))*Math.cos(Math.toRadians(camera.pitch())));
float y = (float) (Math.sin(Math.toRadians(camera.yaw()))*Math.cos(Math.toRadians(camera.pitch())));
float z = (float) Math.sin(Math.toRadians(camera.pitch()));
Vector3f V = new Vector3f(x, y, z);
for (Tree tree : trees){
Vector3f Y = new Vector3f(tree.location.x, tree.location.y, tree.location.z);
Vector3f YMinusX = Y.negate(X);//new Vector3f(Y.x - X.x, Y.y - X.y, Y.z - X.z);
float dot = Vector3f.dot(YMinusX, V);
if (dot > 0){
tree.render();
}
}
Кто-нибудь может сказать мне, что я сделал здесь неправильно? Я не могу разобраться, если это математика.. Или код.. Или что?
Код перевода камеры:
public void applyTranslations() {
glPushAttrib(GL_TRANSFORM_BIT);
glMatrixMode(GL_MODELVIEW);
glRotatef(pitch, 1, 0, 0);
glRotatef(yaw, 0, 1, 0);
lastYaw = yaw;
glRotatef(roll, 0, 0, 1);
glTranslatef(-x, -y, -z);
glPopAttrib();
}
UPDATE:
Кажется, что камера смотрит. Например, если я смотрю на -Z, ничего не происходит, но если я смотрю на + Z, они все визуализуют.
if (dot > 0) code
кажется как-то + Z, а не + TheCameraRotation.