📄 geometrybyreferencetest.java
字号:
transparency = new JCheckBox("EnableTransparency",
false);
transparency.addActionListener(this);
panel.add(transparency);
updates = new JComboBox(updateComp);
updates.setLightWeightPopupEnabled(false);
updates.addActionListener(this);
updates.setSelectedIndex(0);
panel.add(new JLabel("UpdateData"));
panel.add(updates);
return panel;
}
public GeometryByReferenceTest() {
}
public void init() {
Container contentPane = getContentPane();
Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
contentPane.add("Center", c);
BranchGroup scene = createSceneGraph();
// SimpleUniverse is a Convenience Utility class
u = new SimpleUniverse(c);
// add mouse behaviors to the viewingPlatform
ViewingPlatform viewingPlatform = u.getViewingPlatform();
// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
viewingPlatform.setNominalViewingTransform();
u.addBranchGraph(scene);
// add Orbit behavior to the ViewingPlatform
OrbitBehavior orbit = new OrbitBehavior(c, OrbitBehavior.REVERSE_ALL);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
orbit.setSchedulingBounds(bounds);
viewingPlatform.setViewPlatformBehavior(orbit);
// Create GUI
JPanel p = new JPanel();
BoxLayout boxlayout = new BoxLayout(p,
BoxLayout.Y_AXIS);
p.add(createGeometryByReferencePanel());
p.add(createUpdatePanel());
p.setLayout(boxlayout);
contentPane.add("South", p);
}
public void destroy() {
u.cleanup();
}
public void actionPerformed(ActionEvent e) {
Object target = e.getSource();
GeometryArray geo;
boolean setColor = false, setVertex = false;
if (target == geomType) {
geo = geoArrays[geomType.getSelectedIndex()];
// Set everything to null, and set it later ..
geo.setColorRefFloat(null);
geo.setColorRef3f(null);
geo.setCoordRefFloat(null);
geo.setCoordRef3f(null);
shape.setGeometry(geoArrays[geomType.getSelectedIndex()]);
setColor = true;
setVertex= true;
}
else if (target == transparency) {
if (transparency.isSelected()) {
transp.setTransparencyMode(TransparencyAttributes.BLENDED);
}
else {
transp.setTransparencyMode(TransparencyAttributes.NONE);
}
}
else if (target == updates) {
updateIndex = updates.getSelectedIndex();
if (updateIndex == 1) {
System.out.println("Doing coordinate update");
((GeometryArray)(shape.getGeometry())).updateData(this);
}
else if (updateIndex == 2) {
System.out.println("Doing color update");
((GeometryArray)(shape.getGeometry())).updateData(this);
}
}
else if (target == vertexType) {
geo = ((GeometryArray)shape.getGeometry());
if (vertexIndex == 0) {
geo.setCoordRefFloat(null);
}
else if (vertexIndex == 1) {
geo.setCoordRef3f(null);
}
vertexIndex = vertexType.getSelectedIndex();
setVertex = true;
}
else if (target == colorType) {
geo = (GeometryArray) shape.getGeometry();
if (colorIndex == 0) {
geo.setColorRefFloat(null);
}
else if (colorIndex == 1) {
geo.setColorRef3f(null);
}
colorIndex = colorType.getSelectedIndex();
setColor = true;
}
if (setVertex) {
geo = (GeometryArray) shape.getGeometry();
if (vertexIndex == 0) {
if (geo instanceof IndexedGeometryArray)
geo.setCoordRefFloat(indexedFloatVerts);
else
geo.setCoordRefFloat(floatVerts);
}
else if (vertexIndex == 1) {
if (geo instanceof IndexedGeometryArray)
geo.setCoordRef3f(indexedP3fVerts);
else
geo.setCoordRef3f(p3fVerts);
}
}
if (setColor) {
geo = (GeometryArray) shape.getGeometry();
if (colorIndex == 0) {
if (geo instanceof IndexedGeometryArray)
geo.setColorRefFloat(indexedFloatClrs);
else
geo.setColorRefFloat(floatClrs);
}
else if (colorIndex == 1) {
if (geo instanceof IndexedGeometryArray)
geo.setColorRef3f(indexedC3fClrs);
else
geo.setColorRef3f(c3fClrs);
}
}
}
public static void main(String[] args) {
Frame frame = new MainFrame(new GeometryByReferenceTest(), 800, 800);
}
public GeometryArray createGeometry (int type) {
GeometryArray tetra = null;
if (type == 1) {
tetra =new TriangleArray(12,
TriangleArray.COORDINATES|
TriangleArray.COLOR_3|
TriangleArray.BY_REFERENCE);
tetra.setCoordRefFloat(floatVerts);
tetra.setColorRefFloat(floatClrs);
}
else if (type == 2) {
tetra = new TriangleStripArray(12,
TriangleStripArray.COORDINATES|
TriangleStripArray.COLOR_3|
TriangleStripArray.BY_REFERENCE,
stripVertexCounts);
tetra.setCoordRefFloat(floatVerts);
tetra.setColorRefFloat(floatClrs);
}
else if (type == 3) { // Indexed Geometry
tetra = new IndexedTriangleArray(4,
IndexedTriangleArray.COORDINATES|
IndexedTriangleArray.COLOR_3|
IndexedTriangleArray.BY_REFERENCE,
12);
tetra.setCoordRefFloat(indexedFloatVerts);
tetra.setColorRefFloat(indexedFloatClrs);
((IndexedTriangleArray)tetra).setCoordinateIndices(0, indices);
((IndexedTriangleArray)tetra).setColorIndices(0, indices);
}
else if (type == 4) { // Indexed strip geometry
tetra = new IndexedTriangleStripArray(4,
IndexedTriangleStripArray.COORDINATES|
IndexedTriangleStripArray.COLOR_3|
IndexedTriangleStripArray.BY_REFERENCE,
12,
stripVertexCounts);
tetra.setCoordRefFloat(indexedFloatVerts);
tetra.setColorRefFloat(indexedFloatClrs);
((IndexedTriangleStripArray)tetra).setCoordinateIndices(0, indices);
((IndexedTriangleStripArray)tetra).setColorIndices(0, indices);
}
if (tetra != null)
tetra.setCapability(GeometryArray.ALLOW_REF_DATA_WRITE);
return tetra;
}
public void updateData(Geometry geometry) {
int i;
float val;
if (updateIndex == 1) { // geometry
// Translate the geometry by a small amount in x
vertexCount++;
if ((vertexCount &1) == 1)
val = 0.2f;
else
val = -0.2f;
if (vertexIndex == 0) {
// Do Indexed geometry
for (i = 0; i < indexedFloatVerts.length; i+=3) {
indexedFloatVerts[i] += val;
}
// Do non-indexed float geometry
for (i = 0; i < floatVerts.length; i+=3) {
floatVerts[i] += val;
}
}
else {
// If p3f do each point only once
for (i = 0; i < indexedP3fVerts.length; i++) {
indexedP3fVerts[i].x += val;
}
}
}
else if (updateIndex == 2) { // colors
colorCount++;
if ((colorCount & 1) == 1)
val = 0.4f;
else
val = -0.4f;
if (colorIndex == 0) {
// Do Indexed geometry
for (i = 0; i < indexedFloatClrs.length; i+=3) {
indexedFloatClrs[i] += val;
}
// Do non-indexed float geometry
for (i = 0; i < floatClrs.length; i+=3) {
floatClrs[i] += val;
}
}
else {
// If c3f do each point only once
for (i = 0; i < indexedC3fClrs.length; i++) {
indexedC3fClrs[i].x += val;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -