如何根据鼠标单击获取 3D 中点的坐标?
我希望当我单击屏幕上的特定点时,函数调用会返回我单击的 3d 场景中的点。
例如,当我点击屏幕左上角时,它应该返回 x = 0, y = 1, z= 1;请帮助我创建一个方法来执行此操作。
编辑:
Root = new BranchGroup();
setLayout(new BorderLayout());
add(canvas3D,BorderLayout.CENTER);
SimpleUniverse universe = new SimpleUniverse(canvas3D);
Shape();
universe.addBranchGraph(Root);
ViewingPlatform viewingPlatform = universe.getViewingPlatform();
OrbitBehavior behavior = new OrbitBehavior(canvas3D);
behavior.setSchedulingBounds(bounds);
viewingPlatform.setViewPlatformBehavior(behavior);
viewingPlatform.setNominalViewingTransform();
}
我在 NetBeans 中使用 SimpleUniverse
。
I want that when I click on a specific point on the screen, a function call that return the point in 3d scene that I click.
For example, when I click on the top left of the screen, it should return x = 0, y = 1, z= 1; please help me create a method to do this.
edit:
Root = new BranchGroup();
setLayout(new BorderLayout());
add(canvas3D,BorderLayout.CENTER);
SimpleUniverse universe = new SimpleUniverse(canvas3D);
Shape();
universe.addBranchGraph(Root);
ViewingPlatform viewingPlatform = universe.getViewingPlatform();
OrbitBehavior behavior = new OrbitBehavior(canvas3D);
behavior.setSchedulingBounds(bounds);
viewingPlatform.setViewPlatformBehavior(behavior);
viewingPlatform.setNominalViewingTransform();
}
I'm using SimpleUniverse
in NetBeans.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
恐怕答案并不直接。根据场景中的内容,单击屏幕时鼠标坐标应该发生变化。例如,如果您有两个对象,因此前面的对象遮挡了后面的对象,那么您需要获取前面的对象坐标。这称为“鼠标选取”,有多种技术可以实现。我找到了一些论坛来解释它是如何完成的并有代码示例。
基本上,这个想法是您想象在您(用户)和屏幕之间存在激光(或其他投射射线的东西)。然后,这个东西会通过屏幕表面上鼠标单击的点“进入”屏幕来投射一条光线。然后,光线路径上的任何物体都将被拾取,并且可以选择解析光线路径中对象的遮挡顺序,为您提供最接近“屏幕”的对象。
我对 J3D 不熟悉,但从一些教程中将以下代码拼凑在一起。它至少应该让你开始。您要查找的内容是底部的这一行
Point3D Intercept = ...
。http://www.java3d.org/selection.html
I'm afraid the answer isn't straight forward. Depending on what is in your scene the mouse coordinates should change when you click on the screen. For instance if you have two objects so that the front one occludes the back one then you'd want to get the front objects coordinates. This is called
mouse picking
and there are several techniques for it. I found a few forums that explain how it's done and have code examples.Basically the idea is that you imagine there being a laser (or something else that casts a ray) between you the user and the screen. This thing then projects a ray through the point on the screen surface where the mouse was clicked "into" the screen. Anything that is on the rays path will then be picked and optionally the occlusion order of objects in the ray's path is resolved to give you the object closest to the "screen".
I am not familiar with J3D, but scraped the following code together from a few tutorials. It should get you started at least. The this you are looking for is this line
Point3D intercept = ...
at the bottom.http://www.java3d.org/selection.html
在此处输入代码
下面的 Java 代码,在 3D 屏幕中打印 3D 对象(形状)的中心坐标。结果是 (x=-0.5 ,y=0.0 ,z=0.4)}
public class tuval1 {
new secim2();
}
enter code here
The Java code below , prints the 3d object's (shapes) center coordinates in the 3d screen. Result is (x=-0.5 ,y=0.0 ,z=0.4)}
public class tuval1 {
new secim2();
}