本文整理汇总了C#中VertexBuffer.GetType方法的典型用法代码示例。如果您正苦于以下问题:C# VertexBuffer.GetType方法的具体用法?C# VertexBuffer.GetType怎么用?C# VertexBuffer.GetType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VertexBuffer
的用法示例。
在下文中一共展示了VertexBuffer.GetType方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateRenderRequest
/// <summary>
/// Creates a render request for the model using the specified transform.
/// </summary>
/// <param name="renderContext">
/// The render context.
/// </param>
/// <param name="effect"></param>
/// <param name="effectParameterSet"></param>
/// <param name="transform">
/// The transform.
/// </param>
public IRenderRequest CreateRenderRequest(IRenderContext renderContext, IEffect effect, IEffectParameterSet effectParameterSet, Matrix transform)
{
if (Vertexes.Length == 0 && Indices.Length == 0)
{
throw new InvalidOperationException(
"This model does not have any vertexes or indices. It's most " +
"likely been imported from an FBX file that only contains hierarchy, " +
"in which case there isn't anything to render.");
}
LoadBuffers(renderContext.GraphicsDevice);
VertexBuffer vertexBuffer;
if (_cachedVertexBuffers.ContainsKey(effect))
{
vertexBuffer = _cachedVertexBuffers[effect];
}
else
{
// Find the vertex mapping configuration for this model.
if (_cachedModelVertexMapping == null)
{
_cachedModelVertexMapping =
_modelRenderConfigurations.Select(x => x.GetVertexMappingToGPU(this, effect))
.FirstOrDefault(x => x != null);
if (_cachedModelVertexMapping == null)
{
throw new InvalidOperationException(
"No implementation of IModelRenderConfiguration could provide a vertex " +
"mapping for this model. You must implement IModelRenderConfiguration " +
"and bind it in the dependency injection system, so that the engine is " +
"aware of how to map vertices in models to parameters in effects.");
}
}
var mappedVerticies = Array.CreateInstance(_cachedModelVertexMapping.VertexType, Vertexes.Length);
for (var i = 0; i < Vertexes.Length; i++)
{
var vertex = _cachedModelVertexMapping.MappingFunction(Vertexes[i]);
mappedVerticies.SetValue(vertex, i);
}
vertexBuffer = new VertexBuffer(
renderContext.GraphicsDevice,
_cachedModelVertexMapping.VertexDeclaration,
Vertexes.Length,
BufferUsage.WriteOnly);
vertexBuffer.GetType().GetMethods().First(x => x.Name == "SetData" && x.GetParameters().Length == 1).MakeGenericMethod(_cachedModelVertexMapping.VertexType).Invoke(
vertexBuffer,
new[] { mappedVerticies });
_cachedVertexBuffers[effect] = vertexBuffer;
}
if (effectParameterSet.HasSemantic<IBonesEffectSemantic>())
{
var bonesEffectSemantic = effectParameterSet.GetSemantic<IBonesEffectSemantic>();
foreach (var bone in _flattenedBones)
{
if (bone.ID == -1)
{
continue;
}
bonesEffectSemantic.Bones[bone.ID] = bone.GetFinalMatrix();
}
}
// Create the render request.
return _renderBatcher.CreateSingleRequestFromState(
renderContext,
effect,
effectParameterSet,
vertexBuffer,
IndexBuffer,
PrimitiveType.TriangleList,
renderContext.World*transform, (m, vb, ib) =>
{
var mappedVerticies = Array.CreateInstance(_cachedModelVertexMapping.VertexType, Vertexes.Length * m.Count);
var mappedIndicies = new int[Indices.Length*m.Count];
for (var im = 0; im < m.Count; im++)
{
for (var i = 0; i < Vertexes.Length; i++)
{
var vertex = _cachedModelVertexMapping.MappingFunction(Vertexes[i].Transform(m[im]));
mappedVerticies.SetValue(vertex, im*Vertexes.Length+i);
}
//.........这里部分代码省略.........