⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boxgeometry.java

📁 Java 3D Desktop Environment旨在使用Java 3D来创建一个3D桌面环境。功能包括:分布式的应用程序
💻 JAVA
字号:
package org.j3de.ui.geometry;  

import java.util.Map;
import java.util.WeakHashMap;

import javax.media.j3d.Bounds;
import javax.media.j3d.BoundingBox;
import javax.media.j3d.Geometry;   
import javax.media.j3d.QuadArray;

import javax.vecmath.Vector3f;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;

import org.j3de.ui.UIGeometry;
import org.j3de.ui.impl.BoundsScale;
import org.j3de.ui.impl.UnknownBoundsException;

public class BoxGeometry implements UIGeometry { 
  
  private static Map geometries;
  
  private static final float[] verts = {
    // front face
     1.0f,  0.0f,  1.0f,
     1.0f,  1.0f,  1.0f,
     0.0f,  1.0f,  1.0f,
     0.0f,  0.0f,  1.0f,
    // back face
     0.0f,  0.0f,  0.0f,
     0.0f,  1.0f,  0.0f,
     1.0f,  1.0f,  0.0f,
     1.0f,  0.0f,  0.0f,
    // right face
     1.0f,  0.0f,  0.0f,
     1.0f,  1.0f,  0.0f,
     1.0f,  1.0f,  1.0f,
     1.0f,  0.0f,  1.0f,
    // left face
     0.0f,  0.0f,  1.0f,
     0.0f,  1.0f,  1.0f,
     0.0f,  1.0f,  0.0f,
     0.0f,  0.0f,  0.0f,
    // top face
     1.0f,  1.0f,  1.0f,
     1.0f,  1.0f,  0.0f,
     0.0f,  1.0f,  0.0f,
     0.0f,  1.0f,  1.0f,
    // bottom face
     0.0f,  0.0f,  1.0f,
     0.0f,  0.0f,  0.0f,
     1.0f,  0.0f,  0.0f,
     1.0f,  0.0f,  1.0f,
  };
  
  private static final float[] tcoords = {
    // front
    1.0f, 0.0f,
    1.0f, 1.0f,
    0.0f, 1.0f,
    0.0f, 0.0f,
    // back
    1.0f, 0.0f,
    1.0f, 1.0f,
    0.0f, 1.0f,
    0.0f, 0.0f,
    //right
    1.0f, 0.0f,
    1.0f, 1.0f,
    0.0f, 1.0f,
    0.0f, 0.0f,
    // left
    1.0f, 0.0f,
    1.0f, 1.0f,
    0.0f, 1.0f,
    0.0f, 0.0f,
    // top
    1.0f, 0.0f,
    1.0f, 1.0f,
    0.0f, 1.0f,
    0.0f, 0.0f,
    // bottom
    0.0f, 1.0f,
    0.0f, 0.0f,
    1.0f, 0.0f,
    1.0f, 1.0f
  };
  
  
  private static final float[] normals = {
     0.0f,  0.0f,  1.0f,  // front face
     0.0f,  0.0f,  1.0f,  // front face
     0.0f,  0.0f,  1.0f,  // front face
     0.0f,  0.0f,  1.0f,  // front face
     0.0f,  0.0f, -1.0f,  // back face
     0.0f,  0.0f, -1.0f,  // back face
     0.0f,  0.0f, -1.0f,  // back face
     0.0f,  0.0f, -1.0f,  // back face
     1.0f,  0.0f,  0.0f,  // right face
     1.0f,  0.0f,  0.0f,  // right face
     1.0f,  0.0f,  0.0f,  // right face
     1.0f,  0.0f,  0.0f,  // right face
    -1.0f,  0.0f,  0.0f,  // left face
    -1.0f,  0.0f,  0.0f,  // left face
    -1.0f,  0.0f,  0.0f,  // left face
    -1.0f,  0.0f,  0.0f,  // left face
     0.0f,  1.0f,  0.0f,  // top face
     0.0f,  1.0f,  0.0f,  // top face
     0.0f,  1.0f,  0.0f,  // top face
     0.0f,  1.0f,  0.0f,  // top face
     0.0f, -1.0f,  0.0f,  // bottom face
     0.0f, -1.0f,  0.0f,  // bottom face
     0.0f, -1.0f,  0.0f,  // bottom face
     0.0f, -1.0f,  0.0f,  // bottom face
  };
  
  private static BoundingBox normBox = new BoundingBox(new Point3d(0.0f, 0.0f, 0.0f), 
                                                       new Point3d(1.0f, 1.0f, 1.0f));
  
  
  public BoxGeometry() {
    geometries = new WeakHashMap();
  }
  
  public Geometry createGeometry(Point3f size) {    
    QuadArray quad = new QuadArray(24, QuadArray.COORDINATES | 
                                       QuadArray.NORMALS | 
                         //              QuadArray.TEXTURE_COORDINATE_2 |
                                       QuadArray.BY_REFERENCE); 
                                       
    float[] actverts = new float[72];
    int j;                                
    
    for (int i=0; i<24; i++) {
      j = 3*i;
      actverts[j  ] = verts[j  ] * size.x;
      actverts[j+1] = verts[j+1] * size.y;
      actverts[j+2] = verts[j+2] * size.z;
    }
     
    quad.setCoordRefFloat(actverts);  
    quad.setNormalRefFloat(normals);  
   // quad.setTexCoordRefFloat(0, tcoords); 
    
    return quad;
  }
   
  public Geometry getGeometry(Bounds bounds) {       
    Point3f size;
    
    try {
      size = BoundsScale.getAllScales(normBox, bounds);
    } catch (UnknownBoundsException e) {
      size = new Point3f(1.0f, 1.0f, 1.0f);
    }
        
    Geometry geometry = (Geometry)geometries.get(size);
    
    if (geometry != null)
      return geometry;
      
    geometry = createGeometry(size);
    geometries.put(size, geometry);    
    
    return geometry;
  }               
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -