Reputation: 415
I'm working on my first C++ and DirectX 11 project where my current goal is to draw a colored triangle on the screen. This has worked well without any problems. However, there's one part that I would like to change, but I don't know how. I've tried searching for a solution but I havn't found any yet, and I guess that the reason is because I don't really know what I should search for.
Currently I set up my triangles 3 vertices like this:
VertexPos vertices[] =
{
{ XMFLOAT3( 0.5f, 0.5f, 1.0f )},
{ XMFLOAT3( 0.5f, -0.5f, 1.0f )},
{ XMFLOAT3( -0.5f, -0.5f, 1.0f )},
}
Where VertexPos is defined like this:
struct VertexPos
{
XMFLOAT3 pos;
};
Currenty, my vertices position is set up by the range -1.0F to 1.0F, where 0.0F is the center. How can I change this so that I can position my vertices by using "real" coordinates like this:
VertexPos vertices[] =
{
{ XMFLOAT3( 100.0f, 300.0f, 1.0f )},
{ XMFLOAT3( 200.0f, 200.0f, 1.0f )},
{ XMFLOAT3( 200.0f, 300.0f, 1.0f )},
}
Upvotes: 1
Views: 3233
Reputation: 13003
Usual way:
XMMatrixOrthographicLH()
if you using XMMATH)Simpler way (from F.Luna book):
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;
}
Almost the same, but on CPU side. Of course, you can move this code to shader too.
P.S. Probably your book/manual/tutorials will learn you about it a little later. So, you better trust it and flow step-by step.
Happy coding! =)
Upvotes: 2