【问题标题】:How to retrieve runtime color of vertices of a model in Ogre3D?如何在 Ogre3D 中检索模型顶点的运行时颜色?
【发布时间】:2014-12-27 12:56:51
【问题描述】:

我在我的场景中加载了一个实体。我想在我的机器视觉程序中使用顶点的属性。 我的实体模型具有我在运行时更改这些骨骼的骨骼。因此我想要顶点的运行时属性。这些属性是 POSITIONS 和 NORMAL 和 COLOR。为此,我使用如下代码:

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

方法 _getSkelAnimVertexData 检索运行时顶点位置并正常工作。 VES_DIFFUSE 元素是一个常量 ARGB 类型,当模型的骨骼改变时不会改变。这些值是从我模型的网格文件中读取的(但在运行时不会更改)。 我的问题是如何通过考虑不同光和漫反射属性的影响来检索模型顶点的运行时颜色?

【问题讨论】:

  • 如果你在 Ogre 的论坛上提问,你可能会很快得到答案。那里的 Ogre 活跃用户比 SO 中的多

标签: c++ vertex ogre3d


【解决方案1】:
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]。

希望对您有所帮助。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2015-01-03
    相关资源
    最近更新 更多