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

📄 geometrybyreferencetest.java

📁 java 3d 3
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	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 + -