Как получить цвет времени выполнения вершин модели в Ogre3D?

0

Я загрузил объект в свою сцену. Я хочу использовать свойства вершин в своей программе машинного зрения. У моей модели сущности есть кости, которые я изменяю эти кости во время выполнения. поэтому мне нужны атрибуты времени выполнения вершин. эти атрибуты являются POSITIONS и NORMAL и COLOR. Для этой цели я использую следующие коды:

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

Метод _getSkelAnimVertexData извлекает позиции вершин вершин и работает правильно. Элемент VES_DIFFUSE - это постоянный тип ARGB, который не изменяется при изменении костей модели. эти значения считываются из моего модельного файла сетки (но не изменяются во время выполнения). Мой вопрос заключается в том, как получить цвет выполнения вершин модели с учетом эффектов различного света и диффузного свойства?

  • 0
    вероятно, вы получите ответ раньше, если спросите на форуме Огре. Там больше активных пользователей Ogre, чем в SO
Теги:
vertex
ogre3d

1 ответ

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

Я просто не знаю, действительно ли он возвращает float [4], или если это просто float [3].

Надеюсь, поможет. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню