Beispiel #1
0
        private void generatePrimitiveData()
        {
            // Decide which type of primitive to create
            //
            iarr.clear();
            faceCounts.clear();
            faceConnects.clear();

            switch (shapeFlag)
            {
            case 1:
            default:
                create_icosa_points();
                num_verts      = 12;
                num_faces      = 20;
                edges_per_face = 3;
                p_gons         = icosa_gons;
                break;

            case 2:
                create_dodecahedron();
                num_verts      = 20;
                num_faces      = 12;
                edges_per_face = 5;
                p_gons         = dodeca_gons;
                break;

            case 3:
                create_tetrahedron();
                num_verts      = 4;
                num_faces      = 4;
                edges_per_face = 3;
                p_gons         = tetra_gons;
                break;

            case 4:
                create_cube();
                num_verts      = 8;
                num_faces      = 6;
                edges_per_face = 4;
                p_gons         = cube_gons;
                break;

            case 5:
                create_octahedron();
                num_verts      = 6;
                num_faces      = 8;
                edges_per_face = 3;
                p_gons         = octa_gons;
                break;

            case 6:
                createPlane();
                p_gons = null;
                break;

            case 7:
                createCylinder();
                p_gons = null;
                break;

            case 8:
                create_truncated_icosahedron();
                p_gons = null;
                break;
            }

            // Construct the point array
            //
            pa.clear();
            int i;

            for (i = 0; i < num_verts; i++)
            {
                pa.append(iarr[i]);
            }

            // If we are using polygon data then set up the face connect array
            // here. Otherwise, the create function will do it.
            //
            if (null != p_gons)
            {
                num_face_connects = num_faces * edges_per_face;
                num_edges         = num_face_connects / 2;

                for (i = 0; i < num_faces; i++)
                {
                    faceCounts.append(edges_per_face);
                }

                for (i = 0; i < (num_faces * edges_per_face); i++)
                {
                    faceConnects.append(p_gons[i] - 1);
                }
            }
        }
Beispiel #2
0
 public void reset()
 {
     ucoord.clear();
     vcoord.clear();
     faceVertexIndex.clear();
 }
Beispiel #3
0
		//
		// Description
		//
		//    Constructs a cube
		//
		public void buildCube(double cube_size, 
							  MPointArray pa,
							  MIntArray faceCounts, 
							  MIntArray faceConnects,
							  MVectorArray normals, 
							  apiMeshGeomUV uvs)
		{
			const int num_faces			= 6;
			const int num_face_connects	= 24;
			const double normal_value   = 0.5775;
			const int uv_count			= 14; 
	
			pa.clear();
			faceCounts.clear();
			faceConnects.clear();
			uvs.reset();

			pa.append( new MPoint( -cube_size, -cube_size, -cube_size ) );
			pa.append( new MPoint(  cube_size, -cube_size, -cube_size ) );
			pa.append( new MPoint(  cube_size, -cube_size,  cube_size ) );
			pa.append( new MPoint( -cube_size, -cube_size,  cube_size ) );
			pa.append( new MPoint( -cube_size,  cube_size, -cube_size ) );
			pa.append( new MPoint( -cube_size,  cube_size,  cube_size ) );
			pa.append( new MPoint(  cube_size,  cube_size,  cube_size ) );
			pa.append( new MPoint(  cube_size,  cube_size, -cube_size ) );

			normals.append( new MVector( -normal_value, -normal_value, -normal_value ) );
			normals.append( new MVector(  normal_value, -normal_value, -normal_value ) );
			normals.append( new MVector(  normal_value, -normal_value,  normal_value ) );
			normals.append( new MVector( -normal_value, -normal_value,  normal_value ) );
			normals.append( new MVector( -normal_value,  normal_value, -normal_value ) );
			normals.append( new MVector( -normal_value,  normal_value,  normal_value ) );
			normals.append( new MVector(  normal_value,  normal_value,  normal_value ) );
			normals.append( new MVector(  normal_value,  normal_value, -normal_value ) );

			// Define the UVs for the cube. 
			//
			float[] uv_pts = new float[uv_count*2] { 0.375f, 0.0f,
													 0.625f, 0.0f,
													 0.625f, 0.25f,
													 0.375f, 0.25f,
													 0.625f, 0.5f,
													 0.375f, 0.5f,
													 0.625f, 0.75f,
													 0.375f, 0.75f,
													 0.625f, 1.0f,
													 0.375f, 1.0f,
													 0.875f, 0.0f,
													 0.875f, 0.25f,
													 0.125f, 0.0f,
													 0.125f, 0.25f };

			// UV Face Vertex Id.
			//
			int[] uv_fvid = new int[num_face_connects]{ 0, 1, 2, 3, 
														3, 2, 4, 5, 
														5, 4, 6, 7, 
														7, 6, 8, 9, 
														1, 10, 11, 2, 
														12, 0, 3, 13 };

			int i;
			for ( i = 0; i < uv_count; i ++ ) {
				uvs.append_uv( uv_pts[i*2], uv_pts[i*2 + 1] ); 
			}
	
			for ( i = 0; i < num_face_connects; i ++ ) { 
				uvs.faceVertexIndex.append( uv_fvid[i] ); 
			}

			// Set up an array containing the number of vertices
			// for each of the 6 cube faces (4 vertices per face)
			//
			int[] face_counts = new int[num_faces]{ 4, 4, 4, 4, 4, 4 };

			for ( i=0; i<num_faces; i++ )
			{
				faceCounts.append( face_counts[i] );
			}

			// Set up and array to assign vertices from pa to each face 
			//
			int[] face_connects = new int[ num_face_connects ]{ 0, 1, 2, 3,
																4, 5, 6, 7,
																3, 2, 6, 5,
																0, 3, 5, 4,
																0, 4, 7, 1,
																1, 7, 6, 2 };
			for ( i=0; i<num_face_connects; i++ )
			{
				faceConnects.append( face_connects[i] );
			}
		}
Beispiel #4
0
        //
        // Description
        //
        //    Constructs a cube
        //
        public void buildCube(double cube_size,
                              MPointArray pa,
                              MIntArray faceCounts,
                              MIntArray faceConnects,
                              MVectorArray normals,
                              apiMeshGeomUV uvs)
        {
            const int    num_faces         = 6;
            const int    num_face_connects = 24;
            const double normal_value      = 0.5775;
            const int    uv_count          = 14;

            pa.clear();
            faceCounts.clear();
            faceConnects.clear();
            uvs.reset();

            pa.append(new MPoint(-cube_size, -cube_size, -cube_size));
            pa.append(new MPoint(cube_size, -cube_size, -cube_size));
            pa.append(new MPoint(cube_size, -cube_size, cube_size));
            pa.append(new MPoint(-cube_size, -cube_size, cube_size));
            pa.append(new MPoint(-cube_size, cube_size, -cube_size));
            pa.append(new MPoint(-cube_size, cube_size, cube_size));
            pa.append(new MPoint(cube_size, cube_size, cube_size));
            pa.append(new MPoint(cube_size, cube_size, -cube_size));

            normals.append(new MVector(-normal_value, -normal_value, -normal_value));
            normals.append(new MVector(normal_value, -normal_value, -normal_value));
            normals.append(new MVector(normal_value, -normal_value, normal_value));
            normals.append(new MVector(-normal_value, -normal_value, normal_value));
            normals.append(new MVector(-normal_value, normal_value, -normal_value));
            normals.append(new MVector(-normal_value, normal_value, normal_value));
            normals.append(new MVector(normal_value, normal_value, normal_value));
            normals.append(new MVector(normal_value, normal_value, -normal_value));

            // Define the UVs for the cube.
            //
            float[] uv_pts = new float[uv_count * 2] {
                0.375f, 0.0f,
                0.625f, 0.0f,
                0.625f, 0.25f,
                0.375f, 0.25f,
                0.625f, 0.5f,
                0.375f, 0.5f,
                0.625f, 0.75f,
                0.375f, 0.75f,
                0.625f, 1.0f,
                0.375f, 1.0f,
                0.875f, 0.0f,
                0.875f, 0.25f,
                0.125f, 0.0f,
                0.125f, 0.25f
            };

            // UV Face Vertex Id.
            //
            int[] uv_fvid = new int[num_face_connects] {
                0, 1, 2, 3,
                3, 2, 4, 5,
                5, 4, 6, 7,
                7, 6, 8, 9,
                1, 10, 11, 2,
                12, 0, 3, 13
            };

            int i;

            for (i = 0; i < uv_count; i++)
            {
                uvs.append_uv(uv_pts[i * 2], uv_pts[i * 2 + 1]);
            }

            for (i = 0; i < num_face_connects; i++)
            {
                uvs.faceVertexIndex.append(uv_fvid[i]);
            }

            // Set up an array containing the number of vertices
            // for each of the 6 cube faces (4 vertices per face)
            //
            int[] face_counts = new int[num_faces] {
                4, 4, 4, 4, 4, 4
            };

            for (i = 0; i < num_faces; i++)
            {
                faceCounts.append(face_counts[i]);
            }

            // Set up and array to assign vertices from pa to each face
            //
            int[] face_connects = new int[num_face_connects] {
                0, 1, 2, 3,
                4, 5, 6, 7,
                3, 2, 6, 5,
                0, 3, 5, 4,
                0, 4, 7, 1,
                1, 7, 6, 2
            };
            for (i = 0; i < num_face_connects; i++)
            {
                faceConnects.append(face_connects[i]);
            }
        }