📄 geometryinfogenerator.java
字号:
FloatBufferWrapper bb = new FloatBufferWrapper(buf); float[] c = new float[valid * 4]; bb.position(initial * 4); bb.get(c, 0, valid * 4); colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color4f(c[i * 4 + 0], c[i * 4 + 1], c[i * 4 + 2], c[i * 4 + 3]); } } break; case BufferWrapper.TYPE_BYTE: { ByteBufferWrapper bb = new ByteBufferWrapper(buf); byte[] c = new byte[valid * 4]; bb.position(initial * 4); bb.get(c, 0, valid * 4); colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color4f((float)(c[i * 4 + 0] & 0xff) / 255.0f, (float)(c[i * 4 + 1] & 0xff) / 255.0f, (float)(c[i * 4 + 2] & 0xff) / 255.0f, (float)(c[i * 4 + 3] & 0xff) / 255.0f); } } break; } } else if (geomArray.getColorRef4f() != null) { if (initial != 0) { Color4f[] c = geomArray.getColorRef4f(); colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color4f(c[i + initial]); } } else colors = geomArray.getColorRef4f(); } else if (geomArray.getColorRefFloat() != null) { float[] c = geomArray.getColorRefFloat(); colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color4f(c[(i + initial) * 4 + 0], c[(i + initial) * 4 + 1], c[(i + initial) * 4 + 2], c[(i + initial) * 4 + 3]); } } else if (geomArray.getColorRefByte() != null) { byte[] c = geomArray.getColorRefByte(); colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color4f((float)(c[(i + initial) * 4 + 0] & 0xff) / 255.0f, (float)(c[(i + initial) * 4 + 1] & 0xff) / 255.0f, (float)(c[(i + initial) * 4 + 2] & 0xff) / 255.0f, (float)(c[(i + initial) * 4 + 3] & 0xff) / 255.0f); } } else if (geomArray.getColorRef4b() != null) { Color4b[] c = geomArray.getColorRef4b(); colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color4f((float)(c[i + initial].x & 0xff) / 255.0f, (float)(c[i + initial].y & 0xff) / 255.0f, (float)(c[i + initial].z & 0xff) / 255.0f, (float)(c[i + initial].w & 0xff) / 255.0f); } } // Colors4 were set in vertexFormat but none were set - OK } else { // Not BY_REFERENCE int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialVertexIndex(); } else initial = 0; colors = new Color4f[valid]; for (i = 0 ; i < valid ; i++) colors[i] = new Color4f(); geomArray.getColors(initial, colors); } geomInfo.setColors(colors); } else if ((vertexFormat & GeometryArray.COLOR_3) != 0) { Color3f[] colors = null; if (byRef) { int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialColorIndex(); } else initial = 0; if ( nio ) { J3DBuffer buf = geomArray.getColorRefBuffer(); switch (BufferWrapper.getBufferType(buf)) { case BufferWrapper.TYPE_FLOAT: { FloatBufferWrapper bb = new FloatBufferWrapper(buf); float[] c = new float[valid * 3]; bb.position(initial * 3); bb.get(c, 0, valid * 3); colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color3f(c[i * 3 + 0], c[i * 3 + 1], c[i * 3 + 2]); } } break; case BufferWrapper.TYPE_BYTE: { ByteBufferWrapper bb = new ByteBufferWrapper(buf); byte[] c = new byte[valid * 3]; bb.position(initial * 3); bb.get(c, 0, valid * 3); colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color3f((float)(c[i * 3 + 0] & 0xff) / 255.0f, (float)(c[i * 3 + 1] & 0xff) / 255.0f, (float)(c[i * 3 + 2] & 0xff) / 255.0f); } } break; } } else if (geomArray.getColorRef3f() != null) { if (initial != 0) { Color3f[] c = geomArray.getColorRef3f(); colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color3f(c[i + initial]); } } else colors = geomArray.getColorRef3f(); } else if (geomArray.getColorRefFloat() != null) { float[] c = geomArray.getColorRefFloat(); colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color3f(c[(i + initial) * 3 + 0], c[(i + initial) * 3 + 1], c[(i + initial) * 3 + 2]); } } else if (geomArray.getColorRefByte() != null) { byte[] c = geomArray.getColorRefByte(); colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color3f((float)(c[(i + initial) * 3 + 0] & 0xff) / 255.0f, (float)(c[(i + initial) * 3 + 1] & 0xff) / 255.0f, (float)(c[(i + initial) * 3 + 2] & 0xff) / 255.0f); } } else if (geomArray.getColorRef3b() != null) { Color3b[] c = geomArray.getColorRef3b(); colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) { colors[i] = new Color3f((float)(c[i + initial].x & 0xff) / 255.0f, (float)(c[i + initial].y & 0xff) / 255.0f, (float)(c[i + initial].z & 0xff) / 255.0f); } } // Colors3 were set in vertexFormat but none were set - OK } else { // Not BY_REFERENCE int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialVertexIndex(); } else initial = 0; colors = new Color3f[valid]; for (i = 0 ; i < valid ; i++) colors[i] = new Color3f(); geomArray.getColors(initial, colors); } geomInfo.setColors(colors); } if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_4) != 0) { geomInfo.setTextureCoordinateParams(texSets, 4); for (i = 0 ; i < texSets ; i++) { TexCoord4f[] tex = null; if (byRef) { int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialTexCoordIndex(i); } else initial = 0; if (nio) { J3DBuffer buf = geomArray.getTexCoordRefBuffer(i); if (BufferWrapper.getBufferType(buf) == BufferWrapper.TYPE_FLOAT) { FloatBufferWrapper bb = new FloatBufferWrapper(buf); float[] c = new float[valid * 4]; bb.position(initial * 4); bb.get(c, 0, valid * 4); tex = new TexCoord4f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord4f(c[j * 4 + 0], c[j * 4 + 1], c[j * 4 + 2], c[j * 4 + 3]); } } // TexCoords4 were set in vertexFormat but none were set - OK } else { // There if no TexCoordRef4f, so we know it's float float[] t = geomArray.getTexCoordRefFloat(i); tex = new TexCoord4f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord4f(t[(j + initial) * 4], t[(j + initial) * 4 + 1], t[(j + initial) * 4 + 2], t[(j + initial) * 4 + 3]); } } } else { // Not BY_REFERENCE int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialVertexIndex(); } else initial = 0; tex = new TexCoord4f[valid]; for (j = 0 ; j < valid ; j++) tex[j] = new TexCoord4f(); geomArray.getTextureCoordinates(i, initial, tex); } geomInfo.setTextureCoordinates(i, tex); } int[] map = new int[geomArray.getTexCoordSetMapLength()]; geomArray.getTexCoordSetMap(map); geomInfo.setTexCoordSetMap(map); } else if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0) { geomInfo.setTextureCoordinateParams(texSets, 3); for (i = 0 ; i < texSets ; i++) { TexCoord3f[] tex = null; if (byRef) { int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialTexCoordIndex(i); } else initial = 0; if (nio) { J3DBuffer buf = geomArray.getTexCoordRefBuffer(i); if (BufferWrapper.getBufferType(buf) == BufferWrapper.TYPE_FLOAT) { FloatBufferWrapper bb = new FloatBufferWrapper(buf); float[] c = new float[valid * 3]; bb.position(initial * 3); bb.get(c, 0, valid * 3); tex = new TexCoord3f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord3f(c[j * 3 + 0], c[j * 3 + 1], c[j * 3 + 2]); } } // TexCoords3 were set in vertexFormat but none were set - OK } else if (geomArray.getTexCoordRef3f(i) != null) { if (initial != 0) { TexCoord3f[] t = geomArray.getTexCoordRef3f(i); tex = new TexCoord3f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord3f(t[j + initial]); } } else tex = geomArray.getTexCoordRef3f(i); } else if (geomArray.getTexCoordRefFloat(i) != null) { float[] t = geomArray.getTexCoordRefFloat(i); tex = new TexCoord3f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord3f(t[(j + initial) * 3], t[(j + initial) * 3 + 1], t[(j + initial) * 3 + 2]); } } // TexCoords3 were set in vertexFormat but none were set - OK } else { // Not BY_REFERENCE int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialVertexIndex(); } else initial = 0; tex = new TexCoord3f[valid]; for (j = 0 ; j < valid ; j++) tex[j] = new TexCoord3f(); geomArray.getTextureCoordinates(i, initial, tex); } geomInfo.setTextureCoordinates(i, tex); } int[] map = new int[geomArray.getTexCoordSetMapLength()]; geomArray.getTexCoordSetMap(map); geomInfo.setTexCoordSetMap(map); } else if ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_2) != 0 ) { geomInfo.setTextureCoordinateParams(texSets, 2); for (i = 0 ; i < texSets ; i++) { TexCoord2f[] tex = null; if (byRef) { int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialTexCoordIndex(i); } else initial = 0; if (nio) { J3DBuffer buf = geomArray.getTexCoordRefBuffer(i); if (BufferWrapper.getBufferType(buf) == BufferWrapper.TYPE_FLOAT) { FloatBufferWrapper bb = new FloatBufferWrapper(buf); float[] c = new float[valid * 2]; bb.position(initial * 2); bb.get(c, 0, valid * 2); tex = new TexCoord2f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord2f(c[j * 2 + 0], c[j * 2 + 1]); } } // TexCoords2 were set in vertexFormat but none were set - OK } else if (geomArray.getTexCoordRefFloat(i) != null) { float[] t = geomArray.getTexCoordRefFloat(i); tex = new TexCoord2f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord2f(t[(j + initial) * 2 + 0], t[(j + initial) * 2 + 1]); } } else if (geomArray.getTexCoordRef2f(i) != null) { if (initial != 0) { TexCoord2f[] t = geomArray.getTexCoordRef2f(i); tex = new TexCoord2f[valid]; for (j = 0 ; j < valid ; j++) { tex[j] = new TexCoord2f(t[j + initial]); } } else tex = geomArray.getTexCoordRef2f(i); } // TexCoords2 were set in vertexFormat but none were set - OK } else { // Not BY_REFERENCE int initial; if (!(geomArray instanceof IndexedGeometryArray)) { initial = geomArray.getInitialVertexIndex(); } else initial = 0; tex = new TexCoord2f[valid]; for (j = 0 ; j < valid ; j++) tex[j] = new TexCoord2f(); geomArray.getTextureCoordinates(i, initial, tex); } geomInfo.setTextureCoordinates(i, tex); } int[] map = new int[geomArray.getTexCoordSetMapLength()]; geomArray.getTexCoordSetMap(map); geomInfo.setTexCoordSetMap(map); } } } // End of processGeometryArray private static void processIndexedArray(GeometryInfo geomInfo, IndexedGeometryArray geomArray) { int initial = geomArray.getInitialIndexIndex(); int vertexFormat = geomArray.getVertexFormat(); int texSets = geomArray.getTexCoordSetCount(); int valid; if (geomArray instanceof IndexedGeometryStripArray) { IndexedGeometryStripArray igsa = (IndexedGeometryStripArray)geomArray; int[] strips = new int[igsa.getNumStrips()]; igsa.getStripIndexCounts(strips); valid = 0; for (int i = 0 ; i < strips.length ; i++) { valid += strips[i]; } } else { valid = geomArray.getValidIndexCount(); } int[] coordI = new int[valid]; geomArray.getCoordinateIndices(initial, coordI); geomInfo.setCoordinateIndices(coordI); if ((vertexFormat & GeometryArray.USE_COORD_INDEX_ONLY) != 0) { if ((vertexFormat & GeometryArray.NORMALS) != 0) geomInfo.setNormalIndices(coordI); if (((vertexFormat & GeometryArray.COLOR_3) != 0) || ((vertexFormat & GeometryArray.COLOR_4) != 0)) geomInfo.setColorIndices(coordI); if (((vertexFormat & GeometryArray.TEXTURE_COORDINATE_2) != 0) || ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0) || ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_4) != 0)) { for (int i = 0 ; i < texSets ; i++) { geomInfo.setTextureCoordinateIndices(i, coordI); } } } else { if ((vertexFormat & GeometryArray.NORMALS) != 0) { int[] normalI = new int[valid]; geomArray.getNormalIndices(initial, normalI); geomInfo.setNormalIndices(normalI); } if (((vertexFormat & GeometryArray.COLOR_3) != 0) || ((vertexFormat & GeometryArray.COLOR_4) != 0)) { int[] colorI = new int[valid]; geomArray.getColorIndices(initial, colorI); geomInfo.setColorIndices(colorI); } if (((vertexFormat & GeometryArray.TEXTURE_COORDINATE_2) != 0) || ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_3) != 0) || ((vertexFormat & GeometryArray.TEXTURE_COORDINATE_4) != 0)) { for (int i = 0 ; i < texSets ; i++) { int[] texI = new int[valid]; geomArray.getTextureCoordinateIndices(i, initial, texI); geomInfo.setTextureCoordinateIndices(i, texI); } } } } // End of processIndexedArray private static void processStripArray(GeometryInfo geomInfo, GeometryStripArray geomArray) { int[] strips = new int[geomArray.getNumStrips()]; geomArray.getStripVertexCounts(strips); geomInfo.setStripCounts(strips); } // End of processStripArray private static void processIndexStripArray( GeometryInfo geomInfo, IndexedGeometryStripArray geomArray) { int[] strips = new int[geomArray.getNumStrips()]; geomArray.getStripIndexCounts(strips); geomInfo.setStripCounts(strips); } // End of processIndexStripArray} // End of class GeometryInfoGenerator
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -