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); };
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); }