Ogre3d 엔진에서 특정Entity의 버텍스정보랑 인덱스 정보에 접근하는 방법

//미니맵용 메시를 읽어들인다.
Ogre::Entity*  pTmpEntity= m_pSceneMgr->createEntity("TmpEntity", "실제메시파일이름");
Ogre::SubMesh* pSubMesh = pTmpEntity->getMesh()->getSubMesh(0);

//미니맵용 버텍스 버퍼를 가져온다.
Ogre::HardwareVertexBufferSharedPtr tmpVertexBuffer = pSubMesh ->vertexData->vertexBufferBinding->getBuffer( 0 );
//미니맵용 인덱스 버퍼를 가져온다.
Ogre::HardwareIndexBufferSharedPtr    tmpIndexBuffer    = pTmpSubMesh->indexData->indexBuffer;

float* pVertex = static_cast<float*>( tmpVertexBuffer->lock( Ogre::HardwareBuffer::HBL_READ_ONLY ) );
unsigned short* pIndices = static_cast<unsigned short*>(tmpIndexBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD));

for (size_t i=0; i<=tmpSubMesh->indexData->indexCount; ++i  , ++pIndices){
	x = (*pIndices)*3;
	y = (*pIndices)*3+1;
	z = (*pIndices)*3+2;
	//아래 벡터vPosition가 해당메시의 버텍스 위치를 가진 벡터가 된다.
	Ogre::Vector3 vPosition(pVertex[x],pVertex[y],pVertex[z]);
}
//버텍스, 인덱스 버퍼 락건거 풀어준다.
tmpIndexBuffer->unlock();
tmpVertexBuffer->unlock();
m_pSceneMgr->destroyEntity(pTmpEntity);

뭐 이런식으로 하면 됩니다.
인덱스 버퍼는 생각도 못하고 가진 버텍스만 가지고 라인스트립이라던지 트라이앵글스트립 등등으로 해볼려고 하니 제대로 안나오더군요.


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다