Canvas3DI.java
Go to the documentation of this file.
00001 // -*- indent-tabs-mode: nil; tab-width: 4; -*-
00002 /*
00003  * Copyright (c) 2008, AIST, the University of Tokyo and General Robotix Inc.
00004  * All rights reserved. This program is made available under the terms of the
00005  * Eclipse Public License v1.0 which accompanies this distribution, and is
00006  * available at http://www.eclipse.org/legal/epl-v10.html
00007  * Contributors:
00008  * General Robotix Inc.
00009  * National Institute of Advanced Industrial Science and Technology (AIST) 
00010  */
00011 package com.generalrobotix.ui.view.vsensor;
00012 
00013 import java.awt.GraphicsConfiguration;
00014 import java.awt.image.BufferedImage;
00015 
00016 import javax.media.j3d.DepthComponentFloat;
00017 import javax.media.j3d.GraphicsContext3D;
00018 import javax.media.j3d.Raster;
00019 
00025 @SuppressWarnings("serial")
00026 public class Canvas3DI extends javax.media.j3d.Canvas3D {
00027         // raster object
00028         protected Raster raster_;
00029         protected int width_;
00030         protected int height_;
00031         protected int rasterType_;
00032         protected GraphicsContext3D     gc_;
00033 
00034         // color buffer, depth buffer
00035         int[]   colorBuffer_;
00036         float[] depthBuffer_;
00037         boolean finished_ = false;
00038 
00039         // working space
00040         protected BufferedImage                 color_;
00041         protected DepthComponentFloat   depth_;
00042 
00047         public Canvas3DI(GraphicsConfiguration gc) {
00048                 super(gc);
00049         }
00050 
00056         public Canvas3DI(GraphicsConfiguration gc, boolean offscr,
00057                                          Raster raster, int width, int height, int rasterType) {
00058                 super(gc, offscr);
00059                 gc_ = getGraphicsContext3D();
00060                 raster_ = raster;
00061                 width_ = width;
00062                 height_ = height;
00063                 rasterType_ = rasterType;
00064 
00065                 if (rasterType_ == Raster.RASTER_DEPTH
00066                         || rasterType_ == Raster.RASTER_COLOR_DEPTH) {
00067                         depthBuffer_ = new float[width_ * height_];
00068                 }
00069                 if (rasterType_ == Raster.RASTER_COLOR
00070                         || rasterType_ == Raster.RASTER_COLOR_DEPTH) {
00071                     colorBuffer_ = new int[width_ * height_]; 
00072         }
00073                 setSize(width, height);
00074         }
00075 
00080         public int[] getColorBuffer() {
00081                 return colorBuffer_;
00082         }
00083 
00084         public byte[] getMonoBuffer() {
00085                 byte[] monoBuffer = new byte[width_*height_];
00086                 for (int i=0; i<width_; i++) {
00087                         for (int j=0; j<height_; j++) {
00088                                 monoBuffer[i+j*width_] = 
00089                                         (byte)(0.587*(0xff&(colorBuffer_[i+j*width_]>>8))
00090                                         +0.114*(0xff&(colorBuffer_[i+j*width_]))
00091                                         +0.299*(0xff&(colorBuffer_[i+j*width_]>>16)));
00092                         }
00093                 }
00094                 return monoBuffer;
00095         }
00096 
00101         public float[] getDepthBuffer() {
00102                 return depthBuffer_;
00103         }
00107         public void postSwap() {
00108                 super.postSwap();
00109                 _readRaster();
00110         }
00111 
00115         private void _readRaster() {
00116                 if (finished_)
00117                         return;
00118 
00119                 gc_.readRaster(raster_);
00120                 
00121                 // read color buffer
00122                 if (rasterType_ == Raster.RASTER_COLOR ||
00123                                 rasterType_ == Raster.RASTER_COLOR_DEPTH){
00124                         color_ = raster_.getImage().getImage();
00125                         color_.getRGB(0, 0, width_, height_, colorBuffer_, 0, width_);
00126             if (colorBuffer_.length != width_*height_){
00127                 System.out.println("invalid length of color buffer = "+colorBuffer_.length);
00128             }
00129                 }
00130 
00131                 // read depth buffer
00132                 if (rasterType_ == Raster.RASTER_DEPTH ||
00133                                 rasterType_ == Raster.RASTER_COLOR_DEPTH){
00134                         depth_ = (DepthComponentFloat)raster_.getDepthComponent();
00135                         depth_.getDepthData(depthBuffer_);
00136             if (depthBuffer_.length != width_*height_){
00137                 System.out.println("invalid length of depth buffer = "+depthBuffer_.length);
00138             }
00139                 }
00140                 finished_ = true;
00141         }
00142 
00143         public void renderOnce(){
00144         finished_ = false;
00145     }
00146 } 


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Thu Apr 11 2019 03:30:15