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

📄 geometrybyreferenceniobuffer.java

📁 java 3d编程的一些例子源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	panel.setBorder(new TitledBorder("Geometry Type"));	String values[] = {"Array", "Strip", "Indexed", "IndexedStrip"};	geomType = new JComboBox(values);	geomType.setLightWeightPopupEnabled(false);	geomType.addActionListener(this);	geomType.setSelectedIndex(0);	panel.add(new JLabel("Geometry Type")); 		panel.add(geomType);	return panel;    }    JPanel createUpdatePanel() {	JPanel panel = new JPanel();	panel.setBorder(new TitledBorder("Other Attributes"));	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 GeometryByReferenceNIOBuffer() {    }    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.setColorRefBuffer(null);	    geo.setCoordRefBuffer(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);	    }	}	if (setVertex) {	    geo = (GeometryArray) shape.getGeometry();	    if (geo instanceof IndexedGeometryArray)		geo.setCoordRefBuffer(indexedFloatBufferCoord);	    else		geo.setCoordRefBuffer(floatBufferCoord);	    	}	if (setColor) {	    geo = (GeometryArray) shape.getGeometry();	    if (geo instanceof IndexedGeometryArray)		geo.setColorRefBuffer(indexedFloatBufferColor);	    else		geo.setColorRefBuffer(floatBufferColor);	}    }			       public static void main(String[] args) {	Frame frame = new MainFrame(new GeometryByReferenceNIOBuffer(), 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|				     TriangleArray.USE_NIO_BUFFER);	    	    tetra.setCoordRefBuffer(floatBufferCoord);	    tetra.setColorRefBuffer(floatBufferColor);	}	else if (type == 2) {	    tetra = new TriangleStripArray(12,					   TriangleStripArray.COORDINATES|					   TriangleStripArray.COLOR_3|					   TriangleStripArray.BY_REFERENCE|					   TriangleStripArray.USE_NIO_BUFFER,					   stripVertexCounts);	    tetra.setCoordRefBuffer(floatBufferCoord);	    tetra.setColorRefBuffer(floatBufferColor);	    	}	else if (type == 3) { // Indexed Geometry	    tetra = new IndexedTriangleArray(4,					     IndexedTriangleArray.COORDINATES|					     IndexedTriangleArray.COLOR_3|					     IndexedTriangleArray.BY_REFERENCE|					     IndexedTriangleArray.USE_NIO_BUFFER,					     //IndexedTriangleStripArray.USE_COORD_INDEX_ONLY,					     12);	    tetra.setCoordRefBuffer(indexedFloatBufferCoord);	    tetra.setColorRefBuffer(indexedFloatBufferColor);	    ((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|						  IndexedTriangleStripArray.USE_NIO_BUFFER|						  IndexedTriangleStripArray.USE_COORD_INDEX_ONLY,						  12,						  stripVertexCounts);	    tetra.setCoordRefBuffer(indexedFloatBufferCoord);	    tetra.setColorRefBuffer(indexedFloatBufferColor);	    ((IndexedTriangleStripArray)tetra).setCoordinateIndices(0, indices);	    /*	    // Do not set color indices in UCIO mode	    ((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;	float val1;	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;	    FloatBuffer indexedCoord = (FloatBuffer)indexedFloatBufferCoord.getBuffer();	    indexedCoord.rewind();	    FloatBuffer coord = (FloatBuffer)floatBufferCoord.getBuffer();	    coord.rewind();	    	    if (vertexIndex == 0) {		// Do Indexed geometry		for (i = 0; i < indexedCoord.limit(); i+=3) {		    val1 = indexedCoord.get(i);		    indexedCoord.put(i, val1 + val);		}		// Do non-indexed float geometry		for (i = 0; i < coord.limit(); i+=3) {		    val1 = coord.get(i);		    coord.put(i, val1 + val);		}	    }	}	else if (updateIndex == 2) { // colors	    colorCount++;	    if ((colorCount & 1) == 1)		val = 0.4f;	    else		val = -0.4f;	    FloatBuffer indexedColors = (FloatBuffer)indexedFloatBufferColor.getBuffer();	    indexedColors.rewind();	    FloatBuffer colors = (FloatBuffer)floatBufferColor.getBuffer();	    colors.rewind();	    	    if (colorIndex == 0) {		// Do Indexed geometry		for (i = 0; i < indexedColors.limit(); i+=3) {		    indexedColors.put(i, indexedColors.get(i) + val);		}		// Do non-indexed float geometry		for (i = 0; i < colors.limit(); i+=3) {		    colors.put(i, colors.get(i) + val);		}	    }	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -