Java3D/J3D/Jogamp测试代码

简介: Java3D/J3D/Jogamp测试代码

记得之前已经发布过,没找到,于是就发一个。


不同平台需要对应的本地编译库。按照六石风格,已经贴心的提供了下载:


https://download.csdn.net/download/quantum7/86952154


package taishan;
import java.awt.GraphicsConfiguration;
import java.awt.image.BufferedImage;
import java.util.Enumeration;
import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Interpolator;
import javax.media.j3d.PolygonAttributes;
import javax.media.j3d.QuadArray;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.WakeupCriterion;
import javax.media.j3d.WakeupOnElapsedFrames;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.vecmath.Point3d;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.universe.SimpleUniverse;
@SuppressWarnings("serial")
public class Java3DTest extends TsFrame
{
    Java3DTest()
    {
        setTitle("gl");
        setBounds(0, 0, 500, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        add(panel);
    }
    private void action3d()
    {
      try
      {
      GraphicsConfiguration config =  SimpleUniverse.getPreferredConfiguration();
            Canvas3D canvas3d = new Canvas3D(config);
            canvas3d.setBounds(0, 0, 500, 500);
            add(canvas3d);
            SimpleUniverse u = new SimpleUniverse(canvas3d);
            u.addBranchGraph(createSence());
            u.getViewingPlatform().setNominalViewingTransform();
        }
      catch (Throwable e)
      {
      e.printStackTrace();
      }
    }
    private BranchGroup createSence()
    {
        BranchGroup sence = new BranchGroup();
        final TransformGroup tg = new TransformGroup();
        tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        final Alpha alpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 4000, 0, 0, 0, 0, 0);
        final float[] verts = {
                -1,  1,  0,
                -1, -1,  0,
                 1, -1,  0,
                 1,  1,  0
        };
        final float[] src = {
                -1,  1,  0,
                -1, -1,  0,
                 1, -1,  0,
                 1,  1,  0
        };
        final float[] cs = new float[3];
        Interpolator interpolator = new Interpolator() {
            private WakeupCriterion passiveWakeupCriterion = new WakeupOnElapsedFrames(0, true);
            private Transform3D transform3d = new Transform3D();
            @Override
            public void processStimulus(@SuppressWarnings("rawtypes") Enumeration criteria) {
                float alphaValue = alpha.value();
                double val = (1.0 - alphaValue) * 0 + alphaValue * Math.PI*2;
                for(int i=0;i<4;i++) {
                    System.arraycopy(src, i*3, cs, 0, 3);
                    float[] ps = MatrixKit.roteY(cs , val);
                    System.arraycopy(ps, 0, verts, i*3, 3);
                }
                wakeupOn(passiveWakeupCriterion);
                tg.setTransform(transform3d);
            }
        };
        interpolator.setSchedulingBounds(new BoundingSphere(new Point3d(0, 0, 0), 100f));
        tg.addChild(interpolator);
        sence.addChild(tg);
        QuadArray arr = new QuadArray(4, QuadArray.COORDINATES|QuadArray.BY_REFERENCE|QuadArray.TEXTURE_COORDINATE_2);
        arr.setCapability(QuadArray.ALLOW_COORDINATE_WRITE);
        arr.setTexCoordRefFloat(0, new float[] {0, 0, 1, 0, 1, 1, 1, 0});
        arr.setCoordRefFloat(verts);
        Shape3D shape = new Shape3D(arr);
        Appearance app = createTextureApp();
        shape.setAppearance(app);
        tg.addChild(shape);
        return sence;
    }
    private Appearance createTextureApp() {
        Appearance app = new Appearance();
        app.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE);
        BufferedImage image = getImage();
        app.setTexture(new TextureLoader(image, TextureLoader.ALLOW_NON_POWER_OF_TWO|TextureLoader.BY_REFERENCE).getTexture());
        //for loop.
        PolygonAttributes polygonAttributes = new PolygonAttributes();
        polygonAttributes.setCullFace(PolygonAttributes.CULL_NONE);
        polygonAttributes.setCapability(PolygonAttributes.ALLOW_CULL_FACE_WRITE);
        app.setPolygonAttributes(polygonAttributes);
        return app;
    }
    public static void main(String[] args)
    {
        Java3DTest test = new Java3DTest();
        test.action3d();
        test.setVisible(true);
    }
}


目录
相关文章
|
4天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
18天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
32 5
Java反射机制:解锁代码的无限可能
|
14天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
47 3
|
20天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
57 10
|
14天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
27 2
|
15天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
14天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
22天前
|
搜索推荐 Java 数据库连接
Java|在 IDEA 里自动生成 MyBatis 模板代码
基于 MyBatis 开发的项目,新增数据库表以后,总是需要编写对应的 Entity、Mapper 和 Service 等等 Class 的代码,这些都是重复的工作,我们可以想一些办法来自动生成这些代码。
29 6
|
22天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
21 5
|
22天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。

热门文章

最新文章