📄 boxgeometry.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 + -