D3D11: How to draw a simple pixel aligned line?

I tried to draw a line between two vertices with D3D11. I have some experiences in D3D9 and D3D11, but it seems to be a problem in D3D11 to draw a line, which starts in one given pixel and ends in an other.

What I did:

  1. I added 0.5f to the pixel coordinates of each vertex to fit the texel-/pixel coordinate system (I read the Microsoft pages to the differeces between D3D9 and D3D11 coordinate systems):

    f32 fOff = 0.5f; ColoredVertex newVertices[2] = { { D3DXVECTOR3(fStartX + fOff, fStartY + fOff,0), vecColorRGB }, { D3DXVECTOR3(fEndX + fOff, fEndY + fOff,0), vecColorRGB } };

  2. Generated a ortho projection matrix to fit the render target:

    D3DXMatrixOrthoOffCenterLH(&MatrixOrthoProj,0.0f,(f32)uRTWidth,0.0f,(f32)uRTHeight,0.0f,1.0f); D3DXMatrixTranspose(&cbConstant.m_matOrthoProjection,&MatrixOrthoProj);

  3. Set RasterizerState, BlendState, Viewport, ...

  4. Draw Vertices as D3D11_PRIMITIVE_TOPOLOGY_LINELIST

Problem: The Line seems to be one pixel to short. It starts in the given pixel coordinate an fits it perfect. The direction of the line looks correct, but the pixel where I want the line to end is still not colored. It looks like the line is just one pixel to short...

Is the any tutorial explaining this problem or does anybody have the same problem? As I remember it wasn't as difficult in D3D9.

Please ask if you need further information.

Thanks, Stefan

EDIT: found the rasterization rules for d3d10 (should be the same for d3d11): http://msdn.microsoft.com/en-us/library/cc627092%28v=vs.85%29.aspx#Line_1

I hope this will help me understanding...

7
задан sandicz 6 May 2011 в 08:51
поделиться