`
niceo
  • 浏览: 107526 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Canvas3D

    博客分类:
  • JAVA
阅读更多
最近在做一些有关于java3D方面的东东。
突然有个想法把Java3D 的场景保存成图片来。可是在保存的过程中出现了点问题。

javax.media.j3d.IllegalRenderingStateException: GL_VERSION
	at javax.media.j3d.NativePipeline.createNewContext(Native Method)
	at javax.media.j3d.NativePipeline.createNewContext(NativePipeline.java:2736)
	at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:4895)
	at javax.media.j3d.Canvas3D.createNewContext(Canvas3D.java:2421)
	at javax.media.j3d.Renderer.doWork(Renderer.java:895)
	at javax.media.j3d.J3dThread.run(J3dThread.java:256)
Rendered to offscreen

DefaultRenderingErrorListener.errorOccurred:
CONTEXT_CREATION_ERROR: Renderer: Error creating Canvas3D graphics context
graphicsDevice = Win32GraphicsDevice[screen=0]
canvas = javax.media.j3d.Canvas3D[canvas0,0,0,400x400,invalid]
Saved image.
Java 3D ERROR : OpenGL 1.2 or better is required (GL_VERSION=1.1)


程序代码的:
 protected void onSaveImage() {
	 System.out.println("application stop this !!!");
   offScreenCanvas3D.renderOffScreenBuffer();
   offScreenCanvas3D.waitForOffScreenRendering();
   System.out.println("Rendered to offscreen");

   try {
     FileOutputStream fileOut = new FileOutputStream("C:\\image.jpg");

     JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(fileOut);
     encoder.encode(imageComponent.getImage());

     fileOut.flush();
     fileOut.close();
   } catch (Exception e) {
     System.err.println("Failed to save image: " + e);
   }


这是程序代码的片段:

分享到:
评论
6 楼 tl_nicole 2011-05-04  
小弟最近正在学习JAVA3D,求楼主源码学习~~不甚感激
5 楼 niceo 2009-06-01  
gridrender 写道

楼主能不能给出完成的源代码,供大家参考我现在正在做这样一个功能,想和你交流一下我的QQ:327524866请加我


gridrender 看到你的消息我很欣慰,主要是最近在出差刚刚回来。^_^ 交流当然是很好的啊!感谢你的支持
4 楼 gridrender 2009-05-25  
楼主能不能给出完成的源代码,供大家参考
我现在正在做这样一个功能,想和你交流一下
我的QQ:327524866
请加我
3 楼 niceo 2008-12-02  
-----------------------------------------------------------------------------------
afteryuan 写道

我在网上看到的都是通过OffScreenCanvas3D 这个对象去抓屏,我想知道有没有办法从内存里面直接把图片输出来.因为我想做的是从客户端上传一个模型贴图到服务器 ,然后服务器上的java3D程序导入这个贴图,贴到模型上,然后生成图片.

------------------------------------------------------------------------------------

楼上的这种方法我没有去尝试的实现他。
但是我感觉这样好像有点很是麻烦、、、、、、
O(∩_∩)O哈哈~
2 楼 afteryuan 2008-12-01  
我在网上看到的都是通过OffScreenCanvas3D 这个对象去抓屏,我想知道有没有办法从内存里面直接把图片输出来.因为我想做的是从客户端上传一个模型贴图到服务器 ,然后服务器上的java3D程序导入这个贴图,贴到模型上,然后生成图片.
1 楼 niceo 2008-08-13  
我所使用的Java 3d 是Java3D_1.5.1
不过我已经采取了另一种方法来解决这个问题。
java.awt.robot
我采用他来抓取屏幕
他可以将动态的旋转的java3D 场景直接抓取。
class PaintCanvas extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private ScreenCapture screen = null;

	private BufferedImage scrImg = null;

	public PaintCanvas(ScreenCapture screen) {
		this.screen = screen;
	}

	protected void paintComponent(Graphics g) {
		// TODO Auto-generated method stub
		// BufferedImage scrImg = screen.captureScreen();
		if (scrImg != null) {
			int iWidth = this.getWidth();
			int iHeight = this.getHeight();
			g.drawImage(scrImg, 0, 0, iWidth, iHeight, 0, 0, scrImg.getWidth(),
					scrImg.getHeight(), null);
		}

	}

	public void drawScreen() {
		Graphics g = this.getGraphics();
		scrImg = screen.captureScreen();
		if (scrImg != null) {
			this.paintComponent(g);

		}
		g.dispose();
	}

}

相关推荐

Global site tag (gtag.js) - Google Analytics