标签: java-3d

简单的透明度示例不适用于Java 3D

我是j3d中的完整n00b(但是Java专家).刚刚开始,我遇到了一个透明度问题.我有一个简单的例子,绘制一个旋转的平面四边形(显示背面消失,因为我没有禁用背面剔除).

将Color3b和COLOR_3线取消注释(以及相应的Color4b和COLOR_4线注释),我看到旋转的四边形,红色.

但是,当我评论color-3线并取消注释color-4线时,我看到一个黑色正方形(相对于白色背景),即使alpha值设置为255(完全不透明).

我究竟做错了什么?谷歌没有帮助,甚至java.forums.net上的Java3D论坛都没有帮助.StackOverflow,救救我!您可以复制并通过以下程序,运行它,看看会发生什么.

这是我的规格:

OSX 10.5.5上的Java 6 J3D 1.5.2 JOGL 1.1.1

谢谢,

- 抢

这是代码:

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.applet.Applet;
import java.awt.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class Hello extends Applet
{
 public Hello() throws Exception
 {
  setLayout(new BorderLayout());
  GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
  Canvas3D canvas3D = new Canvas3D(config);

  add("Center", canvas3D);

  BranchGroup scene = createSceneGraph();
  scene.compile();

  SimpleUniverse univ = new SimpleUniverse(canvas3D);

  univ.getViewingPlatform().setNominalViewingTransform();

  univ.addBranchGraph(scene);
 }

 public BranchGroup createSceneGraph() throws Exception
 {
  BranchGroup root = new BranchGroup();

  // A …
Run Code Online (Sandbox Code Playgroud)

java transparency alpha java-3d

5
推荐指数
1
解决办法
3312
查看次数

Java3D:在Canvas3D上绘制2D HUD

我正在使用Java3D来渲染三维场景.我想在3d图像的顶部叠加一个二维"抬头显示器".如何在3d画布上高效绘制2D内容?

谢谢!

java 3d java-3d

5
推荐指数
1
解决办法
2597
查看次数

使用JNLP启动具有Java3D依赖项的applet的问题

正如标题所说,目前正试图使用​​JNLP作为一种方法,为任何可能没有在其系统上安装Jave3D的用户启动带有Java3D依赖项的applet.不幸的是,当applet尝试启动时,找不到与'subapplet.classname'值有关的错误.

java.net网站上提供的示例FourByFour Demo无法正常工作,并且因找不到类相同的问题而失败,这个问题更加复杂.

Java JNLP网页,有四个四个演示:

java.net FourByFour演示

尝试过使用Firefox和IE浏览器没有区别.

java.net网站上使用的代码示例:

<applet code="org.jdesktop.applet.util.JNLPAppletLauncher"
        width=800 height=400
        archive="http://download.java.net/media/java3d/webstart/test/j3d-examples.jar,
                 http://download.java.net/media/applet-launcher/applet-launcher.jar,
                 http://download.java.net/media/java3d/webstart/release/j3d/latest/j3dcore.jar,
                 http://download.java.net/media/java3d/webstart/release/j3d/latest/j3dutils.jar,
                 http://download.java.net/media/java3d/webstart/release/vecmath/latest/vecmath.jar,
                 http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jar,
                 http://download.java.net/media/gluegen/webstart/gluegen-rt.jar">
    <param name="codebase_lookup" value="false">
    <param name="subapplet.classname" value="org.jdesktop.j3d.examples.four_by_four.FourByFour">
    <param name="subapplet.displayname" value="Java 3D Four by Four Applet">
    <param name="jnlpNumExtensions" value="1">
    <param name="jnlpExtension1" value="http://download.java.net/media/java3d/webstart/release/java3d-latest.jnlp">
    <param name="progressbar" value="true">
    <param name="noddraw.check" value="true">
</applet>
Run Code Online (Sandbox Code Playgroud)

java jnlp java-3d next-generation-plugin

5
推荐指数
1
解决办法
3362
查看次数

是否可以在窗口模式下在Nvidia 3D Vision硬件上运行Java3D应用程序?

感谢JohnnyO已经回答了是否可以结合nVidia 3D愿景运行Java3D应用程序:

是否可以在Nvidia 3D Vision硬件上运行Java3D应用程序?

他的方法对我来说也很好.但它仅限于全屏模式.

他的线程已经有几个月了,现在在过去的几周里,nVidia改进了3D Vision的驱动程序:现在也可以在窗口模式下运行许多应用程序.如果您使用的是专业硬件,如nVidia Quadro卡或ATI Fire GL,您已经了解并了解窗口模式已有很长时间了.

现在,随着nVidia驱动程序的最新更新(我目前安装了295.73),还可以在窗口模式下运行许多应用程序,如nVidia Picture Viewer,Stereoscopic Player等.

http://nvidia.custhelp.com/app/answers/detail/a_id/2311

通常,DirectX 9应用程序应该在窗口模式下运行,您可以在前面提到的nVidia页面上阅读.我认为Java 3D是一个DirectX 9应用程序.如果我使用:

-Dj3d.debug =真

然后控制台说:

[j3d]使用DirectX D3D 9.0或更高版本.

(当然,似乎没有人正在努力改进Java 3D的DirectX实现.)

有人同时找到了如何在立体窗口模式下运行Java3D的技巧吗?我试过了,但我失败了这么久.我认为这将是一个非常重要的参数 Java 3D的,如果我们解决了这个问题!

java directx java-3d nvidia stereo-3d

5
推荐指数
1
解决办法
725
查看次数

如何使用Java3D API在java中绘制简单的3D点(x,y,z)?

我正在使用Java技术在netbeans平台上制作桌面应用程序.我做了一些图像处理,数据库功能,图像捕获过程; 但现在我想在3D视图中绘制图像.
所以,我认为首先我必须制作我的.tiff 16位灰度图像的点阵,然后使用这个点阵.我试了一下,我的代码在下面,但它不起作用.
那么我应该如何使用这个点数组在3D视图中绘制我的图像呢?

import java.awt.BorderLayout;
import com.sun.j3d.utils.universe.*;
import java.awt.image.BufferedImage;
import javax.media.j3d.*;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.vecmath.Color3f;
import javax.vecmath.Point3f;

public final class HelloJava3Da extends JPanel {

    PlanarImage plImg3 = JAI.create("fileload", "C:\\Users\\Desktop\\myImage.tiff");
    BufferedImage histImage = plImg3.getAsBufferedImage();
    int s = 0, count = 0;

    public HelloJava3Da() {
        setLayout(new BorderLayout());
        Canvas3D canvas3D = new Canvas3D(null);
        add("Center", canvas3D);

        BranchGroup scene = createSceneGraph();
        scene.compile();

        // SimpleUniverse is a Convenience Utility class
        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);


        // …
Run Code Online (Sandbox Code Playgroud)

java java-3d

5
推荐指数
1
解决办法
3万
查看次数

Java applet:jocl operations stop java3d

运行Jocl(opencl包装器)内核会禁用java3d输出.当opencl完成时,java3d继续工作.

我怎样才能让Opencl(jocl)和opengl(java3d)一起工作?我需要一些告诉"它的opencl时间"的命令,当它完成时它告诉"它现在的opengl时间".

不知何故,当opencl工作时,java3D Jpanel会冻结并变灰.

我做了一些跟踪,发现java3D正在骚扰opencl(jocl),jmonkey引擎3.0并没有这样做.另一个尝试显示jmonkey做同样的事情.突然所有粒子位置都停止通过opencl更新,然后所有位置都变为0,0,0.

为每个设备使用唯一的上下文,程序,ID,....

误差如何:当星系渲染得很平滑时,突然所有粒子投射到我没有创建的平面上,然后在飞机投射到一条线上几秒后最终将该线投射到一个点上.所有这些必须是因为缓冲区x [] y [] z []开始为所有元素变为零.

编辑:较低的gpu工作频率使错误频率降低.这可能会比使用furmark更难推动GPU,因为在本地进行计算可以更快地工作吗?或者这是jocl/jmonkey/java3d之间的时间/访问优先级问题?所有其他程序,包括furmark,稳定在1225MHz(hd7870鹰)但这可能在1000MHz(AMD默认的hd7870)更稳定或看起来不稳定,因为缓冲区被垃圾收集故障破坏?

Aparapi(java的opencl包装器)从来都不是问题,在1200MHz下工作正常甚至还有"驱动程序停止运行并恢复"错误.催化剂13.3 beta.Jocl 1.5.1和累1.5.2.Catalyst 13.4 whql也是如此.

放System.gc(); 就在内核重复循环立即出现错误之前,必须有一个我错过的垃圾收集

使用一些跟踪:clCreateBuffer方法存在垃圾回收问题

编辑:解决了问题.当使用CL.CL_MEM_USE_HOST_PTR属性时,主线程中clCreateBuffer创建的缓冲区似乎是子线程的垃圾(要收集).CL.CL_MEM_COPY_HOST_PTR解决了问题,以换取%1-%2的性能损失

谢谢.

java applet java-3d opencl jocl

5
推荐指数
1
解决办法
354
查看次数

Java3D中的光和纹理

我的问题是这个区别:

稀土

还有这个:

球

我正在尝试使用Java3D创建一个漂亮的太阳系,但是当我应用纹理时,光照效果消失,3D效果(当不是从上到下看行星时)也随之而来.如何在纹理表面上进行这种着色?

我用于地球示例的代码如下所示.纹理可以在这里下载.

import com.sun.j3d.utils.geometry.Primitive;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.SimpleUniverse;

import javax.imageio.ImageIO;
import javax.media.j3d.*;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;

import java.awt.*;

import static java.lang.Math.PI;
import static java.lang.Math.cos;
import static java.lang.Math.sin;

public class Hello3d {

    public Hello3d()

    {

        SimpleUniverse universe = new SimpleUniverse();

        BranchGroup group = new BranchGroup();

        for(double i=0; i<2*PI; i+=PI/5) {
            group.addChild(basicSphere(0.8*cos(i),0.8*sin(i),0));
        }

        universe.getViewingPlatform().setNominalViewingTransform();

        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 10000000.0);

        PointLight light = new PointLight();
        light.setColor(new Color3f(Color.WHITE));
        light.setPosition(0.0f,0.0f,0.0f);
        light.setInfluencingBounds(bounds);
        group.addChild(light);


        universe.addBranchGraph(group);

    }

    public …
Run Code Online (Sandbox Code Playgroud)

java java-3d

5
推荐指数
1
解决办法
1844
查看次数

Java3D:教程,项目,一般3D编程

我一直在考虑使用Java3D.但首先我想知道是否有人做过多少工作?您已经完成了哪些类型的项目以及您使用哪些教程/示例/指南来学习它?您对API的一般想法是什么?它发育良好吗?你可以编程游戏或用它做任何物理建模吗?

感谢您的输入.

此外,不确定什么是好的标签,所以随意改变它们你认为合适.

java java-3d

4
推荐指数
1
解决办法
804
查看次数

Java3d applet中的JPopupMenu不接收鼠标或键盘输入

我有一个Java应用程序,它使用Java3D和JPopupMenus填充JMenuItems.当它作为常规应用程序运行时,一切正常--JPopupMenus和其他一切都按预期运行.但是,当我从应用程序中创建一个applet时,完全弹出Canvas3D的JPopupMenu没有按预期运行.JPopupMenu的行为如下:

  1. 当鼠标移过菜单项时,菜单项不会突出显示
  2. 箭头键不能用于在菜单项中移动
  3. 单击顶级JMenuItem完成操作并突出显示该项,但它不像在常规应用程序中那样处理JPopupMenu
  4. 单击包含子菜单的顶级JMenuItem不会执行任何操作
  5. 单击JPopupMenu外部并不像在常规应用程序中那样处理JPopupMenu
  6. 显示JPopupMenu后,在程序的swing部分顶部打开JPopupMenu可以使Canop3D上的JPopupMenu有规律和预期的行为,但第5点仍然适用

更多信息:

  • 使用JPopupMenu.show()显示JPopupMenu与持有Canvas3D的JPanel相关
  • 我在创建任何JPopupMenus之前调用JPopupMenu.setDefaultLightWeightPopupEnabled(false),但这行似乎没有什么区别.
  • 我认为这可能是一个焦点问题,但JPopupMenu.requestFocusInWindow()不起作用

所以我的问题是:导致应用程序和applet之间的行为不同的原因是什么,以及如何在applet函数中创建JPopupMenu,就像在应用程序中一样?

java swing java-3d jpopupmenu

4
推荐指数
1
解决办法
283
查看次数

jMonkeyEngine OBJ文件未按预期显示

我的艺术家在3d studio Max中创建了一个3D鞋模型作为FBX.看起来如下图所示.

3d鞋子模型快照的FBX文件

我在我的程序中使用jMonkeyEngine,它不支持FBX文件,所以我将FBX导出到波前OBJ文件,3d studio max也给了我相应的mtl文件.

所以当我将导出的obj模型加载到我的程序中时,它使用jMonkeyEngine作为库,它看起来不像真正的鞋子,它没有任何纹理.

3d鞋OBJ文件模型快照

该程序还显示一个警告

警告:OBJ网格样式_7-geom-0不包含法线!它可能无法正确显示

我的simpleInitApp方法

Spatial myModel = assetManager.loadModel("/Textures/Shoes/style_7.obj");
    myModel.scale(0.09f);
    rootNode.attachChild(myModel);
Run Code Online (Sandbox Code Playgroud)

OBJ文件和材料文件都在同一目录中.所以我认为根据doc jMonkeyEngine直接从OBJ所在的同一目录加载材料.

如果你想我可以在这里上传OBJ文件和材料文件以及所有需要的图像.

我的绝对目标是在JmonkeyEngine中显示相同的Model,如screenshot1所示.

我错过了什么?我做错了什么 ?

2013年7月16日更新

OBJ模型 材料文件 资源

谢谢

java java-3d 3d-modelling jmonkeyengine 3d-model

4
推荐指数
1
解决办法
2078
查看次数