问题标签 [canvas3d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1764 浏览

java - 为什么我的离屏渲染 Canvas3D 不起作用?

我一直在尝试使用Java3D 1.5.2使屏幕外渲染正常工作。在我的源代码中,我一直在尝试附加一个扩展Canvas3D,它将进行屏幕外渲染SimpleUniverse,但这样做会破坏渲染:

完整的源代码有点太大,无法粘贴到 StackOverflow 上,所以我通过 Pastie 在这里提供了它。

第 63 行已被注释掉,并让普通的 Canvas3D 进行屏幕渲染。它将渲染一个立方体并将其显示在JFrame. 但是,如果您删除评论,屏幕外渲染将导致屏幕上的内容无法渲染。此外,屏幕外渲染将返回 "big black nothing" BufferedImage

我想知道如何使屏幕外渲染工作,即将旋转立方体的场景渲染为缓冲图像。我一直在查看 Java3D 提供的屏幕外渲染示例代码,他们也这样做(除了他们使用Raster对象将屏幕外缓冲区渲染回屏幕窗口之外)。

0 投票
1 回答
416 浏览

virtual - 如何将 Canvas3D 上的运动转换为虚拟 3D 世界中的运动

我的目标是以这样的方式在虚拟世界中移动一个形状,使其最终到达鼠标指针在画布上的位置。

我有: - Canvas3D 对象上的鼠标位置 (x,y) -Point3d 对象,从 Canvas3D 视口开始的拾取射线与第一个场景对象相交。(在我想要开始拖动的 3D 空间中的点)

我想要什么: - 某种方式来转换 Point3d 的坐标,以便初始交点(Point3d 对象)始终与画布上的鼠标位置重叠(与我使用拾取射线确定用户点击的内容相同)来自 Canvas3D 对象)。

谢谢!

0 投票
1 回答
120 浏览

java - 水平翻转视图 - 如何?

我对 Java 3D 很陌生。最近我发现我所有的场景对象都是左手坐标,但 Java 3D 使用右手坐标。有一个解决方案:翻转场景 Z 轴并恢复三角形的缠绕顺序。但这将是一个可怕的混乱。似乎如果我能以某种方式水平翻转视图,它将完成所需的工作。我怎样才能做到这一点?在某处应用Transform3D,某种离屏渲染或...?

提前10倍!

0 投票
1 回答
790 浏览

printing - PrintCanvas3D 不起作用

我在从 Java3d 打印图形时遇到了一些麻烦,某些计算机(基于 Intel 的显卡)在打印时完全崩溃。我得到了这个例外。

我知道它说我必须升级到 OpenGL 1.2 但检查后我已经安装了 1.5(错误消息不准确)

我试图捕捉 IllegalRenderingStateException 但它不起作用,JVM 无论如何都会崩溃。没有人知道如何在基于英特尔的显卡上使用打印功能吗?

0 投票
1 回答
184 浏览

geometry - 使 Canvas3D 上的球体“可点击”

我有一个包含几个球体的 Canvas3D。有没有办法检测用户何时点击球体?

0 投票
1 回答
886 浏览

java - Java3D 与 Canvas3D 和按钮重叠

我一直在使用 Java3D 对固态物理学进行一些介绍。在钻研了很多 3D 里面的东西之后,决定放一些按钮来测试不同的东西。我的问题出现在这里。

在下图中,我使用 setLayout(null) 来放置按钮和 Canvas3D:

在此处输入图像描述

我不想要的是:

  • Canvas3D 与按钮重叠。
  • Canvas3D 不会拉伸以保持图片大小/窗口大小的相同比例,因此当我调整窗口大小时,它只是大小相同。

然后我尝试使用setLayout(new BorderLayout());andadd("Center",component);用于 Canvas3D,而“South”、“West”、“East”用于按钮。下图为案例:

在此处输入图像描述

这看起来更好,但这次又出现了另一个问题:

  • 按钮不是我想要的大小(延伸到窗口)并且不在我想要的偏移位置。
  • 当我将两个按钮放在“南”这样的同一区域时,按钮也会相互重叠。

问题:如何让 Canvas3D 拉伸到窗口,而按钮正好在我想要的位置 (x,y) 并且具有我想要的大小 (h,w) 而不会被 Canvas3D 重叠。我为 Canvas3D 和 Buttons 尝试了不同的布局——>失败。仅显示一种布局。

感谢您的时间。

Java3D 1.5.2 和 Eclipse 。Windows XP 和英特尔 centrino

0 投票
1 回答
1285 浏览

java - JFrame在处理另一个事件时没有响应事件

我有以下场景: 1. 我在实现ActionListener的“FrontEnd.java”类中创建了一个JFrame jFrame 。然后我将一个Canvas3D对象添加到它的ContentPane,然后,我添加一个JMenuBar ,每个 JMenuBar有几个JMenu和几个JMenuItems。2. 然后我有一个RendererClass.java类,用于将球体渲染到 Canvas3D 对象中。因此,从FrontEnd,单击其中一个 JMenuItems,我处理事件并从actionPerformed(ActionEvent ae) 方法我调用 RendererClass(jFrame) 并从渲染器端获取 jFrame 对象,因此 Canvas3D 在其中绘制球体。所以,我把它们画在它们的初始位置。3. 然后,我在 FrontEnd中的一个循环中更新球体的坐标,该循环调用 RendererClass 中的“updateCoordinates()”。这是一个可能持续长达一分钟的沉重循环。在更新球体的坐标时,我展示了它们是如何在 Canvas3D 中更新的(在每次迭代中,坐标仅略有不同)——这是由 RendererClass 中的 updateCoordinates() 完成的。

问题是,在从 actionPerformed(...) 方法调用的循环中,我无法与 jFrame 交互,而不是事件关闭它。它实际上是在听,因为当循环结束时,如果我在循环中单击“X”(关闭窗口),那么窗口就会关闭。此外,如果我尝试在 Canvas3D 上旋转我的相机,在循环完成之前它不会更新旋转。请注意,在循环中,我看到我的球体在移动。此外,按钮停止响应并且不再响应 - 下拉 JMenuItems 似乎位于 Canvas3D 下方并且无法访问。

这是代码:

所以,问题很简单……为什么 JFrame 窗口会卡住并停止响应事件?而且,为什么在循环结束后,过去的事件都突然被处理了?最后但并非最不重要的一点是,您将如何实现这样的功能(在一个类中创建一个 JFrame,并将其传递给其他类,以便他们可以将内容放入其中的 Canvas3D ......这样在循环时,我可以与画布3D?

提前致谢。

0 投票
1 回答
1346 浏览

java - Java3D - 未找到某些类,但类路径设置正确

我有一个使用成功编译的 Java3D 的类,尽管当我尝试运行它时它说:线程“main”中的异常 java.lang.NoClassDefFoundError: javax/media/j3d/Canvas3D

使用以下堆栈跟踪:

我已经尝试过的东西:

  1. 在将 Java3D jar 复制到 /jre/lib/ext/ 之前,我什至无法编译它。

  2. 我有最新的 Java、Java3D,我正在使用 Notepad++,我尝试重新安装 Java3D。

  3. 我已经正确设置了类路径/路径。

  4. 代码中没有错误。

  5. 我可以运行我创建的普通 Java 应用程序。

  6. 我尝试在运行应用程序时使用类路径(java -classpath blahblah ApplicationName)。

  7. 我检查了罐子内部,并且类(包括 Canvas3D)肯定在里面。

0 投票
0 回答
303 浏览

java - 如何在 Java Applet 中为 MouseListener 点击事件动态扩展 PickCanvas 对象(使用 Java3D)?

我正在使用Java3D. 它以BranchGroup添加到 Locale 对象的对象(包含一组点)开始。APickCanvas是从 Locale 开始创建的,并且一个类实现MouseListener是从所述 开始构造的PickCanvas

在此阶段正确检测到鼠标点击。我遇到的问题是,每当我开始向我的小程序添加更多点时(通过BranchGroup为加载的每组点创建一个新对象,然后将此对象附加到我的初始Locale对象),当新添加点时,鼠标点击不会被注册被选中。

添加新对象后刷新实现对象时,PickCanvas我可能做错了什么。如何使启动后添加到分支组中的点通过鼠标单击来选择?MouseListenerBranchGroup

下面是语言环境、第一个分支组和鼠标监听器的创建方式:

最后这就是我将分支组添加到更新pickcanvas的语言环境对象的方式:

where在实现类对象中setPickCanvas()设置pickCanvas 。MouseListener我什至尝试在每次添加分支组时创建一个新的 MouseMethodsPoints 对象,但单击仍然会在新分支组的区域中找不到任何点。

感谢您的时间!

0 投票
1 回答
642 浏览

java - JPopupMenu.setDefaultLightWeightPopupEnabled(false) 不起作用

我正在使用 ImageJ 3D 查看器库 ( http://3dviewer.neurofly.de/ )。我正在尝试在查看器中显示图像,但弹出菜单(菜单选项)被画布遮挡。也就是说,它们消失在画布后面。我看了一遍,一致的答案似乎是我应该早点添加这行代码:

我很早就添加了这个,但问题仍然存在。有人有想法么?我可以发布代码,但这是基本的想法。我正在尝试将 JMenuBar 添加到 Canvas3D。