// 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);
Create Patch
最新推荐文章于 2022-04-19 09:45:35 发布