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);
    }
}


目录
相关文章
|
8天前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
152 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
3天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
93 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
26天前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
82 35
|
26天前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
42 16
|
1月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
272 11
|
1月前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
2月前
|
算法 Java 测试技术
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
使用 BenchmarkDotNet 对 .NET 代码进行性能基准测试
66 13
|
2月前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
77 3
|
2月前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
78 2
|
2月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
142 5

热门文章

最新文章