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

📄 shape3dcompileretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * $RCSfile: Shape3DCompileRetained.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Use is subject to license terms. * * $Revision: 1.7 $ * $Date: 2007/04/12 17:34:06 $ * $State: Exp $ */package javax.media.j3d;import javax.vecmath.*;import java.util.*;/** * A leaf node that holds a merged shapes in compile mode */class Shape3DCompileRetained extends Shape3DRetained {    int numShapes = 0;        // Each element in the arraylist is an array of geometries for a    // particular merged shape     ArrayList geometryInfo = null;    Object[] srcList = null;        Shape3DCompileRetained(Shape3DRetained[] shapes, int nShapes, int compileFlags) {	int i, j;	Shape3DRetained shape;	GeometryArrayRetained geo;	Vector list;	// Merged list, only merged if geometry is mergeable	Object[] mergedList = new Object[GeometryRetained.GEO_TYPE_GEOMETRYARRAY+1];	// Sorted list of separate geometry by geoType	Object[] separateList = new Object[GeometryRetained.GEO_TYPE_GEOMETRYARRAY+1];	// Assign the num of shapes	numShapes = nShapes;	Bounds shapeBounds;	srcList = new Object[nShapes];	if (nShapes > 0) {	    boundsAutoCompute = shapes[0].boundsAutoCompute;	    source = shapes[0].source;	}					  	// Remove the null that was added by Shape3DRetained constructor	geometryList.remove(0);	int geoIndex = 0;	// Assign the fields for this compile shape	boundsAutoCompute = shapes[0].boundsAutoCompute;	isPickable = shapes[0].isPickable;	isCollidable = shapes[0].isCollidable;	appearanceOverrideEnable = shapes[0].appearanceOverrideEnable;	appearance = shapes[0].appearance;	collisionBound = shapes[0].collisionBound;	localBounds = shapes[0].localBounds;		if ((compileFlags & CompileState.GEOMETRY_READ) != 0)	    geometryInfo = new ArrayList();		for (i = 0; i < nShapes; i++) {	    shape = shapes[i];	    ((Shape3D)shape.source).id = i;	    shape.source.retained = this;	    srcList[i] = shape.source;	    // If the transform has been pushd down	    // to the shape, don't merge its geometry with other shapes	    // geometry	    // Put it in a separate list sorted by geo_type	    // Have to handle shape.isPickable	    for (j = 0; j < shape.geometryList.size(); j++) {		geo = (GeometryArrayRetained)shape.geometryList.get(j);		if (geo != null) {		    if (shape.willRemainOpaque(geo.geoType) && geo.isMergeable()) {			if (mergedList[geo.geoType] == null) {			    mergedList[geo.geoType] = new ArrayList();			}			((ArrayList)mergedList[geo.geoType]).add(geo);		    }		    else {			// Keep a sorted list based on geoType;			if (separateList[geo.geoType] == null) {			    separateList[geo.geoType] = new ArrayList();			}			// add it to the geometryList separately			((ArrayList)separateList[geo.geoType]).add(geo);		    }		}	    }	    	    // Point to the geometryList's source, so the	    // retained side will be garbage collected	    if ((compileFlags & CompileState.GEOMETRY_READ) != 0) {		ArrayList sList = new ArrayList();		for (j = 0; j < shape.geometryList.size(); j++) {		    GeometryRetained g = (GeometryRetained)shape.geometryList.get(j);		    if (g != null)			sList.add(g.source);		    else			sList.add(null);		}		geometryInfo.add(sList);	    }	}	// Now, merged the mergelist and separate list based on geoType,	// this enables dlist optmization	for (i = 1; i <= GeometryRetained.GEO_TYPE_GEOMETRYARRAY;  i++) {	    GeometryArrayRetained cgeo = null;	    ArrayList curList;	    switch (i) {	    case GeometryArrayRetained.GEO_TYPE_QUAD_SET:		if (mergedList[i] != null) {		    cgeo = new QuadArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_TRI_SET:		if (mergedList[i] != null) {		    cgeo = new TriangleArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_POINT_SET:		if (mergedList[i] != null) {		    cgeo = new PointArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_LINE_SET:		if (mergedList[i] != null) {		    cgeo = new LineArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_TRI_STRIP_SET:		if (mergedList[i] != null) {		    cgeo = new TriangleStripArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_TRI_FAN_SET:		if (mergedList[i] != null) {		    cgeo = new TriangleFanArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_LINE_STRIP_SET:		if (mergedList[i] != null) {		    cgeo = new LineStripArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_QUAD_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedQuadArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_TRI_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedTriangleArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }

⌨️ 快捷键说明

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