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

📄 morphretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		    if ((vFormat & GeometryArray.COLOR) != 0) {			if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {			    count =  geometryArrays[j].getNumColorCount();			}			endVertex = initialVertex + count;			for (i=initialVertex; i<  endVertex; i++) {			    geometryArrays[j].getColor(i, color);			    Mcolor[cc++] += color[0]*w;			    Mcolor[cc++] += color[1]*w;			    Mcolor[cc++] += color[2]*w;			    if ((vFormat & GeometryArray.WITH_ALPHA) != 0)				Mcolor[cc++] += color[3]*w;			}		    }		    if ((vFormat & GeometryArray.NORMALS) != 0) {			if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {			    count =  geometryArrays[j].getNumNormalCount();			}			endVertex = initialVertex + count;			for (i=initialVertex; i<  endVertex; i++) {			    geometryArrays[j].getNormal(i, normal);			    Mnormal[nc++] += normal[0]*w;			    Mnormal[nc++] += normal[1]*w;			    Mnormal[nc++] += normal[2]*w;			}		    }			    if ((vFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {			for (k = 0; k < texCoordSetCount; k++) {			    int tcount = 0;			    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {				count =  geometryArrays[j].getNumTexCoordCount(i);			    }			    endVertex = initialVertex + count;			    for (i=initialVertex; i<  endVertex; i++) {				geometryArrays[j].getTextureCoordinate(k, i, texCoord);				MtexCoord[k][tcount++] += texCoord[0]*w;				MtexCoord[k][tcount++] += texCoord[1]*w;				if ((vFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0) {				    MtexCoord[k][tcount++] += texCoord[2]*w;				} else if ((vFormat & GeometryArray.TEXTURE_COORDINATE_4) != 0) {				    MtexCoord[k][tcount++] += texCoord[2]*w;				    MtexCoord[k][tcount++] += texCoord[3]*w;				}			    }			}		    }		}	    }	}	else {	    int vIndex, tIndex, cIndex, nIndex, tstride = 0, cstride = 0;	    if ((vFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {		if ((vFormat & GeometryArray.TEXTURE_COORDINATE_2) != 0) {		    tstride = 2;		} else if ((vFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0) {		    tstride = 3;		} else {		    tstride = 4;		}	    }	    if ((vFormat & GeometryArray.COLOR) != 0) {		cstride = 3;		if ((vFormat & GeometryArray.WITH_ALPHA) != 0)		    cstride = 4;	    }	    if ((vFormat & GeometryArray.INTERLEAVED) != 0) {		float[] vdata;		int stride;		stride = geometryArrays[0].stride();		int coffset = geometryArrays[0].colorOffset();		int noffset = geometryArrays[0].normalOffset();		int voffset = geometryArrays[0].coordinateOffset();		int offset = 0;				int initialVertex = 0;		for (j=0;j < numGeometryArrays;j++) {		    double w = weights[j];		    if (w != 0) {			vc = 0; nc = 0; cc = 0; n = 0;			vdata = geometryArrays[j].getInterleavedVertices();			if ((vFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {			    for (k = 0; k < texCoordSetCount; k++) {				if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {				    tIndex = 0;				    count =  geometryArrays[j].getNumCoordCount();				}				else {				    tIndex = geometryArrays[j].getInitialVertexIndex();				    count = geometryArrays[j].validVertexCount;				}				offset = (tIndex * stride)+k*tstride;				int tcount = 0;				for (i = 0; i < count; i++, offset += stride) {				    MtexCoord[k][tcount++] += vdata[offset] * w;				    MtexCoord[k][tcount++] += vdata[offset+1] * w;				    if ((vFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0) {					MtexCoord[k][tcount++] += vdata[offset+2]*w;				    } else if ((vFormat & GeometryArray.TEXTURE_COORDINATE_4) != 0) {					MtexCoord[k][tcount++] += vdata[offset+2]*w;					MtexCoord[k][tcount++] += vdata[offset+3]*w;				    }				}			    }			}			if ((vFormat & GeometryArray.COLOR) != 0) {			    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {				cIndex = 0;				count =  geometryArrays[j].getNumCoordCount();			    }			    else {				cIndex = geometryArrays[j].getInitialVertexIndex();				count = geometryArrays[j].validVertexCount;			    }			    offset = (cIndex * stride)+coffset;			    for (i = 0; i < count; i++, offset += stride) {				Mcolor[cc++] += vdata[offset]*w;				Mcolor[cc++] += vdata[offset+1]*w;				Mcolor[cc++] += vdata[offset+2]*w;				if ((vFormat & GeometryArray.WITH_ALPHA)!= 0)				    Mcolor[cc++] += vdata[offset+3]*w;			    }			}			if ((vFormat & GeometryArray.NORMALS) != 0) {			    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {				nIndex = 0;				count =  geometryArrays[j].getNumCoordCount();			    }			    else {				nIndex = geometryArrays[j].getInitialVertexIndex();				count = geometryArrays[j].validVertexCount;			    }			    offset = (nIndex * stride)+noffset;			    for (i = 0; i < count; i++, offset += stride) {				Mnormal[nc++] += vdata[offset]*w;				Mnormal[nc++] += vdata[offset+1]*w;				Mnormal[nc++] += vdata[offset+2]*w;			    }			}			if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {			    vIndex = 0;			    count =  geometryArrays[j].getNumCoordCount();			}			else {			    vIndex = geometryArrays[j].getInitialVertexIndex();			    count = geometryArrays[j].validVertexCount;			}			offset = (vIndex * stride)+voffset;			for (i = 0; i < count; i++, offset += stride) {			    Mcoord[vc++] += vdata[offset]*w;			    Mcoord[vc++] += vdata[offset+1]*w;			    Mcoord[vc++] += vdata[offset+2]*w;			    			}		    }		}	    }	    else {		float byteToFloatScale = 1.0f/255.0f;		for (j=0;j < numGeometryArrays;j++) {		    double w = weights[j];		    if (w != 0) {			if ((vFormat & GeometryArray.TEXTURE_COORDINATE) != 0) {			    switch ((geometryArrays[j].vertexType & GeometryArrayRetained.TEXCOORD_DEFINED)) {			    case GeometryArrayRetained.TF:				for (k = 0; k < texCoordSetCount; k++) {				    float[] tf = geometryArrays[j].getTexCoordRefFloat(k);				    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {					tIndex = 0;					count =  geometryArrays[j].getNumTexCoordCount(k);				    }				    else {					tIndex = geometryArrays[j].getInitialTexCoordIndex(k);					count =  geometryArrays[j].validVertexCount;				    }				    tIndex *= tstride;				    int tcount = 0;				    for (i=0; i< count; i++) {					MtexCoord[k][tcount++] += tf[tIndex++]*w;					MtexCoord[k][tcount++] += tf[tIndex++]*w;					if ((vFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0)					    MtexCoord[k][tcount++] += tf[tIndex++]*w;				    }				}				break;			    case GeometryArrayRetained.T2F:				for (k = 0; k < texCoordSetCount; k++) {				    int tcount = 0;				    float[] tf = geometryArrays[j].getTexCoordRefFloat(k);				    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {					tIndex = 0;					count =  geometryArrays[j].getNumTexCoordCount(k);				    }				    else {					tIndex = geometryArrays[j].getInitialTexCoordIndex(k);					count =  geometryArrays[j].validVertexCount;				    }				    TexCoord2f[] t2f = geometryArrays[j].getTexCoordRef2f(k);				    for (i=0; i< count; i++, tIndex++) {					MtexCoord[k][tcount++] += t2f[tIndex].x*w;					MtexCoord[k][tcount++] += t2f[tIndex].y*w;				    }				}				break;			    case GeometryArrayRetained.T3F:				for (k = 0; k < texCoordSetCount; k++) {				    int tcount = 0;				    TexCoord3f[] t3f = geometryArrays[j].getTexCoordRef3f(k);				    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {					tIndex = 0;					count =  geometryArrays[j].getNumTexCoordCount(k);				    }				    else {					tIndex = geometryArrays[j].getInitialTexCoordIndex(k);					count =  geometryArrays[j].validVertexCount;				    }				    for (i=0; i< count; i++, tIndex++) {					MtexCoord[k][tcount++] += t3f[tIndex].x*w;					MtexCoord[k][tcount++] += t3f[tIndex].y*w;					MtexCoord[k][tcount++] += t3f[tIndex].z*w;				    }				}				break;			    }			}			if ((vFormat & GeometryArray.COLOR) != 0) {			    double val = byteToFloatScale * w;			    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {				cIndex = 0;				count =  geometryArrays[j].getNumColorCount();			    }			    else {				cIndex = geometryArrays[j].getInitialColorIndex();				count =  geometryArrays[j].validVertexCount;			    }			    switch ((geometryArrays[j].vertexType & GeometryArrayRetained.COLOR_DEFINED)) {			    case GeometryArrayRetained.CF:				float[] cf = geometryArrays[j].getColorRefFloat();				cc = 0;				cIndex *= cstride;				for (i=0; i< count; i++) {				    Mcolor[cc++] += cf[cIndex++]*w;				    Mcolor[cc++] += cf[cIndex++]*w;				    Mcolor[cc++] += cf[cIndex++]*w;				    if ((vFormat & GeometryArray.WITH_ALPHA)!= 0)					Mcolor[cc++] += cf[cIndex++]*w;				}				break;			    case GeometryArrayRetained.CUB:				byte[] cub = geometryArrays[j].getColorRefByte();				cc = 0;				cIndex *= cstride;				for (i=0; i< count; i++) {				    Mcolor[cc++] += (cub[cIndex++] & 0xff) * val;				    Mcolor[cc++] += (cub[cIndex++] & 0xff) *val;				    Mcolor[cc++] += (cub[cIndex++] & 0xff) *val;				    if ((vFormat & GeometryArray.WITH_ALPHA)!= 0)					Mcolor[cc++] += (cub[cIndex++] & 0xff) *val;				}				break;			    case GeometryArrayRetained.C3F:				Color3f[] c3f = geometryArrays[j].getColorRef3f();				cc = 0;				for (i=0; i< count; i++, cIndex++) {				    Mcolor[cc++] += c3f[cIndex].x * w;				    Mcolor[cc++] += c3f[cIndex].y * w;				    Mcolor[cc++] += c3f[cIndex].z * w;				}				break;			    case GeometryArrayRetained.C4F:				Color4f[] c4f = geometryArrays[j].getColorRef4f();				cc = 0;				for (i=0; i< count; i++, cIndex++) {				    Mcolor[cc++] += c4f[cIndex].x * w;				    Mcolor[cc++] += c4f[cIndex].y * w;				    Mcolor[cc++] += c4f[cIndex].z * w;				    Mcolor[cc++] += c4f[cIndex].w * w;				}				break;			    case GeometryArrayRetained.C3UB:				Color3b[] c3b = geometryArrays[j].getColorRef3b();				cc = 0;				for (i=0; i< count; i++, cIndex++) {				    Mcolor[cc++] += (c3b[cIndex].x  & 0xff)* val;				    Mcolor[cc++] += (c3b[cIndex].y  & 0xff) * val;				    Mcolor[cc++] += (c3b[cIndex].z & 0xff) * val;				}				break;			    case GeometryArrayRetained.C4UB:				Color4b[] c4b = geometryArrays[j].getColorRef4b();				cc = 0;				for (i=0; i< count; i++, cIndex++) {				    Mcolor[cc++] += (c4b[cIndex].x  & 0xff)* val;				    Mcolor[cc++] += (c4b[cIndex].y  & 0xff) * val;				    Mcolor[cc++] += (c4b[cIndex].z & 0xff) * val;				    Mcolor[cc++] += (c4b[cIndex].w & 0xff) * val;				}				break;							    }			}			if ((vFormat & GeometryArray.NORMALS) != 0) {			    nc = 0;			    if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {				nIndex = 0;				count =  geometryArrays[j].getNumNormalCount();			    }			    else {				nIndex = geometryArrays[j].getInitialNormalIndex();				count =  geometryArrays[j].validVertexCount;			    }			    switch ((geometryArrays[j].vertexType & GeometryArrayRetained.NORMAL_DEFINED)) {			    case GeometryArrayRetained.NF:				float[] nf = geometryArrays[j].getNormalRefFloat();				nIndex *= 3;				for (i=0; i< count; i++) {				    Mnormal[nc++] += nf[nIndex++]*w;				    Mnormal[nc++] += nf[nIndex++]*w;				    Mnormal[nc++] += nf[nIndex++]*w;				}				break;			    case GeometryArrayRetained.N3F: 				Vector3f[] n3f = geometryArrays[j].getNormalRef3f();				for (i=0; i< count; i++, nIndex++) {				    Mnormal[nc++] += n3f[nIndex].x*w;				    Mnormal[nc++] += n3f[nIndex].y*w;				    Mnormal[nc++] += n3f[nIndex].z*w;				}				break;			    }			}			// Handle vertices ..			vc = 0;			if (geometryArrays[j] instanceof IndexedGeometryArrayRetained) {			    vIndex = 0;			    count =  geometryArrays[j].getNumCoordCount();			}			else {			    vIndex = geometryArrays[j].getInitialCoordIndex();			    count =  geometryArrays[j].validVertexCount;			}			switch ((geometryArrays[j].vertexType & GeometryArrayRetained.VERTEX_DEFINED)) {			case GeometryArrayRetained.PF:			    float[] pf = geometryArrays[j].getCoordRefFloat();			    vIndex *= 3;			    for (i=0; i< count; i++) {				Mcoord[vc++] += pf[vIndex++]*w;				Mcoord[vc++] += pf[vIndex++]*w;				Mcoord[vc++] += pf[vIndex++]*w;			    }			    break;			case GeometryArrayRetained.PD:			    double[] pd = geometryArrays[j].getCoordRefDouble();			    vIndex *= 3;			    for (i=0; i< count; i++) {				Mcoord[vc++] += (float)pd[vIndex++]*w;				Mcoord[vc++] += (float)pd[vIndex++]*w;				Mcoord[vc++] += (float)pd[vIndex++]*w;			    }			    break;			case GeometryArrayRetained.P3F:			    Point3f[] p3f = geometryArrays[j].getCoordRef3f();			    for (i=0; i< count; i++, vIndex++) {				Mcoord[vc++] += p3f[vIndex].x*w;				Mcoord[vc++] += p3f[vIndex].y*w;				Mcoord[vc++] += p3f[vIndex].z*w;			    }			    break;			case GeometryArrayRetained.P3D:			    Point3d[] p3d = geometryArrays[j].getCoordRef3d();			    for (i=0; i< count; i++, vIndex++) {				Mcoord[vc++] += (float)p3d[vIndex].x*w;				Mcoord[vc++] += (float)p3d[vIndex].y*w;				Mcoord[vc++] += (float)p3d[vIndex].z*w;			    }			    break;		    			}			

⌨️ 快捷键说明

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