我已经尝试了很长一段时间,但没有成功;我在StackOverflow上看到了几个相关的问题,但没有成功;我还学习了6个不同的教程,它们都遵循了几乎相同的过程:
-
构建顶点:
-1, -1, 0
,
-1, 1, 0
,
1, 1, 0
和
1, -1, 0
.
-
建立索引:
0, 1, 2, 0, 2, 3
.
-
创建
Vertex
和
Index
缓冲器。
-
清除
RenderTargetView
.
-
设置电流
顶点
和
Pixel
着色器。
-
如果有,请更新常量缓冲区。
-
渲染四元体(请参见下文)。
-
冲洗并重复
4 - 8
.
现在,这将我推向墙的原因是因为我可以渲染更高级的对象,例如:
我创建四元的代码与其他所有人的几乎相同:
public class Quad {
private void SetVertices() {
float width = Rescale(Size.Width, 0, Application.Width, -1, 1);
float height = Rescale(Size.Height, 0, Application.Height, -1, 1);
vertices = new Vertex[] {
new Vertex(new Vector3(-width, -height, 0), Vector3.ForwardLH, Color.White),
new Vertex(new Vector3(-width, height, 0), Vector3.ForwardLH, Color.White),
new Vertex(new Vector3(width, height, 0), Vector3.ForwardLH, Color.White),
new Vertex(new Vector3(width, -height, 0), Vector3.ForwardLH, Color.White)
}
indices = new int[] { 0, 1, 2, 0, 2, 3 };
vertexBuffer = Buffer.Create(Device3D, BindFlags.VertexBuffer, vertices);
vertexBinding = new VertexBufferBinding(vertexBuffer, Utilities.SIzeOf<Vertex>(), 0);
indexBuffer = Buffer.Create(Device3D, BindFlags.IndexBuffer, indices);
indexCount = indices.Length;
}
public void Render() {
if (shaderResourceView != null)
context3D.PixelShader.SetShaderResource(0, shaderResourceView);
context3D.PixelShader.SetSampler(0, samplerState);
context3D.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;
context3D.InputAssembler.SetVertexBuffers(0, vertexBinding);
context3D.InputAssembler.SetIndexBuffer(indexBuffer, Format.R32_UInt, 0);
context3D.DrawIndexed(totalIndexCount, 0, 0);
}
}
笔记
我使用的是右手坐标系(出于某种原因,以前的开发人员是硬接线的
Vector3.ForwardLH
到一些我现在还不能摆脱的地方);如果有帮助,我现在不能转换成左手坐标系。
我是不是错过了什么?为什么我不能呈现一个基本的四边形?
如果您觉得需要更多信息,请随时通知我,我会根据要求添加。