Я загрузил объект в свою сцену. Я хочу использовать свойства вершин в своей программе машинного зрения. У моей модели сущности есть кости, которые я изменяю эти кости во время выполнения. поэтому мне нужны атрибуты времени выполнения вершин. эти атрибуты являются POSITIONS и NORMAL и COLOR. Для этой цели я использую следующие коды:
Ogre::VertexData* vertex_data = myEntity->_getSkelAnimVertexData();
vertex_data->vertexDeclaration->findElementBySemantic(Ogre::VES_POSITION);
Метод _getSkelAnimVertexData извлекает позиции вершин вершин и работает правильно. Элемент VES_DIFFUSE - это постоянный тип ARGB, который не изменяется при изменении костей модели. эти значения считываются из моего модельного файла сетки (но не изменяются во время выполнения). Мой вопрос заключается в том, как получить цвет выполнения вершин модели с учетом эффектов различного света и диффузного свойства?
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].
Надеюсь, поможет. :)