Esempio n. 1
0
/*void 
VSSurfRevLib::computeVAO(int numP, float *p, float *points, int sides, float smoothCos) {
	// Compute and store vertices

	int numSides = sides;
	int numPoints = numP + 2;

	std::vector<float> vertex, normal, textco, tangent, bitangent;
	vertex.resize(numP * 2 * 4 * (numSides + 1));
	normal.resize(numP * 2 * 3 * (numSides + 1));
	textco.resize(numP * 2 * 2 * (numSides + 1));
	tangent.resize(numP * 2 * 3 * (numSides + 1));
	bitangent.resize(numP * 2 * 3 * (numSides + 1));

	float inc = 2 * 3.14159f / (numSides);
	float nx,ny;
	float delta;
	int smooth;
	std::vector<int> smoothness;
	int k = 0;
	float y[3] = { 0.0f, 1.0f, 0.0f };
	float z[3] = { 0.0f, 0.0f, 1.0f };

	// init bounding box
	for(int i = 0; i < 3; ++i) {
		bb[1][i] = -FLT_MAX;
		bb[0][i] = FLT_MAX;
	}

	for(int i=0; i < numP; i++) {
		revSmoothNormal2(points+(i*2),&nx,&ny, smoothCos, 0);
		for(int j=0; j<=numSides;j++) {

			if ((i == 0 && p[0] == 0.0f) || ( i == numP-1 && p[(i+1)*2] == 0.0))
				delta = inc * 0.5f;
			else
				delta = 0.0f;

			normal[((k)*(numSides+1) + j)*3]   = nx * cosf(j*inc+delta);
			normal[((k)*(numSides+1) + j)*3+1] = ny;
			normal[((k)*(numSides+1) + j)*3+2] = nx * sinf(-j*inc+delta);

			vertex[((k)*(numSides+1) + j)*4]   = p[i*2] * cosf(j*inc);
			vertex[((k)*(numSides+1) + j)*4+1] = p[(i*2)+1];
			vertex[((k)*(numSides+1) + j)*4+2] = p[i*2] * sinf(-j*inc);
			vertex[((k)*(numSides+1) + j)*4+3] = 1.0f;

			textco[((k)*(numSides+1) + j)*2]   = ((j+0.0f)/numSides);
			textco[((k)*(numSides+1) + j)*2+1] = (i+0.0f)/(numP-1);

			float t[3]; float *n = (float *)&(normal[((k)*(numSides + 1) + j) * 3]);
			if (fabs(VSMathLib::dotProduct(y, n)) > 0.98) {
				t[0] = sinf(-j*inc + delta); t[1] = 0; t[2] = -cosf(j*inc + delta);
			}
			else {
				VSMathLib::crossProduct(y, n, t);
			}
			tangent[((k)*(numSides + 1) + j) * 3] = t[0];
			tangent[((k)*(numSides + 1) + j) * 3 + 1] = t[1];
			tangent[((k)*(numSides + 1) + j) * 3 + 2] = t[2];


			float bt[3];
			VSMathLib::crossProduct(t, n, bt);
			bitangent[((k)*(numSides + 1) + j) * 3] = bt[0];
			bitangent[((k)*(numSides + 1) + j) * 3 + 1] = bt[1];
			bitangent[((k)*(numSides + 1) + j) * 3 + 2] = bt[2];

			// find bounding box
			if (vertex[((k)*(numSides+1) + j)*4] < bb[0][0]) 
				bb[0][0] = vertex[((k)*(numSides+1) + j)*4];
			if (vertex[((k)*(numSides+1) + j)*4] > bb[1][0]) 
				bb[1][0] = vertex[((k)*(numSides+1) + j)*4];

			if (vertex[((k)*(numSides+1) + j)*4+1] < bb[0][1]) 
				bb[0][1] = vertex[((k)*(numSides+1) + j)*4+1];
			if (vertex[((k)*(numSides+1) + j)*4+1] > bb[1][1]) 
				bb[1][1] = vertex[((k)*(numSides+1) + j)*4+1];

			if (vertex[((k)*(numSides+1) + j)*4+2] < bb[0][2]) 
				bb[0][2] = vertex[((k)*(numSides+1) + j)*4+2];
			if (vertex[((k)*(numSides+1) + j)*4+2] > bb[1][2]) 
				bb[1][2] = vertex[((k)*(numSides+1) + j)*4+2];
		}

		k++;
		if (i < numP-1) {
			smooth = revSmoothNormal2(points+((i+1)*2),&nx,&ny, smoothCos, 1);

			if (!smooth) {
				smoothness.push_back(1);
				for(int j=0; j<=numSides;j++) {

					normal[((k)*(numSides+1) + j)*3]   = nx * cosf(j*inc);
					normal[((k)*(numSides+1) + j)*3+1] = ny;
					normal[((k)*(numSides+1) + j)*3+2] = nx * sinf(-j*inc);

					vertex[((k)*(numSides+1) + j)*4]   = p[(i+1)*2] * cosf(j*inc);
					vertex[((k)*(numSides+1) + j)*4+1] = p[((i+1)*2)+1];
					vertex[((k)*(numSides+1) + j)*4+2] = p[(i+1)*2] * sinf(-j*inc);
					vertex[((k)*(numSides+1) + j)*4+3] = 1.0f;

					textco[((k)*(numSides+1) + j)*2]   = ((j+0.0f)/numSides);
					textco[((k)*(numSides+1) + j)*2+1] = (i+1+0.0f)/(numP-1);

					float t[3]; float *n = (float *)&(normal[((k)*(numSides + 1) + j) * 3]);
					if (fabs(VSMathLib::dotProduct(y, n)) > 0.98) {
						t[0] = sinf(-j*inc + delta); t[1] = 0; t[2] = -cosf(j*inc + delta);
					}
					else {
						VSMathLib::crossProduct(y, n, t);
					}
					tangent[((k)*(numSides + 1) + j) * 3] = t[0];
					tangent[((k)*(numSides + 1) + j) * 3 + 1] = t[1];
					tangent[((k)*(numSides + 1) + j) * 3 + 2] = t[2];


					float bt[3];
					VSMathLib::crossProduct(t, n, bt);
					bitangent[((k)*(numSides + 1) + j) * 3] = bt[0];
					bitangent[((k)*(numSides + 1) + j) * 3 + 1] = bt[1];
					bitangent[((k)*(numSides + 1) + j) * 3 + 2] = bt[2];

					// find bounding box
					if (vertex[((k)*(numSides+1) + j)*4] < bb[0][0]) 
						bb[0][0] = vertex[((k)*(numSides+1) + j)*4];
					if (vertex[((k)*(numSides+1) + j)*4] > bb[1][0]) 
						bb[1][0] = vertex[((k)*(numSides+1) + j)*4];

					if (vertex[((k)*(numSides+1) + j)*4+1] < bb[0][1]) 
						bb[0][1] = vertex[((k)*(numSides+1) + j)*4+1];
					if (vertex[((k)*(numSides+1) + j)*4+1] > bb[1][1]) 
						bb[1][1] = vertex[((k)*(numSides+1) + j)*4+1];

					if (vertex[((k)*(numSides+1) + j)*4+2] < bb[0][2]) 
						bb[0][2] = vertex[((k)*(numSides+1) + j)*4+2];
					if (vertex[((k)*(numSides+1) + j)*4+2] > bb[1][2]) 
						bb[1][2] = vertex[((k)*(numSides+1) + j)*4+2];
				}
				k++;
			}
			else
				smoothness.push_back(0);
		}
	}

	bbInit = true;

	std::vector<unsigned int> faceIndex;
	faceIndex.resize((numP - 1) * (numSides + 1) * 6);
	int count = 0;
	k = 0;
	for (int i = 0; i < numP-1; ++i) {
		for (int j = 0; j < numSides; ++j) {
		
		 {
	faceIndex[count++] = (unsigned int)(k * (numSides + 1) + j);
	faceIndex[count++] = (unsigned int)((k + 1) * (numSides + 1) + j + 1);
	faceIndex[count++] = (unsigned int)((k + 1) * (numSides + 1) + j);
}
 {
	faceIndex[count++] = (unsigned int)(k * (numSides + 1) + j);
	faceIndex[count++] = (unsigned int)(k * (numSides + 1) + j + 1);
	faceIndex[count++] = (unsigned int)((k + 1) * (numSides + 1) + j + 1);
}

		}
		k++;
		k += smoothness[i];
	}

	MyMesh aMesh;

	buildVAO(aMesh, (k + 1)*(numSides + 1), &(vertex[0]), &(normal[0]), &(textco[0]), &(tangent[0]), &(bitangent[0]), count, &(faceIndex[0]));

	aMesh.type = GL_TRIANGLES;
	aMesh.mat.ambient[0] = 0.2f;
	aMesh.mat.ambient[1] = 0.2f;
	aMesh.mat.ambient[2] = 0.2f;
	aMesh.mat.ambient[3] = 1.0f;

	aMesh.mat.diffuse[0] = 0.8f;
	aMesh.mat.diffuse[1] = 0.8f;
	aMesh.mat.diffuse[2] = 0.8f;
	aMesh.mat.diffuse[3] = 1.0f;

	aMesh.mat.specular[0] = 0.8f;
	aMesh.mat.specular[1] = 0.8f;
	aMesh.mat.specular[2] = 0.8f;
	aMesh.mat.specular[3] = 1.0f;

	aMesh.mat.shininess = 100.0f;
	aMesh.mat.texCount = 0;

	mVSML->loadIdentity(VSMathLib::AUX0);
	memcpy(aMesh.transform, mVSML->get(VSMathLib::AUX0),
		sizeof(float) * 16);

	mMyMeshes.push_back(aMesh);
}*/
void 
VSSurfRevLib::computeVAO(int numP, float *p, float *points, int sides, float smoothCos) {
	// Compute and store vertices

	int numSides = sides;
	int numPoints = numP + 2;

	std::vector<float> vertex, normal, textco, tangent, bitangent;
	vertex.resize(numP * 2 * 4 * (numSides + 1));
	normal.resize(numP * 2 * 3 * (numSides + 1));
	textco.resize(numP * 2 * 2 * (numSides + 1));
	tangent.resize(numP * 2 * 3 * (numSides + 1));
	bitangent.resize(numP * 2 * 3 * (numSides + 1));

	float inc = 2 * 3.14159f / (numSides);
	float nx,ny;
	float delta;
	int smooth;
	std::vector<int> smoothness;
	int k = 0;
	float y[3] = { 0.0f, 1.0f, 0.0f };
	float z[3] = { 0.0f, 0.0f, 1.0f };

	// init bounding box
	for(int i = 0; i < 3; ++i) {
		bb[1][i] = -FLT_MAX;
		bb[0][i] = FLT_MAX;
	}

	for(int i=0; i < numP; i++) {
		revSmoothNormal2(points+(i*2),&nx,&ny, smoothCos, 0);
		for(int j=0; j<=numSides;j++) {

			if ((i == 0 && p[0] == 0.0f) || ( i == numP-1 && p[(i+1)*2] == 0.0))
				delta = inc * 0.5f;
			else
				delta = 0.0f;

			normal[((k)*(numSides+1) + j)*3]   = nx * sinf(j*inc+delta);
			normal[((k)*(numSides+1) + j)*3+1] = ny;
			normal[((k)*(numSides+1) + j)*3+2] = nx * cosf(-j*inc+delta);

			vertex[((k)*(numSides+1) + j)*4]   = p[i*2] * sinf(j*inc);
			vertex[((k)*(numSides+1) + j)*4+1] = p[(i*2)+1];
			vertex[((k)*(numSides+1) + j)*4+2] = p[i*2] * cosf(-j*inc);
			vertex[((k)*(numSides+1) + j)*4+3] = 1.0f;

			textco[((k)*(numSides+1) + j)*2]   = ((j+0.0f)/numSides);
			textco[((k)*(numSides+1) + j)*2+1] = (i+0.0f)/(numP-1);

			float t[3]; float *n = (float *)&(normal[((k)*(numSides + 1) + j) * 3]);
			if (fabs(VSMathLib::dotProduct(y, n)) > 0.98) {
				t[0] = cosf(-j*inc + delta); t[1] = 0; t[2] = -sinf(j*inc + delta);
			}
			else {
				VSMathLib::crossProduct(y, n, t);
			}
			tangent[((k)*(numSides + 1) + j) * 3] = t[0];
			tangent[((k)*(numSides + 1) + j) * 3 + 1] = t[1];
			tangent[((k)*(numSides + 1) + j) * 3 + 2] = t[2];


			float bt[3];
			VSMathLib::crossProduct(t, n, bt);
			bitangent[((k)*(numSides + 1) + j) * 3] = bt[0];
			bitangent[((k)*(numSides + 1) + j) * 3 + 1] = bt[1];
			bitangent[((k)*(numSides + 1) + j) * 3 + 2] = bt[2];

			// find bounding box
			if (vertex[((k)*(numSides+1) + j)*4] < bb[0][0]) 
				bb[0][0] = vertex[((k)*(numSides+1) + j)*4];
			if (vertex[((k)*(numSides+1) + j)*4] > bb[1][0]) 
				bb[1][0] = vertex[((k)*(numSides+1) + j)*4];

			if (vertex[((k)*(numSides+1) + j)*4+1] < bb[0][1]) 
				bb[0][1] = vertex[((k)*(numSides+1) + j)*4+1];
			if (vertex[((k)*(numSides+1) + j)*4+1] > bb[1][1]) 
				bb[1][1] = vertex[((k)*(numSides+1) + j)*4+1];

			if (vertex[((k)*(numSides+1) + j)*4+2] < bb[0][2]) 
				bb[0][2] = vertex[((k)*(numSides+1) + j)*4+2];
			if (vertex[((k)*(numSides+1) + j)*4+2] > bb[1][2]) 
				bb[1][2] = vertex[((k)*(numSides+1) + j)*4+2];
		}

		k++;
		if (i < numP-1) {
			smooth = revSmoothNormal2(points+((i+1)*2),&nx,&ny, smoothCos, 1);

			if (!smooth) {
				smoothness.push_back(1);
				for(int j=0; j<=numSides;j++) {

					normal[((k)*(numSides+1) + j)*3]   = nx * sinf(j*inc);
					normal[((k)*(numSides+1) + j)*3+1] = ny;
					normal[((k)*(numSides+1) + j)*3+2] = nx * cosf(-j*inc);

					vertex[((k)*(numSides+1) + j)*4]   = p[(i+1)*2] * sinf(j*inc);
					vertex[((k)*(numSides+1) + j)*4+1] = p[((i+1)*2)+1];
					vertex[((k)*(numSides+1) + j)*4+2] = p[(i+1)*2] * cosf(-j*inc);
					vertex[((k)*(numSides+1) + j)*4+3] = 1.0f;

					textco[((k)*(numSides+1) + j)*2]   = ((j+0.0f)/numSides);
					textco[((k)*(numSides+1) + j)*2+1] = (i+1+0.0f)/(numP-1);

					float t[3]; float *n = (float *)&(normal[((k)*(numSides + 1) + j) * 3]);
					if (fabs(VSMathLib::dotProduct(y, n)) > 0.98) {
						t[0] = cos(-j*inc + delta); t[1] = 0; t[2] = -sinf(j*inc + delta);
					}
					else {
						VSMathLib::crossProduct(y, n, t);
					}
					tangent[((k)*(numSides + 1) + j) * 3] = t[0];
					tangent[((k)*(numSides + 1) + j) * 3 + 1] = t[1];
					tangent[((k)*(numSides + 1) + j) * 3 + 2] = t[2];


					float bt[3];
					VSMathLib::crossProduct(t, n, bt);
					bitangent[((k)*(numSides + 1) + j) * 3] = bt[0];
					bitangent[((k)*(numSides + 1) + j) * 3 + 1] = bt[1];
					bitangent[((k)*(numSides + 1) + j) * 3 + 2] = bt[2];

					// find bounding box
					if (vertex[((k)*(numSides+1) + j)*4] < bb[0][0]) 
						bb[0][0] = vertex[((k)*(numSides+1) + j)*4];
					if (vertex[((k)*(numSides+1) + j)*4] > bb[1][0]) 
						bb[1][0] = vertex[((k)*(numSides+1) + j)*4];

					if (vertex[((k)*(numSides+1) + j)*4+1] < bb[0][1]) 
						bb[0][1] = vertex[((k)*(numSides+1) + j)*4+1];
					if (vertex[((k)*(numSides+1) + j)*4+1] > bb[1][1]) 
						bb[1][1] = vertex[((k)*(numSides+1) + j)*4+1];

					if (vertex[((k)*(numSides+1) + j)*4+2] < bb[0][2]) 
						bb[0][2] = vertex[((k)*(numSides+1) + j)*4+2];
					if (vertex[((k)*(numSides+1) + j)*4+2] > bb[1][2]) 
						bb[1][2] = vertex[((k)*(numSides+1) + j)*4+2];
				}
				k++;
			}
			else
				smoothness.push_back(0);
		}
	}

	bbInit = true;

	std::vector<unsigned int> faceIndex;
	faceIndex.resize((numP - 1) * (numSides + 1) * 6);
	int count = 0;
	k = 0;
	for (int i = 0; i < numP-1; ++i) {
		for (int j = 0; j < numSides; ++j) {
		
			/*if (i != 0 || p[0] != 0.0)*/ {
				faceIndex[count++] = (unsigned int)(k * (numSides+1) + j);
				faceIndex[count++] = (unsigned int)((k+1) * (numSides+1) + j + 1);
				faceIndex[count++] = (unsigned int)((k+1) * (numSides+1) + j);
			}
			/*if (i != numP-2 || p[(numP-1)*2] != 0.0)*/ {
				faceIndex[count++] = (unsigned int)(k * (numSides+1) + j);
				faceIndex[count++] = (unsigned int)(k * (numSides+1) + j + 1);
				faceIndex[count++] = (unsigned int)((k+1) * (numSides+1) + j + 1);
			}

		}
		k++;
		k += smoothness[i];	
	}

	MyMesh aMesh;

	buildVAO(aMesh, (k + 1)*(numSides + 1), &(vertex[0]), &(normal[0]), &(textco[0]), &(tangent[0]), &(bitangent[0]), count, &(faceIndex[0]));

	aMesh.type = GL_TRIANGLES;
	aMesh.mat.ambient[0] = 0.2f;
	aMesh.mat.ambient[1] = 0.2f;
	aMesh.mat.ambient[2] = 0.2f;
	aMesh.mat.ambient[3] = 1.0f;

	aMesh.mat.diffuse[0] = 0.8f;
	aMesh.mat.diffuse[1] = 0.8f;
	aMesh.mat.diffuse[2] = 0.8f;
	aMesh.mat.diffuse[3] = 1.0f;

	aMesh.mat.specular[0] = 0.8f;
	aMesh.mat.specular[1] = 0.8f;
	aMesh.mat.specular[2] = 0.8f;
	aMesh.mat.specular[3] = 1.0f;

	aMesh.mat.shininess = 100.0f;
	aMesh.mat.texCount = 0;

	mVSML->loadIdentity(VSMathLib::AUX0);
	memcpy(aMesh.transform, mVSML->get(VSMathLib::AUX0),
			sizeof(float) * 16);

	mMyMeshes.push_back(aMesh);
}
Esempio n. 2
0
void 
VSResSurfRevLib::computeVAO(int numP, float *p, float *points, int sides, float smoothCos) {
	// Compute and store vertices

	int numSides = sides;
	int numPoints = numP + 2;

	float *vertex = (float *)malloc(sizeof(float)*numP * 2 * 4 * (numSides+1));
	float *normal = (float *)malloc(sizeof(float)*numP * 2 * 4 * (numSides+1));
	float *textco = (float *)malloc(sizeof(float)*numP * 2 * 4 * (numSides+1));

	
	float inc = 2 * 3.14159f / (numSides);
	float nx,ny;
	float delta;
	int smooth;
	std::vector<int> smoothness;
	int k = 0;
	for(int i=0; i < numP; i++) {
		revSmoothNormal2(points+(i*2),&nx,&ny, smoothCos, 0);
		for(int j=0; j<=numSides;j++) {

			if ((i == 0 && p[0] == 0.0f) || ( i == numP-1 && p[(i+1)*2] == 0.0))
				delta = inc * 0.5f;
			else
				delta = 0.0f;

			normal[((k)*(numSides+1) + j)*4]   = nx * cos(j*inc+delta);
			normal[((k)*(numSides+1) + j)*4+1] = ny;
			normal[((k)*(numSides+1) + j)*4+2] = nx * sin(-j*inc+delta);
			normal[((k)*(numSides+1) + j)*4+3] = 0.0f;

			vertex[((k)*(numSides+1) + j)*4]   = p[i*2] * cos(j*inc);
			vertex[((k)*(numSides+1) + j)*4+1] = p[(i*2)+1];
			vertex[((k)*(numSides+1) + j)*4+2] = p[i*2] * sin(-j*inc);
			vertex[((k)*(numSides+1) + j)*4+3] = 1.0f;

			textco[((k)*(numSides+1) + j)*4]   = ((j+0.0f)/numSides);
			textco[((k)*(numSides+1) + j)*4+1] = (i+0.0f)/(numP-1);
			textco[((k)*(numSides+1) + j)*4+2] = 0;
			textco[((k)*(numSides+1) + j)*4+3] = 1.0f;
		}
		k++;
		if (i < numP-1) {
			smooth = revSmoothNormal2(points+((i+1)*2),&nx,&ny, smoothCos, 1);

			if (!smooth) {
				smoothness.push_back(1);
				for(int j=0; j<=numSides;j++) {

				normal[((k)*(numSides+1) + j)*4]   = nx * cos(j*inc);
				normal[((k)*(numSides+1) + j)*4+1] = ny;
				normal[((k)*(numSides+1) + j)*4+2] = nx * sin(-j*inc);
				normal[((k)*(numSides+1) + j)*4+3] = 0.0f;

				vertex[((k)*(numSides+1) + j)*4]   = p[(i+1)*2] * cos(j*inc);
				vertex[((k)*(numSides+1) + j)*4+1] = p[((i+1)*2)+1];
				vertex[((k)*(numSides+1) + j)*4+2] = p[(i+1)*2] * sin(-j*inc);
				vertex[((k)*(numSides+1) + j)*4+3] = 1.0f;

				textco[((k)*(numSides+1) + j)*4]   = ((j+0.0f)/numSides);
				textco[((k)*(numSides+1) + j)*4+1] = (i+1+0.0f)/(numP-1);
				textco[((k)*(numSides+1) + j)*4+2] = 0;
				textco[((k)*(numSides+1) + j)*4+3] = 1.0f;
				}
				k++;
			}
			else
				smoothness.push_back(0);
		}
	}

	unsigned int *faceIndex = (unsigned int *)malloc(sizeof(unsigned int) * (numP-1) * (numSides+1 ) * 6);
	unsigned int count = 0;
	k = 0;
	for (int i = 0; i < numP-1; ++i) {
		for (int j = 0; j < numSides; ++j) {
		
			/*if (i != 0 || p[0] != 0.0)*/ {
				faceIndex[count++] = k * (numSides+1) + j;
				faceIndex[count++] = (k+1) * (numSides+1) + j + 1;
				faceIndex[count++] = (k+1) * (numSides+1) + j;
			}
			/*if (i != numP-2 || p[(numP-1)*2] != 0.0)*/ {
				faceIndex[count++] = k * (numSides+1) + j;
				faceIndex[count++] = k * (numSides+1) + j + 1;
				faceIndex[count++] = (k+1) * (numSides+1) + j + 1;
			}

		}
		k++;
		k += smoothness[i];	
	}

	int numVertices = numP*2 * (numSides+1);
	mMyMesh[objId].numIndexes = count;

	glGenVertexArrays(1, &mMyMesh[objId].vao);
	glBindVertexArray(mMyMesh[objId].vao);

	GLuint buffers[4];
	glGenBuffers(4, buffers);
	//vertex coordinates buffer
	glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
	glBufferData(GL_ARRAY_BUFFER, sizeof(float) * numVertices * 4, vertex, GL_STATIC_DRAW);
	glEnableVertexAttribArray(VSShaderLib::VERTEX_COORD_ATTRIB);
	glVertexAttribPointer(VSShaderLib::VERTEX_COORD_ATTRIB, 4, GL_FLOAT, 0, 0, 0);

	//texture coordinates buffer
	glBindBuffer(GL_ARRAY_BUFFER, buffers[1]);
	glBufferData(GL_ARRAY_BUFFER, sizeof(float) * numVertices * 4, textco, GL_STATIC_DRAW);
	glEnableVertexAttribArray(VSShaderLib::TEXTURE_COORD_ATTRIB);
	glVertexAttribPointer(VSShaderLib::TEXTURE_COORD_ATTRIB, 4, GL_FLOAT, 0, 0, 0);

	//normals buffer
	glBindBuffer(GL_ARRAY_BUFFER, buffers[2]);
	glBufferData(GL_ARRAY_BUFFER, sizeof(float) * numVertices * 4, normal, GL_STATIC_DRAW);
	glEnableVertexAttribArray(VSShaderLib::NORMAL_ATTRIB);
	glVertexAttribPointer(VSShaderLib::NORMAL_ATTRIB, 4, GL_FLOAT, 0, 0, 0);

	//index buffer
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[3]);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * mMyMesh[objId].numIndexes, faceIndex , GL_STATIC_DRAW);

	// unbind the VAO
	glBindVertexArray(0);

	mMyMesh[objId].type = GL_TRIANGLES;
	mMyMesh[objId].mat.ambient[0] = 0.2f;
	mMyMesh[objId].mat.ambient[1] = 0.2f;
	mMyMesh[objId].mat.ambient[2] = 0.2f;
	mMyMesh[objId].mat.ambient[3] = 1.0f;
	
	mMyMesh[objId].mat.diffuse[0] = 0.8f;
	mMyMesh[objId].mat.diffuse[1] = 0.8f;
	mMyMesh[objId].mat.diffuse[2] = 0.8f;
	mMyMesh[objId].mat.diffuse[3] = 1.0f;

	mMyMesh[objId].mat.specular[0] = 0.8f;
	mMyMesh[objId].mat.specular[1] = 0.8f;
	mMyMesh[objId].mat.specular[2] = 0.8f;
	mMyMesh[objId].mat.specular[3] = 1.0f;

	mMyMesh[objId].mat.shininess = 100.0f;
}