XNA硬件实例-围绕icosphere以错误顺序绘制的面
我正在尝试将InstancedModelSample代码实现到我的游戏中,除了一个问题外,它工作得非常好——我的icospheres上的边被画在错误的顶点之间,而且画得乱七八糟 当我使用单个draw()调用绘制300个左右的模型时,它的渲染效果很好,但这段新代码的渲染效果不好。我对这些东西还不熟悉——当这似乎是一种通用的方法,可以用于任何东西时,我如何获得方法来填补人脸的正确空白 我下面的代码只是从原始示例中稍微调整了一下,排除了我不需要的部分(如骨骼变换)。XNA硬件实例-围绕icosphere以错误顺序绘制的面,xna,hardware,vertex,geometry-instancing,Xna,Hardware,Vertex,Geometry Instancing,我正在尝试将InstancedModelSample代码实现到我的游戏中,除了一个问题外,它工作得非常好——我的icospheres上的边被画在错误的顶点之间,而且画得乱七八糟 当我使用单个draw()调用绘制300个左右的模型时,它的渲染效果很好,但这段新代码的渲染效果不好。我对这些东西还不熟悉——当这似乎是一种通用的方法,可以用于任何东西时,我如何获得方法来填补人脸的正确空白 我下面的代码只是从原始示例中稍微调整了一下,排除了我不需要的部分(如骨骼变换)。 private void
private void DrawSeriesOfModels(Model model, Matrix[] matrices, Matrix view, Matrix Projection)
{
// Set up vertex declaration.
VertexDeclaration vertexDeclaration = new VertexDeclaration
(
new VertexElement(0, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 0),
new VertexElement(16, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 1),
new VertexElement(32, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 2),
new VertexElement(48, VertexElementFormat.Vector4, VertexElementUsage.BlendWeight, 3)
);
// Set up dynamic vertic buffer.
DynamicVertexBuffer vertexBuffer = new DynamicVertexBuffer(GraphicsDevice, vertexDeclaration, matrices.Length, BufferUsage.WriteOnly);
// Transfer matrices into buffer.
vertexBuffer.SetData(matrices, 0, matrices.Length, SetDataOptions.Discard);
foreach (ModelMesh mesh in model.Meshes)
{
foreach (ModelMeshPart meshPart in mesh.MeshParts)
{
GraphicsDevice.SetVertexBuffers(new VertexBufferBinding(meshPart.VertexBuffer, meshPart.VertexOffset, 0),
new VertexBufferBinding(vertexBuffer, 0, 1));
// Set up instance rendering effect.
Effect effect = meshPart.Effect;
effect.CurrentTechnique = effect.Techniques["HardwareInstancing"];
effect.Parameters["World"].SetValue(Matrix.Identity);
effect.Parameters["View"].SetValue(view);
effect.Parameters["Projection"].SetValue(Projection);
effect.Parameters["AmbientLight"].SetValue(1); // Make model solid white.
// Draw everything in a single call.
foreach (EffectPass pass in effect.CurrentTechnique.Passes)
{
pass.Apply();
GraphicsDevice.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, 0, meshPart.NumVertices, meshPart.StartIndex, meshPart.PrimitiveCount, matrices.Length);
}
}
}
amountOfDraws++;
}
提前感谢任何能帮助我的人:)好吧,恐怕这是因为我的粗心大意,但很可能其他人也有类似的问题,问题是我没有包括这条线路
GraphicsDevice.Indices = meshPart.IndexBuffer;
排队后
GraphicsDevice.SetVertexBuffers(new VertexBufferBinding(meshPart.VertexBuffer, meshPart.VertexOffset, 0),
new VertexBufferBinding(vertexBuffer, 0, 1));
…我的错