本文整理汇总了C++中VertexDeclaration::add方法的典型用法代码示例。如果您正苦于以下问题:C++ VertexDeclaration::add方法的具体用法?C++ VertexDeclaration::add怎么用?C++ VertexDeclaration::add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexDeclaration
的用法示例。
在下文中一共展示了VertexDeclaration::add方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createMeshChunk
MeshChunk* Mesh::createMeshChunk(const IntermediateMeshData& data, Mesh& mesh)
{
MeshChunk* newChunk = new MeshChunk();
newChunk->streamMask = 1;
newChunk->indexCount = data.indices.size();
mesh.m_meshChunks.push_back(newChunk);
// vertices
bool hasNormal = (data.normal.size() > 0);
bool hasTangent = (data.tangent.size() > 0);
bool hasBitangent = (data.bitangent.size() > 0);
bool hasUv0 = (data.uv0.size() > 0);
bool hasUv1 = (data.uv1.size() > 0);
bool hasUv2 = (data.uv2.size() > 0);
// create vertex declaration if not already available
if (!mesh.m_vertexDeclaration)
{
VertexDeclaration* vertexDecl = new VertexDeclaration();
uint32 offset = 0;
const VertexElement& element = vertexDecl->add("Position", 0, VEF_FLOAT3, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
if (hasNormal)
{
const VertexElement& element = vertexDecl->add("Normal", 0, VEF_FLOAT3, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
}
if (hasTangent)
{
const VertexElement& element = vertexDecl->add("Tangent", 0, VEF_FLOAT3, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
}
if (hasBitangent)
{
const VertexElement& element = vertexDecl->add("Bitangent", 0, VEF_FLOAT3, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
}
if (hasUv0)
{
const VertexElement& element = vertexDecl->add("Texcoord", 0, VEF_FLOAT2, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
}
if (hasUv1)
{
const VertexElement& element = vertexDecl->add("Texcoord", 1, VEF_FLOAT2, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
}
if (hasUv2)
{
const VertexElement& element = vertexDecl->add("Texcoord", 2, VEF_FLOAT2, 0, offset, false);
offset += VertexDeclaration::sizeOfElementType(element.format);
}
mesh.m_vertexDeclaration = vertexDecl;
}
newChunk->vertexSize = 0;
for (uint32 elementIdx = 0; ; ++elementIdx)
{
const VertexElement* element = mesh.m_vertexDeclaration->getElement(elementIdx);
if (!element)
break;
newChunk->vertexSize += VertexDeclaration::sizeOfElementType(element->format);
}
size_t bufferSize = newChunk->vertexSize * data.position.size();
void* buffer = malloc(bufferSize);
float* dest = (float*)buffer;
for (uint32 i = 0; i < data.position.size(); ++i)
{
*dest++ = data.position[i].x;
*dest++ = data.position[i].y;
*dest++ = data.position[i].z;
if (hasNormal)
{
*dest++ = data.normal[i].x;
*dest++ = data.normal[i].y;
*dest++ = data.normal[i].z;
}
if (hasTangent)
{
*dest++ = data.tangent[i].x;
*dest++ = data.tangent[i].y;
*dest++ = data.tangent[i].z;
}
if (hasBitangent)
{
*dest++ = data.bitangent[i].x;
*dest++ = data.bitangent[i].y;
*dest++ = data.bitangent[i].z;
}
if (hasUv0)
{
//.........这里部分代码省略.........