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

📄 geombuffer.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    int stripCounts[] = new int[currPrimCnt];    for (i = 0; i < currPrimCnt; i++){      stripCounts[i] = currPrimEndVertex[i] - currPrimStartVertex[i];      totalVerts += stripCounts[i];    }    if (debug >= 1) System.out.println("totalVerts " + totalVerts);    int tsaFlags = TriangleStripArray.COORDINATES;    if ((flags & Primitive.GENERATE_NORMALS) != 0)	tsaFlags |= TriangleStripArray.NORMALS;    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)	 tsaFlags |= TriangleStripArray.TEXTURE_COORDINATE_2;    // Create GeometryArray to pass back    obj = new TriangleStripArray(totalVerts, tsaFlags, 			1, texCoordSetMap, stripCounts);    // Allocate space to store new vertex info    Point3f[] newpts = new Point3f[totalVerts];    Vector3f[] newnormals = new Vector3f[totalVerts];    TexCoord2f[] newtcoords = new TexCoord2f[totalVerts];    int currVert = 0;        // Repeat for each Quad Strip    for (i = 0; i < currPrimCnt; i++){      // Output order for these quad arrays same as java 3d triangle strips      for (int j = currPrimStartVertex[i] ; j < currPrimEndVertex[i] ; j++){	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j);      }    }    numVerts = currVert;    numTris += totalVerts - currPrimCnt * 2;    obj.setCoordinates(0, newpts);    if ((flags & Primitive.GENERATE_NORMALS) != 0)      obj.setNormals(0, newnormals);    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)      obj.setTextureCoordinates(0, 0, newtcoords);    geometry = obj;    return obj;  }  private GeometryArray processQuads()  {    GeometryArray obj = null;    int i;    int totalVerts = 0;    for (i = 0; i < currPrimCnt; i++){      totalVerts += currPrimEndVertex[i] - currPrimStartVertex[i];    }    if (debug >= 1) System.out.println("totalVerts " + totalVerts);    if (((flags & Primitive.GENERATE_NORMALS) != 0) &&	((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)){      obj = new QuadArray(totalVerts,			  QuadArray.COORDINATES | 			  QuadArray.NORMALS |			  QuadArray.TEXTURE_COORDINATE_2, 			  1, texCoordSetMap);    }    else       if (((flags & Primitive.GENERATE_NORMALS) == 0) &&	  ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)){	obj = new QuadArray(totalVerts,			    QuadArray.COORDINATES | 			    QuadArray.TEXTURE_COORDINATE_2, 			    1, texCoordSetMap);      }    else       if (((flags & Primitive.GENERATE_NORMALS) != 0) &&	  ((flags & Primitive.GENERATE_TEXTURE_COORDS) == 0)){	obj = new QuadArray(totalVerts,			    QuadArray.COORDINATES | 			    QuadArray.NORMALS);      }      else {	obj = new QuadArray(totalVerts,			    QuadArray.COORDINATES);      }    Point3f[] newpts = new Point3f[totalVerts];    Vector3f[] newnormals = new Vector3f[totalVerts];    TexCoord2f[] newtcoords = new TexCoord2f[totalVerts];    int currVert = 0;    if (debug > 1) System.out.println("total prims " + currPrimCnt);    for (i = 0; i < currPrimCnt; i++){      if (debug > 1) System.out.println("start " + currPrimStartVertex[i] + 					" end " + currPrimEndVertex[i]);      for (int j = currPrimStartVertex[i]; j < currPrimEndVertex[i] - 3;j+=4){	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j);	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j + 1);	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j + 2);	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j + 3);	numTris += 2;      }    }    numVerts = currVert;    obj.setCoordinates(0, newpts);    if ((flags & Primitive.GENERATE_NORMALS) != 0)      obj.setNormals(0, newnormals);    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)      obj.setTextureCoordinates(0, 0, newtcoords);    geometry = obj;    return obj;  }  private GeometryArray processTriangles()  {    GeometryArray obj = null;    int i;    int totalVerts = 0;    for (i = 0; i < currPrimCnt; i++){      totalVerts += currPrimEndVertex[i] - currPrimStartVertex[i];    }    if (debug >= 1) System.out.println("totalVerts " + totalVerts);    if (((flags & Primitive.GENERATE_NORMALS) != 0) &&	((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)){      obj = new TriangleArray(totalVerts,			  TriangleArray.COORDINATES | 			  TriangleArray.NORMALS |			  TriangleArray.TEXTURE_COORDINATE_2,			  1, texCoordSetMap);    }    else       if (((flags & Primitive.GENERATE_NORMALS) == 0) &&	  ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)){	obj = new TriangleArray(totalVerts,			    TriangleArray.COORDINATES | 			    TriangleArray.TEXTURE_COORDINATE_2,			  1, texCoordSetMap);      }    else       if (((flags & Primitive.GENERATE_NORMALS) != 0) &&	  ((flags & Primitive.GENERATE_TEXTURE_COORDS) == 0)){	obj = new TriangleArray(totalVerts,			    TriangleArray.COORDINATES | 			    TriangleArray.NORMALS);      }      else {	obj = new TriangleArray(totalVerts,			    TriangleArray.COORDINATES);      }    Point3f[] newpts = new Point3f[totalVerts];    Vector3f[] newnormals = new Vector3f[totalVerts];    TexCoord2f[] newtcoords = new TexCoord2f[totalVerts];    int currVert = 0;        for (i = 0; i < currPrimCnt; i++){      for (int j = currPrimStartVertex[i]; j < currPrimEndVertex[i] - 2;j+=3){	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j);	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j + 1);	outVertex(newpts, newnormals, newtcoords, currVert++,		  pts, normals, tcoords, j + 2);	numTris += 1;      }    }    numVerts = currVert;    obj.setCoordinates(0, newpts);    if ((flags & Primitive.GENERATE_NORMALS) != 0)      obj.setNormals(0, newnormals);    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0)      obj.setTextureCoordinates(0, 0, newtcoords);    geometry = obj;    return obj;  }  private GeometryArray processTriangleFan() {    if (debug > 0) System.out.println("processTriangleFan");    GeometryArray obj = null;    int i;    int totalVerts = 0;    int stripCounts[] = new int[currPrimCnt];    // figure out how many vertices we need to hold the individual fans    for (i = 0; i < currPrimCnt; i++) {      stripCounts[i] = currPrimEndVertex[i] - currPrimStartVertex[i];      totalVerts += stripCounts[i];    }    // figure out what flags we need    int tfFlags = TriangleFanArray.COORDINATES;    if ((flags & Primitive.GENERATE_NORMALS) != 0) {      tfFlags |= TriangleFanArray.NORMALS;    }    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0) {      tfFlags |= TriangleFanArray.TEXTURE_COORDINATE_2;    }    // create the TriangleFanArray    obj = new TriangleFanArray(totalVerts, tfFlags, 1, texCoordSetMap,			       stripCounts);    // allocate space for vertex info    Point3f[] newpts = new Point3f[totalVerts];    Vector3f[] newnormals = new Vector3f[totalVerts];    TexCoord2f[] newtcoords = new TexCoord2f[totalVerts];    int currVert = 0;    // repeat for each fan    for (i = 0; i < currPrimCnt; i++) {      for (int j = currPrimStartVertex[i]; j < currPrimEndVertex[i]; j++) {	outVertex(newpts, newnormals, newtcoords, currVert++, pts, 		  normals, tcoords, j);      }    }    for (i = 0; i < newpts.length; i++) {      if (debug > 1) System.out.println("i = " + i + " " + newpts[i]);    }    numVerts = currVert;    numTris = totalVerts - currPrimCnt * 2;        // set the coordinates on the GeometryArray    obj.setCoordinates(0, newpts);    // set the normals and tex coords if necessary    if ((flags & Primitive.GENERATE_NORMALS) != 0) {      obj.setNormals(0, newnormals);    }    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0) {      obj.setTextureCoordinates(0, 0, newtcoords);    }    geometry = obj;    return obj;  }  void outVertex(Point3f[] dpts, Vector3f[] dnormals, TexCoord2f[] dtcoords,		 int dloc,		 Point3f[] spts, Vector3f[] snormals, TexCoord2f[] stcoords,		 int sloc)  {    if (debug >= 1) System.out.println("v " + spts[sloc].x + " " +				       spts[sloc].y + " " + 				       spts[sloc].z);    // PSP: Do we really need new points here?    dpts[dloc] = new Point3f(spts[sloc]);    if ((flags & Primitive.GENERATE_NORMALS) != 0){      dnormals[dloc] = new Vector3f(snormals[sloc]);    }    if ((flags & Primitive.GENERATE_TEXTURE_COORDS) != 0){      if (debug >= 2) System.out.println("final out tcoord");      dtcoords[dloc] = new TexCoord2f(stcoords[sloc]);    }  }}

⌨️ 快捷键说明

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