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

📄 morphretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    void updatePickable(HashKey keys[], boolean pick[]) { 	super.updatePickable(keys, pick);	Shape3DRetained shape;	if (!inSharedGroup) {	    shape = (Shape3DRetained) mirrorShape3D.get(0);	    shape.isPickable = pick[0];	} else {	    int size = mirrorShape3D.size();	    for (int j=0; j< keys.length; j++) {		for (int i=0; i < size; i++) {		    shape = (Shape3DRetained) mirrorShape3D.get(i);		    if (keys[j].equals(shape.key)) {			shape.isPickable = pick[j];			break;		    }		}	    }	}     }    void updateCollidable(HashKey keys[], boolean collide[]) { 	super.updateCollidable(keys, collide);	Shape3DRetained shape;	if (!inSharedGroup) {	    shape = (Shape3DRetained) mirrorShape3D.get(0);	    shape.isCollidable = collide[0];	} else {	    int size = mirrorShape3D.size();	    for (int j=0; j< keys.length; j++) {		for (int i=0; i < size; i++) {		    shape = (Shape3DRetained) mirrorShape3D.get(i);		    if (keys[j].equals(shape.key)) {			shape.isCollidable = collide[j];			break;		    }		}	    }	}     }    Shape3DRetained getMirrorShape(SceneGraphPath path) {	if (!inSharedGroup) {	    return (Shape3DRetained) mirrorShape3D.get(0);	}	HashKey key = new HashKey("");	path.getHashKey(key);		return getMirrorShape(key);    }    Shape3DRetained getMirrorShape(HashKey key) {	int i = key.equals(localToVworldKeys, 0, localToVworldKeys.length);	if (i>=0) {	    return (Shape3DRetained) mirrorShape3D.get(i);	}		// Not possible	throw new RuntimeException("Shape3DRetained: MirrorShape Not found!");    }    void getMirrorObjects(ArrayList leafList, HashKey key) {	Shape3DRetained ms;	if (inSharedGroup) {	    ms = getMirrorShape(key);	}	else {	    ms = (Shape3DRetained)mirrorShape3D.get(0);	}	GeometryAtom ga = Shape3DRetained.getGeomAtom(ms);	leafList.add(ga);	    }    void setBoundsAutoCompute(boolean autoCompute) {        if (autoCompute != boundsAutoCompute) {            if (autoCompute) {                // localBounds may not have been set to bbox                localBounds = new BoundingBox();		if (source.isLive() && morphedGeometryArray != null) {		    GeometryArrayRetained mga = (GeometryArrayRetained)morphedGeometryArray.retained; 		    mga.incrComputeGeoBounds(); // This compute the bbox if dirty		    mga.decrComputeGeoBounds();		    		}            } 			    localBounds = getBounds();            super.setBoundsAutoCompute(autoCompute);            if (source.isLive()) {                J3dMessage message = new J3dMessage();                message.type = J3dMessage.BOUNDS_AUTO_COMPUTE_CHANGED;                message.threads = J3dThread.UPDATE_TRANSFORM |		                  J3dThread.UPDATE_GEOMETRY |		                  J3dThread.UPDATE_RENDER;                message.universe = universe;                message.args[0] = Shape3DRetained.getGeomAtomsArray(mirrorShape3D);		message.args[1] = localBounds;                VirtualUniverse.mc.processMessage(message);            }        }    }    void updateBounds() {	localBounds = getEffectiveBounds();	if (source.isLive()) {	    J3dMessage message = new J3dMessage();	    message.type = J3dMessage.BOUNDS_AUTO_COMPUTE_CHANGED;	    message.threads = J3dThread.UPDATE_TRANSFORM |		J3dThread.UPDATE_GEOMETRY |		J3dThread.UPDATE_RENDER;                message.universe = universe;                message.args[0] = Shape3DRetained.getGeomAtomsArray(mirrorShape3D);		message.args[1] = localBounds;                VirtualUniverse.mc.processMessage(message);	}    }    /**     * Initialization of morphed geometry     */    void initMorphedGeometry() {      int  vFormat, geoType, stripVCount[];       int iCount = 0;      int numStrips = 0;      int texCoordSetCount = 0;      int texCoordSetMapLen = 0;      int [] texCoordSetMap = null;      int k;      GeometryArrayRetained geo = geometryArrays[0];      vFormat = ((geo.getVertexFormat() | (GeometryArray.BY_REFERENCE)) & ~(GeometryArray.INTERLEAVED)) ;      texCoordSetCount = geo.getTexCoordSetCount();      texCoordSetMapLen = geo.getTexCoordSetMapLength();      if (texCoordSetMapLen > 0) {          texCoordSetMap = new int[texCoordSetMapLen];	   geo.getTexCoordSetMap(texCoordSetMap);      }      geoType = geo.geoType;            switch (geoType){	case GeometryRetained.GEO_TYPE_QUAD_SET:	    this.morphedGeometryArray = 	     	new QuadArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount, 				texCoordSetMap);	    break;	case GeometryRetained.GEO_TYPE_TRI_SET: 	    this.morphedGeometryArray = 		new TriangleArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount,				texCoordSetMap);	    break;	case GeometryRetained.GEO_TYPE_POINT_SET:	    this.morphedGeometryArray = 		new PointArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount,				texCoordSetMap);	    break;	case GeometryRetained.GEO_TYPE_LINE_SET:	    this.morphedGeometryArray = 		new LineArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount,				texCoordSetMap);	    break;	case GeometryRetained.GEO_TYPE_TRI_STRIP_SET:	    numStrips = ((TriangleStripArrayRetained)geo).getNumStrips();	    stripVCount = new int[numStrips];	    ((TriangleStripArrayRetained)geo).getStripVertexCounts(stripVCount);	    this.morphedGeometryArray = 		new TriangleStripArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount,			texCoordSetMap, stripVCount);	    break;	case GeometryRetained.GEO_TYPE_TRI_FAN_SET:	    numStrips = ((TriangleFanArrayRetained)geo).getNumStrips();	    stripVCount = new int[numStrips];	    ((TriangleFanArrayRetained)geo).getStripVertexCounts(stripVCount);	    this.morphedGeometryArray = 		new TriangleFanArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount,			texCoordSetMap, stripVCount);		break;	case GeometryRetained.GEO_TYPE_LINE_STRIP_SET:	    numStrips = ((LineStripArrayRetained)geo).getNumStrips();	    stripVCount = new int[numStrips];	    ((LineStripArrayRetained)geo).getStripVertexCounts(stripVCount);	    this.morphedGeometryArray = 		new LineStripArray(geometryArrays[0].validVertexCount, vFormat, texCoordSetCount,			texCoordSetMap, stripVCount);		break;	case GeometryRetained.GEO_TYPE_INDEXED_QUAD_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    this.morphedGeometryArray = 		new IndexedQuadArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount);		break;	case GeometryRetained.GEO_TYPE_INDEXED_TRI_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    this.morphedGeometryArray = 		new IndexedTriangleArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount);		break;	case GeometryRetained.GEO_TYPE_INDEXED_POINT_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    this.morphedGeometryArray = 		new IndexedPointArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount);		break;	case GeometryRetained.GEO_TYPE_INDEXED_LINE_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    this.morphedGeometryArray = 		new IndexedLineArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount);	    break;	case GeometryRetained.GEO_TYPE_INDEXED_TRI_STRIP_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    numStrips = ((IndexedTriangleStripArrayRetained)geo).getNumStrips();	    stripVCount = new int[numStrips];	    ((IndexedTriangleStripArrayRetained)geo).getStripIndexCounts(stripVCount);	    this.morphedGeometryArray = 		new IndexedTriangleStripArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount, stripVCount);break;	case GeometryRetained.GEO_TYPE_INDEXED_TRI_FAN_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    numStrips = ((IndexedTriangleFanArrayRetained)geo).getNumStrips();	    stripVCount = new int[numStrips];	    ((IndexedTriangleFanArrayRetained)geo).getStripIndexCounts(stripVCount);	    this.morphedGeometryArray = 		new IndexedTriangleFanArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount, stripVCount);break;	case GeometryRetained.GEO_TYPE_INDEXED_LINE_STRIP_SET:	    iCount = ((IndexedGeometryArrayRetained)geo).getIndexCount();	    numStrips = ((IndexedLineStripArrayRetained)geo).getNumStrips();	    stripVCount = new int[numStrips];	    ((IndexedLineStripArrayRetained)geo).getStripIndexCounts(stripVCount);	    this.morphedGeometryArray = 		new IndexedLineStripArray(geometryArrays[0].getNumCoordCount(), vFormat, texCoordSetCount,			texCoordSetMap, iCount, stripVCount);break;	}	if (geometryArrays[0] instanceof IndexedGeometryArrayRetained) {	    IndexedGeometryArrayRetained igeo = (IndexedGeometryArrayRetained)		geometryArrays[0];	    IndexedGeometryArray morphedGeo = (IndexedGeometryArray)		morphedGeometryArray;	    if ((vFormat & GeometryArray.COORDINATES) != 0) {		morphedGeo.setCoordinateIndices(0, igeo.indexCoord);	    }	    if ((vFormat & GeometryArray.USE_COORD_INDEX_ONLY) == 0) {	        if ((vFormat & GeometryArray.NORMALS) != 0) {	            morphedGeo.setNormalIndices(0, igeo.indexNormal);	        }	        if ((vFormat & GeometryArray.COLOR) != 0) {	            morphedGeo.setColorIndices(0, igeo.indexColor);	        }			        if ((vFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {	            for (k = 0; k < texCoordSetCount; k++) {	                 morphedGeo.setTextureCoordinateIndices(k, 0,                                 igeo.indexTexCoord[k]);	            }	        }            }	}	this.morphedGeometryArray.setCapability(GeometryArray.ALLOW_REF_DATA_WRITE);	GeometryArrayRetained mga = (GeometryArrayRetained)morphedGeometryArray.retained;	mga.updateData(this);	    }        void getMirrorShape3D(ArrayList list, HashKey k) {	Shape3DRetained ms;	if (inSharedGroup) {	    ms = getMirrorShape(k);	}	else {	    ms = (Shape3DRetained)mirrorShape3D.get(0);	}	list.add(ms);	        }    void compile(CompileState compState) {        super.compile(compState);        // XXXX: for now keep the static transform in the parent tg        compState.keepTG = true;        if (J3dDebug.devPhase && J3dDebug.debug) {            compState.numMorphs++;        }    }    void doErrorCheck(GeometryArrayRetained prevGeo, GeometryArrayRetained geo) {	// If indexed Geometry array check the entire list instead of just the vcount	if ((prevGeo.vertexFormat != geo.vertexFormat) ||	    (prevGeo.validVertexCount != geo.validVertexCount) ||	    (prevGeo.geoType != geo.geoType) ||	    (prevGeo.texCoordSetCount != geo.texCoordSetCount)) {	    throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	}	if (geo.getTexCoordSetMapLength() != prevGeo.getTexCoordSetMapLength()){	    throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	}	int texCoordSetMapLen = geo.getTexCoordSetMapLength();	int[] prevSvc= prevGeo.texCoordSetMap;	int[] svc= geo.texCoordSetMap;	for (int k = 0; k < texCoordSetMapLen; k++) {	    if (prevSvc[k] != svc[k])		throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	}	if (geo instanceof GeometryStripArrayRetained) {	    prevSvc= ((GeometryStripArrayRetained)prevGeo).stripVertexCounts;	    svc= ((GeometryStripArrayRetained)geo).stripVertexCounts;	    if (prevSvc.length != svc.length)		throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	    for (int k = 0; k < prevSvc.length; k++) {		if (prevSvc[k] != svc[k])		    throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	    }	} else if (geo instanceof IndexedGeometryArrayRetained) {	    if (((IndexedGeometryArrayRetained)prevGeo).validIndexCount != ((IndexedGeometryArrayRetained)geo).validIndexCount)		throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	    	    // If by reference, then all array lengths should be same	    if (geo.getNumCoordCount() != prevGeo.getNumCoordCount() ||		geo.getNumColorCount() != prevGeo.getNumColorCount() ||		geo.getNumNormalCount() != prevGeo.getNumNormalCount()) {		throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));	    }	    int texCoordSetCount = geo.getTexCoordSetCount();	    for (int k = 0; k < texCoordSetCount; k++) {		if (geo.getNumTexCoordCount(k) != prevGeo.getNumTexCoordCount(k)) {		    throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));		}	    }		    	    	    if (geo instanceof IndexedGeometryStripArrayRetained) {		prevSvc= ((IndexedGeometryStripArrayRetained)prevGeo).stripIndexCounts;		svc= ((IndexedGeometryStripArrayRetained)geo).stripIndexCounts;		if (prevSvc.length != svc.length)		    throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));		for (int k = 0; k < prevSvc.length; k++) {		    if (prevSvc[k] != svc[k])			throw new IllegalArgumentException(J3dI18N.getString("MorphRetained1"));		}	    }	}    }    void handleFrequencyChange(int bit) {	int mask = 0;	if (bit == Morph.ALLOW_GEOMETRY_ARRAY_WRITE) {	    mask = GEOMETRY_CHANGED;	}	else if (bit == Morph.ALLOW_APPEARANCE_WRITE) {	    mask = APPEARANCE_CHANGED;	}	else if (bit == Morph.ALLOW_APPEARANCE_OVERRIDE_WRITE) {	    mask = APPEARANCEOVERRIDE_CHANGED;	}	if (mask != 0) {	    if (source.getCapabilityIsFrequent(bit))		changedFrequent |= mask;	    else if (!source.isLive()) {		changedFrequent &= ~mask;	    }	}    }        void searchGeometryAtoms(UnorderList list) {	list.add(Shape3DRetained.getGeomAtom(	     (Shape3DRetained) mirrorShape3D.get(0)));    }}

⌨️ 快捷键说明

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