2014-12-27 2 views
0

내 장면에 엔티티를로드했습니다. 내 머신 비전 프로그램에서 버텍스의 속성을 사용하고 싶습니다. 내 엔티티 모델에는 런타임에이 본을 변경하는 본이 있습니다. 따라서 vertex의 런타임 속성을 원합니다. 이러한 속성은 POSITIONS 및 NORMAL 및 COLOR입니다. 이를 위해 다음과 같은 코드를 사용합니다.Ogre3D에서 모델의 정점의 런타임 색상을 검색하는 방법은 무엇입니까?

Ogre::VertexData* vertex_data = myEntity->_getSkelAnimVertexData(); 
vertex_data->vertexDeclaration->findElementBySemantic(Ogre::VES_POSITION); 

메서드 _getSkelAnimVertexData는 런타임에 정점 위치를 검색하고 올바르게 작동합니다. VES_DIFFUSE 요소는 모델의 본이 변경 될 때 변경되지 않는 상수 ARGB 유형입니다. 이 값은 내 모델의 메쉬 파일에서 읽혀 지지만 (런타임에는 변경되지 않음) 내 질문은 다른 빛 및 확산 속성의 영향을 고려하여 모델의 정점 런타임 색상을 검색하는 방법입니까?

+0

Ogre의 포럼에서 질문하시면 더 빨리 답변을 받으실 수 있습니다. 거기에 더 많은 오우거 액티브 사용자가 있습니다. – GameDeveloper

답변

0
for (int i = 0; i < entity->getMesh()->getNumSubMeshes(); ++i) { 
    SubMesh* submesh = entity->getMesh()->getSubMesh(i); 
    Ogre::VertexData* vertexData = submesh->vertexData;     
    const Ogre::VertexElement* colorElement = vertexData->vertexDeclaration->findElementBySemantic(Ogre::VES_DIFFUSE); 
    Ogre::HardwareVertexBufferSharedPtr vertexBuffer = vertexData->vertexBufferBinding->getBuffer(colorElement->getSource()); 
    unsigned char* colors = static_cast<unsigned char*>(vertexBuffer->lock(Ogre::HardwareBuffer::HBL_NORMAL)); 
    float* color; 
    for (int j = 0; j < vertexData->vertexCount; ++j) { 
     vertexElement->baseVertexPointerToElement(colors, (void **)&color); 
     ColourValue ogreColor(color[0], color[1], color[2], color[3]); 
     colors += vertexBuffer->getVertexSize(); 
    } 
    vertexBuffer->unlock(); 
} 

실제로 부동 [4]를 반환하는 경우 난 그냥 모르거나 그냥 플로트의 경우 [3].

희망이 있습니다. :)

관련 문제