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

📄 geometrybyreferencetest.java

📁 java 3d编程的一些例子源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	String updateComp[] = { "None","Geometry", "Color"};		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 + -