// Create patch patchDecl = HardwareBufferManager::getSingleton().createVertexDeclaration(); patchDecl->addElement(0, 0, VET_FLOAT3, VES_POSITION); patchDecl->addElement(0, sizeof(float)*3, VET_FLOAT3, VES_NORMAL); patchDecl->addElement(0, sizeof(float)*6, VET_FLOAT2, VES_TEXTURE_COORDINATES, 0); // Make a 3x3 patch for test patchCtlPoints = (float*)( new PatchVertex[9] ); // Patch data PatchVertex *pVert = (PatchVertex*)patchCtlPoints; pVert->x = -500.0; pVert->y = 200.0; pVert->z = -500.0; pVert->nx = -0.5; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 0.0; pVert->v = 0.0; pVert++; pVert->x = 0.0; pVert->y = 500.0; pVert->z = -750.0; pVert->nx = 0.0; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 0.5; pVert->v = 0.0; pVert++; pVert->x = 500.0; pVert->y = 1000.0; pVert->z = -500.0; pVert->nx = 0.5; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 1.0; pVert->v = 0.0; pVert++; pVert->x = -500.0; pVert->y = 0.0; pVert->z = 0.0; pVert->nx = -0.5; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 0.0; pVert->v = 0.5; pVert++; pVert->x = 0.0; pVert->y = 500.0; pVert->z = 0.0; pVert->nx = 0.0; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 0.5; pVert->v = 0.5; pVert++; pVert->x = 500.0; pVert->y = -50.0; pVert->z = 0.0; pVert->nx = 0.5; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 1.0; pVert->v = 0.5; pVert++; pVert->x = -500.0; pVert->y = 0.0; pVert->z = 500.0; pVert->nx = -0.5; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 0.0; pVert->v = 1.0; pVert++; pVert->x = 0.0; pVert->y = 500.0; pVert->z = 500.0; pVert->nx = 0.0; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 0.5; pVert->v = 1.0; pVert++; pVert->x = 500.0; pVert->y = 200.0; pVert->z = 800.0; pVert->nx = 0.5; pVert->ny = 0.5; pVert->nz = 0.0; pVert->u = 1.0; pVert->v = 1.0; pVert++; patch = MeshManager::getSingleton().createBezierPatch( "Bezier1", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, patchCtlPoints, patchDecl, 3, 3, 5, 5, PatchSurface::VS_BOTH); // Start patch at 0 detail patch->setSubdivision(0.0f); // Create entity based on patch Entity* patchEntity = mSceneMgr->createEntity("Entity1", "Bezier1"); MaterialPtr pMat = MaterialManager::getSingleton().create("TextMat", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); pMat->getTechnique(0)->getPass(0)->createTextureUnitState( "BumpyMetal.jpg" ); patchEntity->setMaterialName("TextMat"); patchPass = pMat->getTechnique(0)->getPass(0); // Attach the entity to the root of the scene mSceneMgr->getRootSceneNode()->attachObject(patchEntity);