热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第一个Java3D小程序SimpleCone

import java.applet.Applet;              //表示程序是Applet程序 import java.awt.BorderLayout;          

import java.applet.Applet;              //表示程序是Applet程序



import java.awt.BorderLayout;           //表示窗口环境采用BorderLayout方式进行布局
import com.sun.j3d.utils.geometry.Cone; //表示调用生成Cone的一个Utility,该包提供基本形体
import com.sun.j3d.utils.universe.*;    //表示调用一些设置基本的观测位置所用的类
import javax.media.j3d.*;               //表示调用程序所需的Java3d核心类,所有的Java3d程序必须带有这一条
import javax.vecmath.*;                 //表示调用程序所需的定义矢量计算所用的数学类

//import com.sun.j3d.utils.applet.MainFrame;//可以使程序既为application也为applet
import java.awt.GraphicsConfiguration; //

public class SimpleCone extends Applet{
public BranchGroup createSceneGraph(){
   BranchGroup objRoot =new BranchGroup();         //objRoot对象用于向程序的构造方法提供整个createSceneGraph方法里的内容
   TransformGroup objTrans=new TransformGroup();   //新建objTrans对象用于存放坐标系
   objRoot.addChild(objTrans);                     //缺省状况下Java3d的观察点位于(0,0,2.41),所以这里objTrans两句不要也可运行成功
  
   BoundingSphere bounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0); //新建球形限制框,以坐标原点为中心,半径100
  
   Color3f bgColor=new Color3f(1.0f,1.0f,1.0f);   //设置背景色为白色
   Background bg=new Background(bgColor);         //设置背景对象bg的颜色为bgColor
   bg.setApplicationBounds(bounds);               //设置背景应用范围为bounds
   objRoot.addChild(bg);                          //将背景对象bg添加到objRoot对象中
  
   Color3f directionalColor=new Color3f(1.f,0.f,0.f);//设置光源为绿色
   Vector3f vec=new Vector3f(-1.f,0.f,-1.f);          //设置光源为-Z方向
   DirectionalLight directionalLight=new DirectionalLight(directionalColor,vec);//使用直接光照
   directionalLight.setInfluencingBounds(bounds);    //设置光照影响范围为bounds
   objRoot.addChild(directionalLight);               //将光照对象添加到objRoot中
  
   Appearance app=new Appearance();
   Material material=new Material();
   //material.setEmissiveColor(new Color3f(1.0f,0.0f,0.0f));//外观 无光照条件下 材质为辐射颜色,设置为红色
                material.setDiffuseColor(new Color3f(1.0f,1.0f,0.0f));   //有光照条件下,材质为漫反射颜色,设置为黄色 
   app.setMaterial(material);                               //设置材质material到对象app,material为空会使光照失效
  
   Cone cone=new Cone(.5f,1.0f,1,app);//绘制半径为0.5,高为1.0的圆锥,片元标记为1,外观为app(其中已为圆锥体设置了材质属性)
   objTrans.addChild(cone);
  
   objRoot.compile();
   return objRoot;
}
public SimpleCone(){
   setLayout(new BorderLayout());
   //Canvas3D c=new Canvas3D(null);
   GraphicsConfiguration config=SimpleUniverse.getPreferredConfiguration(); 
   Canvas3D c=new Canvas3D(config);
   //将上一句换成以上两句;记得导入import java.awt.GraphicsConfiguration;
   add("Center",c);//applet的方法,用于将指定组件(画布c)添加到该容器(applet)中
   BranchGroup scene=createSceneGraph();
   SimpleUniverse u=new SimpleUniverse(c);                   //以3d画布实例c创建一个局部单一的查看平台和一个观察者对象
   u.getViewingPlatform().setNominalViewingTransform();
   u.addBranchGraph(scene);
  
}
//public static void main(String args[])
//{
// new MainFrame(new SimpleCone(),400,300);
//}

}


推荐阅读
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
author-avatar
Chinaexpoinfo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有