void PyramidObject::draw( void )
{
       
   glBindVertexArray(this->pyramidModel->vao);

	this->isCulled = checkCulling();
	char buffer[16];
	this->getName(buffer,16);

   if (!isCulled)
		glDrawElements(GL_TRIANGLES, 6*3, GL_UNSIGNED_SHORT, 0);   //The starting point of the IBO
   	else
	{
		printf("\n");
		printf("Object Culled: %s",buffer);
		
	}

	if (SphereRender)
		glutWireSphere(this->pyramidModel->cullR, 20,20);
  

};
Beispiel #2
0
void PlanetMesh::generate(const PxVec3& center, PxF32 radius, PxU32 nbX, PxU32 nbY)
{
	DELETEARRAY(mIndices);
	DELETEARRAY(mVerts);

	mNbVerts = 6*nbX*nbY;
	mVerts = new PxVec3[mNbVerts];
	PxU32 index=0;
	for(PxU32 i=0;i<6;i++)
	{
		for(PxU32 y=0;y<nbY;y++)
		{
			const PxF32 coeffY = float(y)/float(nbY-1);
			for(PxU32 x=0;x<nbX;x++)
			{
				const PxF32 coeffX = float(x)/float(nbX-1);
				const PxF32 xr = coeffX-0.5f;
				const PxF32 yr = coeffY-0.5f;

				PxVec3 offset;
				if(i==0)
				{
					offset = PxVec3(xr, yr, 0.5f);
				}
				else if(i==1)
				{
					offset = PxVec3(xr, yr, -0.5f);
				}
				else if(i==2)
				{
					offset = PxVec3(xr, 0.5f, yr);
				}
				else if(i==3)
				{
					offset = PxVec3(xr, -0.5f, yr);
				}
				else if(i==4)
				{
					offset = PxVec3(0.5f, xr, yr);
				}
				else
				{
					offset = PxVec3(-0.5f, xr, yr);
				}

				offset.normalize();

				const float h = sinf(offset.z*10.0f)*sinf(offset.x*10.0f)*sinf(offset.y*10.0f)*2.0f;

				offset *= (radius + h);

				mVerts[index++] = center + offset;
			}
		}
	}
	PX_ASSERT(index==mNbVerts);

	mNbTris = 6*(nbX-1)*(nbY-1)*2;
	mIndices = new PxU32[mNbTris*3];
	PxU32 offset = 0;
	PxU32 baseOffset = 0;
	for(PxU32 i=0;i<6;i++)
	{
		for(PxU32 y=0;y<nbY-1;y++)
		{
			for(PxU32 x=0;x<nbX-1;x++)
			{
				const PxU32 index0a = baseOffset + x;
				const PxU32 index1a = baseOffset + x + nbX;
				const PxU32 index2a = baseOffset + x + nbX + 1;

				const PxU32 index0b = index0a;
				const PxU32 index1b = index2a;
				const PxU32 index2b = baseOffset + x + 1;

				{
					const PxU8 c = checkCulling(center, index0a, index1a, index2a);
					mIndices[offset]		= index0a;
					mIndices[offset+1+c]	= index1a;
					mIndices[offset+2-c]	= index2a;
					offset+=3;
				}
				{
					const PxU8 c = checkCulling(center, index0b, index1b, index2b);
					mIndices[offset]		= index0b;
					mIndices[offset+1+c]	= index1b;
					mIndices[offset+2-c]	= index2b;
					offset+=3;
				}
			}
			baseOffset += nbX;
		}
		baseOffset += nbX;
	}
	PX_ASSERT(offset==mNbTris*3);
}