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

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


크리에이티브 커먼즈 라이선스Linsoo의 저작물인 이 저작물은(는)크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.