我是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) 我正在使用Java3D来渲染三维场景.我想在3d图像的顶部叠加一个二维"抬头显示器".如何在3d画布上高效绘制2D内容?
谢谢!
正如标题所说,目前正试图使用JNLP作为一种方法,为任何可能没有在其系统上安装Jave3D的用户启动带有Java3D依赖项的applet.不幸的是,当applet尝试启动时,找不到与'subapplet.classname'值有关的错误.
java.net网站上提供的示例FourByFour Demo无法正常工作,并且因找不到类相同的问题而失败,这个问题更加复杂.
Java JNLP网页,有四个四个演示:
尝试过使用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) 感谢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技术在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) 运行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的性能损失
谢谢.
我的问题是这个区别:

还有这个:

我正在尝试使用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) 我一直在考虑使用Java3D.但首先我想知道是否有人做过多少工作?您已经完成了哪些类型的项目以及您使用哪些教程/示例/指南来学习它?您对API的一般想法是什么?它发育良好吗?你可以编程游戏或用它做任何物理建模吗?
感谢您的输入.
此外,不确定什么是好的标签,所以随意改变它们你认为合适.
我有一个Java应用程序,它使用Java3D和JPopupMenus填充JMenuItems.当它作为常规应用程序运行时,一切正常--JPopupMenus和其他一切都按预期运行.但是,当我从应用程序中创建一个applet时,完全弹出Canvas3D的JPopupMenu没有按预期运行.JPopupMenu的行为如下:
更多信息:
所以我的问题是:导致应用程序和applet之间的行为不同的原因是什么,以及如何在applet函数中创建JPopupMenu,就像在应用程序中一样?
我的艺术家在3d studio Max中创建了一个3D鞋模型作为FBX.看起来如下图所示.

我在我的程序中使用jMonkeyEngine,它不支持FBX文件,所以我将FBX导出到波前OBJ文件,3d studio max也给了我相应的mtl文件.
所以当我将导出的obj模型加载到我的程序中时,它使用jMonkeyEngine作为库,它看起来不像真正的鞋子,它没有任何纹理.

该程序还显示一个警告
警告: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所示.
我错过了什么?我做错了什么 ?
谢谢