Я работаю над своим первым проектом на C ++ и DirectX 11, где моя текущая цель — нарисовать цветной треугольник на экране. Это сработало без проблем. Однако есть одна часть, которую я хотел бы изменить, но я не знаю как. Я пытался найти решение, но пока не нашел, и думаю, что причина в том, что я не знаю, что мне нужно искать.
В настоящее время я настроил свои треугольники 3 вершины, как это:
VertexPos vertices[] =
{
{ XMFLOAT3( 0.5f, 0.5f, 1.0f )},
{ XMFLOAT3( 0.5f, -0.5f, 1.0f )},
{ XMFLOAT3( -0.5f, -0.5f, 1.0f )},
}
Где VertexPos определяется следующим образом:
struct VertexPos
{
XMFLOAT3 pos;
};
В настоящее время моя позиция вершин устанавливается в диапазоне от -1.0F до 1.0F, где 0.0F — центр. Как я могу изменить это так, чтобы я мог расположить свои вершины, используя «реальные» координаты, как это:
VertexPos vertices[] =
{
{ XMFLOAT3( 100.0f, 300.0f, 1.0f )},
{ XMFLOAT3( 200.0f, 200.0f, 1.0f )},
{ XMFLOAT3( 200.0f, 300.0f, 1.0f )},
}
Обычный способ:
XMMatrixOrthographicLH()
если вы используете XMMATH)Более простой способ (из книги Ф.Луна):
XMFLOAT3 SpriteBatch::PointToNdc(int x, int y, float z)
{
XMFLOAT3 p;
p.x = 2.0f*(float)x/mScreenWidth - 1.0f;
p.y = 1.0f - 2.0f*(float)y/mScreenHeight;
p.z = z;
return p;
}
Почти то же самое, но на стороне процессора. Конечно, вы также можете переместить этот код в шейдер.
Постскриптум Вероятно, ваша книга / руководство / учебники узнают вас об этом чуть позже. Таким образом, вам лучше доверять этому и двигаться шаг за шагом.
Удачного кодирования! знак равно
Других решений пока нет …