?? t3dgeometry.java~40~
字號(hào):
package j3ddemo;
import javax.media.j3d.Shape3D;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.behaviors.vp.*;
/**
* <p>Title: Java 3D Demo</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author Sttony
* @version 1.0
*/
public class T3DGeometry extends Shape3D {
private static final float sqrt3 = (float) Math.sqrt(3.0);
private TexCoord2f texCoord[] = {
new TexCoord2f(0.5f, sqrt3 / 2.0f),
new TexCoord2f(0.5f, sqrt3 / 2.0f),
new TexCoord2f(0.5f, sqrt3 / 2.0f),
new TexCoord2f(0.5f, sqrt3 / 2.0f),
new TexCoord2f(0.5f, sqrt3 / 2.0f),
};
public T3DGeometry(float size, Appearance ap) {
Point3f p1 = new Point3f(size, 0.0f, 0.0f);
Point3f p2 = new Point3f(0.0f, size, 0.0f);
Point3f p3 = new Point3f( -size, 0.0f, 0.0f);
Point3f p4 = new Point3f(0.0f, 0.0f, size);
Point3f p5 = new Point3f(0.0f,0.0f,-size);
Point3f[] verts = {
p1, p2, p4, // front face
p1, p4, p3, // left, back face
p2, p3, p4, // right, back face
p1, p5, p2, // bottom face
p2, p5, p3,
};
int i;
TriangleArray tetra = new TriangleArray(15, TriangleArray.COORDINATES |
TriangleArray.NORMALS |
TriangleArray.TEXTURE_COORDINATE_2);
tetra.setCoordinates(0, verts);
for (i = 0; i < 15; i++) {
tetra.setTextureCoordinate(0, i, texCoord[i % 3]);
}
int face;
Vector3f normal = new Vector3f();
Vector3f v1 = new Vector3f();
Vector3f v2 = new Vector3f();
Point3f[] pts = new Point3f[3];
for (i = 0; i < 3; i++)
pts[i] = new Point3f();
for (face = 0; face < 4; face++) {
tetra.getCoordinates(face * 3, pts);
v1.sub(pts[1], pts[0]);
v2.sub(pts[2], pts[0]);
normal.cross(v1, v2);
normal.normalize();
for (i = 0; i < 3; i++) {
tetra.setNormal( (face * 3 + i), normal);
}
}
this.setGeometry(tetra);
this.setAppearance(ap);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -