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

📄 geometryinfogenerator.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	      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 + -