- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个 3d 世界,其行为类似于 minecraft,玩家可以在其中 360 度查看,如果他尝试单击一个点(3D 世界中的 X、Y、Z 坐标),则绘制模型有被删除。我对在 LibGdx 中编写 3D 世界非常陌生,所以任何帮助都是有用的。我用这个做相机旋转:
float deltaX = -Gdx.input.getDeltaX() * player.degreesPerPixel;
float deltaY = -Gdx.input.getDeltaY() * player.degreesPerPixel;
if(deltaX>0)
player.camera.rotate(Vector3.Z, (float)1.5);
else if(deltaX<0)
player.camera.rotate(Vector3.Z, (float)-1.5);
player.tmp.set(player.camera.direction).crs(player.camera.up).nor();
player.camera.direction.rotate(player.tmp, deltaY);
player.setDir(player.camera.direction.x, player.camera.direction.y);
谢谢
最佳答案
在 2D 环境中,您通常只使用 Camera.unproject(...)
,它获取一些屏幕空间点并将其转换回游戏世界坐标。
在 3D 中,这并不容易,因为额外的维度为您的世界增加了一些深度。这就是为什么在 2D 平面(您的屏幕)上单击基本上可以击中 3D 世界中无限多的点。在 libgdx 中,这种可能被点击的点的射线被称为拾取射线。
如果你想要某个平面上的交点,代码可能看起来像他的:
public void hitSomething(Vector2 screenCoords) {
// If you are only using a camera
Ray pickRay = camera.getPickRay(screenCoords.x, screenCoords.y);
// If your camera is managed by a viewport
Ray pickRay = viewport.getPickRay(screenCoords.x, screenCoords.y);
// we want to check a collision only on a certain plane, in this case the X/Z plane
Plane plane = new Plane(new Vector3(0, 1, 0), Vector3.Zero);
Vector3 intersection = new Vector3();
if (Intersector.intersectRayPlane(pickRay, plane, intersection)) {
// The ray has hit the plane, intersection is the point it hit
} else {
// Not hit
}
}
在您的情况下,当您拥有一个类似 minecraft 的世界时,您的代码可能如下所示:
public void hitSomething(Vector2 screenCoords) {
Ray pickRay = ...;
// A bounding box for each of your minecraft blocks
BoundingBox boundingBox = new BoundingBox();
Vector3 intersection = tmp;
if (Intersector.intersectRayBounds(pickRay, boundingBox, intersection)) {
// The ray has hit the box, intersection is the point it hit
} else {
// Not hit
}
}
请注意,在 Minecraft 世界中实际上有成千上万个这样的方 block 。采用这种简单的方法不会很快。您可能不得不最终采用分层解决方案,首先检查大块(包含许多 block 的边界框)是否可能命中,然后开始检查单个 block 。
关于java - 我如何获得在 libGdx 中点击了 3D 世界中的哪个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30447568/
menu Home Events Technical Schedule
我试图阻止触发默认 anchor 链接和 onclick 事件。 这是 HTML 代码: Google 我正在尝试使用以下 jQuery 代码阻止任何重定向的发生: $("#mylink").cli
我想在单击父 div 上的任意位置时切换我的 div,除非单击 anchor 元素。因此,例如,如果我单击示例中的第一个文本,我希望它切换,但在我的示例中的第二个文本上,我不希望它切换。 JSFidd
我在通过 jQuery 伪造 anchor 点击时遇到问题:为什么我的thickbox在我第一次点击输入按钮时出现,但第二次或第三次却没有出现? 这是我的代码: Link 当我直接点击链接时,它总是
我已经从 Mootools 切换到 jQuery,因为我认为它有更好的支持。我有这样的 HTML: Opcje Opcje Opcje Opcje Opcje Opcje Opcje JS
我是一名优秀的程序员,十分优秀!