Vertex Geometry Modifier
概要
VertexGeometryModifier は、VertexAccessorと連携して、クラス インターフェイスによって提供されるセッターを使用してVertexGeometryオブジェクトを変更するのに役立ちます。インターフェイスは、特定の頂点バッファーから頂点要素の値を取得するのに役立つゲッターも提供します。
例
以下の例は、特定のメッシュの頂点バッファーから頂点の位置の値を変更する方法を示しています。
VertexGeometry* vertexGeom;
bool isMutable = m_mesh3->GetVertexBuffer()->GetVertexGeometry()->GetVertexArrayResourceHandle().m_isMutable;
// Get the vertex geometry of the mesh
if (isMutable) {
vertexGeom = m_mesh3->GetVertexBuffer()->GetVertexGeometry();
}
else {
DiagnosticPlatform::ConsoleOut("VertexGeometryData not mutable");
break;
}
// The vertex accessor will be used by the vertex geometry modifier to access the vertices
VertexAccessor accessor(*vertexGeom);
// Create a vertex geometry modifier specifying as usage the type of vertex attribute
// which will be changed
VertexGeometryModifier modifier(*vertexGeom, VertexGeometry::Position, 0);
Float vertexData[3];
for(Int i = 0; i<8; i++) {
if(s_inflate) {
// Retrieve the position data of the vertex "i" in the vertexData array
modifier.GetVertexElement(accessor.GetVertex(i), vertexData, 3);
// Alter the data and set it back
modifier.SetVertexElement(accessor.GetMutableVertex(i), vertexData[0]*1.3F, vertexData[1]*1.3F, vertexData[2]*1.3F);
}
else {
// Set the position of the vertex with data get from an array (Float c_positionData[8][3])
modifier.SetVertexElement(accessor.GetMutableVertex(i), c_positionData[i], 3);
}
}
// Update the vertex buffer on the mesh
m_mesh3->GetVertexBuffer()->Update(0, m_mesh3->GetVertexBuffer()->GetVertexGeometry()->GetVertexCount());