Я пытался достичь этого довольно долго, но безуспешно;Я рассмотрел несколько важных вопросов здесь, на StackOverflow, но безуспешно;Я также следовал 6 различным учебникам, которые ВСЕ следовали почти одинаковому процессу:
- Создание вершин:
-1, -1, 0
, -1, 1, 0
, 1, 1, 0
и 1, -1, 0
. - Построить индексы:
0, 1, 2, 0, 2, 3
. - Создать буферы
Vertex
и Index
. - Очистить
RenderTargetView
. - Установить текущий *Шейдеры 1020 * и
Pixel
. - Обновите постоянные буферы, если они у вас есть.
- Визуализируйте квад (см. Ниже).
- Промойте и повторите
4 - 8
.
Теперь, причина, по которой меня это поднимает по стене, заключается в том, что я могу рендерить гораздо более сложные объекты, такие как:
- Сферы
- 3D-линии
- Вентиляторы
Мой код для создания четырехугольника почти такой же, как у всех остальных:
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
в некоторые места, от которых я пока не могу избавиться);если это помогает, и я не могу в настоящее время преобразовать в левую систему координат.
Я что-то здесь упускаю?Почему я не могу воспроизвести базовый квад?
Если вы считаете, что требуется дополнительная информация, не стесняйтесь, дайте мне знать, и я добавлю ее по запросу.