📄 morphretained.java
字号:
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 + -