如何检查物体是否在相机前方?
我有一些树,它们大大滞后于游戏,所以我想检查一下这些树是否在镜头前。
我从数学论坛得到了一些帮助,并且还查看了此链接,以帮助我将俯仰/偏航转换为所需的方向向量。
但是由于某种原因,每当我将相机向左移动时,树木都会变得可见,每当我将其向右移动时,它们都会变得不可见(因此,如果相机指向Z轴上的+1,它似乎正在渲染树木,但在Z轴上为-1,并且似乎没有渲染它们)。 (请参阅 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();
}
更新:
它似乎是相机正在看的地方。例如,如果我看-Z,什么也没发生,但是如果我看+Z,它们都会渲染。看起来是+Z而不是+TheCameraRotation。if (dot > 0) code