- 浏览: 81866 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
kennyluo:
网页上发布的代码上缺少了"//",注意&q ...
apply a Texture Image to a Cube -
kyng:
图片放到目录下。。。修改对应名称 。。怎么还出错!!!
Ex ...
apply a Texture Image to a Cube
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Paint; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.net.URL; import java.util.HashMap; import javax.media.j3d.Alpha; import javax.media.j3d.Appearance; import javax.media.j3d.Background; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.ImageComponent2D; import javax.media.j3d.PolygonAttributes; import javax.media.j3d.RotationInterpolator; import javax.media.j3d.Shape3D; import javax.media.j3d.Texture; import javax.media.j3d.Texture2D; import javax.media.j3d.TextureAttributes; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.media.j3d.View; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import com.sun.j3d.utils.image.TextureLoader; import com.sun.j3d.utils.universe.SimpleUniverse; public class BooksDemo extends JFrame { private static final int CANVAS3D_WIDTH = 400; private static final int CANVAS3D_HEIGHT = 400; private boolean front = true; private JPanel xpanel = new JPanel(); private Canvas3D c3d; private RotationInterpolator rotator1; private Alpha rotor1Alpha; private com.sun.j3d.utils.geometry.Box book; private HashMap textures = new HashMap(6); public BooksDemo() { super("AmazonPick"); JButton cover1 = UIHelper.createButton("", "cover1_small_button", true); cover1.addActionListener(new CoverSwitcher("cover1")); JButton cover2 = UIHelper.createButton("", "cover2_small_button", true); cover2.addActionListener(new CoverSwitcher("cover2")); JButton cover3 = UIHelper.createButton("", "cover3_small_button", true); cover3.addActionListener(new CoverSwitcher("cover3")); JPanel buttons = new JPanel(); buttons.add(cover1); buttons.add(cover2); buttons.add(cover3); buttons.setOpaque(false); c3d = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); c3d.setSize(CANVAS3D_WIDTH, CANVAS3D_HEIGHT); xpanel.add(c3d); xpanel.setOpaque(false); this.setContentPane(new GradientPanel()); this.getContentPane().setLayout(new BorderLayout()); this.getContentPane().add(xpanel, BorderLayout.CENTER); this.getContentPane().add(buttons, BorderLayout.SOUTH); this.pack(); this.setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); UIHelper.centerOnScreen(this); } private boolean isBookShowingFront() { return front; } private void rotateBook() { if (!isBookShowingFront()) { rotator1.setMinimumAngle((float) Math.PI * 1.0f); rotator1.setMaximumAngle(0.0f); } else { rotator1.setMinimumAngle(0.0f); rotator1.setMaximumAngle((float) Math.PI * 1.0f); } front = !front; rotor1Alpha.setStartTime(System.currentTimeMillis()); } private class CoverSwitcher implements ActionListener { private String coverName; CoverSwitcher(String coverName) { this.coverName = coverName; } public void actionPerformed(ActionEvent evt) { book.getShape(isBookShowingFront() ? book.BACK : book.FRONT) .setAppearance((Appearance) textures.get(coverName)); rotateBook(); } } public void createScene() { BufferedImage image = new BufferedImage(xpanel.getWidth(), xpanel .getHeight(), BufferedImage.TYPE_INT_RGB); getContentPane().paint(image.getGraphics()); BufferedImage subImage = new BufferedImage(CANVAS3D_WIDTH, CANVAS3D_HEIGHT, BufferedImage.TYPE_INT_RGB); ((Graphics2D) subImage.getGraphics()).drawImage(image, null, -c3d .getX(), -c3d.getY()); Background bg = new Background(new ImageComponent2D( ImageComponent2D.FORMAT_RGB, subImage)); BoundingSphere bounds = new BoundingSphere(); bounds.setRadius(100.0); bg.setApplicationBounds(bounds); BranchGroup objRoot = new BranchGroup(); objRoot.addChild(bg); TransformGroup objTg = new TransformGroup(); objTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); Transform3D yAxis = new Transform3D(); rotor1Alpha = new Alpha(1, 400); rotator1 = new RotationInterpolator(rotor1Alpha, objTg, yAxis, (float) Math.PI * 1.0f, (float) Math.PI * 2.0f); rotator1.setSchedulingBounds(bounds); textures.put("pages_top", createTexture("pages_top.jpg")); textures.put("pages", createTexture("amazon.jpg")); textures.put("amazon", createTexture("amazon.jpg")); textures.put("cover1", createTexture("cover1.jpg")); textures.put("cover2", createTexture("cover2.jpg")); textures.put("cover3", createTexture("cover3.jpg")); book = new com.sun.j3d.utils.geometry.Box(0.5f, 0.7f, 0.15f, com.sun.j3d.utils.geometry.Box.GENERATE_TEXTURE_COORDS, new Appearance()); book.getShape(book.TOP).setAppearance( (Appearance) textures.get("pages_top")); book.getShape(book.RIGHT).setAppearance( (Appearance) textures.get("pages")); book.getShape(book.LEFT).setAppearance( (Appearance) textures.get("amazon")); book.getShape(book.FRONT).setAppearance( (Appearance) textures.get("cover1")); book.getShape(book.BACK).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); book.getShape(book.FRONT).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); // book.getShape(book.LEFT).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); // book.getShape(book.RIGHT).setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); objTg.addChild(book); objTg.addChild(rotator1); Transform3D spin = new Transform3D(); Transform3D tempspin = new Transform3D(); spin.rotX(Math.PI / 8.0d); tempspin.rotY(Math.PI / 7.0d); spin.mul(tempspin); TransformGroup objTrans = new TransformGroup(spin); objTrans.addChild(objTg); objRoot.addChild(objTrans); SimpleUniverse u = new SimpleUniverse(c3d); u.getViewingPlatform().setNominalViewingTransform(); u.addBranchGraph(objRoot); View view = u.getViewer().getView(); view.setSceneAntialiasingEnable(true); } private Appearance createTexture(String fileName) { Image sourceImage = UIHelper.readImage(fileName); if (sourceImage == null) System.out.println("Image could not be loaded from " + fileName); TextureLoader loader = new TextureLoader(sourceImage, this); ImageComponent2D image = loader.getImage(); if (image == null) System.out.println("Texture could not be loaded from " + fileName); Texture2D texture = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA, image.getWidth(), image.getHeight()); texture.setImage(0, image); texture.setEnable(true); texture.setMagFilter(Texture.BASE_LEVEL_LINEAR); texture.setMinFilter(Texture.BASE_LEVEL_LINEAR); Appearance appearance = new Appearance(); PolygonAttributes polyAttributes = new PolygonAttributes( PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_NONE, 0f); appearance.setPolygonAttributes(polyAttributes); appearance.setTexture(texture); TextureAttributes textureAttributes = new TextureAttributes(); appearance.setTextureAttributes(textureAttributes); return appearance; } private static class GradientPanel extends JPanel { public void paintComponent(Graphics g) { super.paintComponent(g); if (!isOpaque()) { return; } int width = getWidth(); int height = getHeight(); Graphics2D g2 = (Graphics2D) g; Paint storedPaint = g2.getPaint(); g2.setPaint(new GradientPaint(0, 0, Color.WHITE, width, height, new Color(200, 200, 200))); g2.fillRect(0, 0, width, height); g2.setPaint(storedPaint); } } public static void main(String argv[]) { final BooksDemo xframe = new BooksDemo(); xframe.setVisible(true); SwingUtilities.invokeLater(new Runnable() { public void run() { xframe.createScene(); } }); } } final class UIHelper { public static JButton createButton(String text) { JButton button = new JButton(text); button.setFocusPainted(true); button.setBorderPainted(true); button.setContentAreaFilled(true); return button; } public static JButton createButton(String text, String icon) { return createButton(text, icon, false); } public static JButton createButton(String text, String icon, boolean flat) { ImageIcon iconNormal = readImageIcon(icon + ".png"); ImageIcon iconHighlight = readImageIcon(icon + "_highlight.png"); ImageIcon iconPressed = readImageIcon(icon + "_pressed.png"); JButton button = new JButton(text, iconNormal); button.setFocusPainted(!flat); button.setBorderPainted(!flat); button.setContentAreaFilled(!flat); if (iconHighlight != null) { button.setRolloverEnabled(true); button.setRolloverIcon(iconHighlight); } if (iconPressed != null) button.setPressedIcon(iconPressed); return button; } public static void centerOnScreen(Component component) { Dimension paneSize = component.getSize(); Dimension screenSize = component.getToolkit().getScreenSize(); component.setLocation((screenSize.width - paneSize.width) / 2, (screenSize.height - paneSize.height) / 2); } public static ImageIcon readImageIcon(String fileName) { Image image = readImage(fileName); if (image == null) return null; return new ImageIcon(image); } public static Image readImage(String fileName) { URL url = UIHelper.class.getResource("images/" + fileName); if (url == null) return null; return java.awt.Toolkit.getDefaultToolkit().getImage(url); } }
发表评论
-
apply a Texture Image to a Cube
2010-07-28 01:45 1647import java.applet.Applet; imp ... -
Demonstration of the use of scoping for controlling the influence of lights
2010-07-28 01:41 836import java.applet.Applet; imp ... -
Dynamic texture coordinate generation using the TexCoordGeneration class
2010-07-28 01:30 1306This example illustrates dynami ... -
illustrate use of light influencing bounds, and bounding leaves
2010-07-28 01:25 927// //CLASS //ExLightBounds - ... -
ExAmbientLight - illustrate use of ambient lights
2010-07-28 01:19 1012// //CLASS //ExAmbientLight - ... -
ExDirectionalLight - illustrate use of directional lights
2010-07-28 01:12 964// //CLASS //ExDirectionalLig ... -
LightScopeApp creates a scene that is paritally light
2010-07-28 01:09 741import java.applet.Applet; imp ... -
Java3D的场景图结构
2010-07-28 01:07 1986Java3D的场景图结构 Java3D实际上是Java ... -
Java 3d 1.5.2 API Document
2010-03-09 16:17 1020Java 3d 1.5.2 API Document Jav ... -
基于直接光照的全局光照模拟
2010-02-21 11:34 16501、概述 近年来,随着计算机图形图像技术在游戏、影视动西 ...
相关推荐
This sample teaches you how to create an OpenGL based 3D Drawing application and demonstrates the GLU functions and hit testing using OpenGL and MFC (51KB)
Mastering C++ Game Development Create professional and realistic 3D games using C++ 17 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书
3D Game Programming for Kids: Create Interactive Worlds with JavaScript, 2nd Edition by Chris Strom epub电子书 English | 2018 | ISBN: 1680502701 | 374 Pages | EPUB | 14 MB You know what’s even ...
3D Game Programming for Kids: Create Interactive Worlds with JavaScript by Chris Strom English | 2013 | 308 Pages | True PDF, EPUB | 18 MB You know what's even better than playing games? Creating ...
带详细解决方案说明文档,提供三种解决方式,另外包含stax2-api.jar,stax2-api-source.jar,woodstox-core-asl-4.4.1.jar,stax-ex.jar,wstx-asl-3.2.9.jar等jar文件,亲测有效。
What This Book Covers This book gives a complete introduction to the entire Swing component set. Of course, it shows you how to use all of the components: how to display them on the screen, ...
art and also give a much richer experience in the 3D flythroughs created using image-based rendering, even for scenes with significant nonvertical structure. Using this approach, we have created ...
Hands-On Game Development without Coding: Create 2D and 3D games with Visual Scripting in Unity by Lucas Bertolini English | 2018 | ISBN: 1789538335 | 430 Pages | EPUB | 102 MB Develop your own games...
, OGRE 3D, an open source Object-Oriented 3D Graphics Rendering Engine written in C++, which can be utilized to create a variety of 3D applications and is commonly used in game creation, can help you ...
In Learning Web-based Virtual Reality, you will build a number of 3D VR-based applications. In these apps, you will be able to test the VR environments, walk through the virtual world, interact with ...
You then get to know the best techniques to create physically based materials that boost the look and realism of any 3D scene. Special chapters are reserved to create efficient animations, still ...
A low poly asset pack of characters, buildings, props, items and environment assets to create a fantasy based polygonal style game. Modular sections are easy to piece together in a variety of ...
The "Unity3D Book Page Curl" is a unity package that is used to create a book with page flip effect using unity3D native UI tools. Getting Started Create your first book: Import the unity package...