我试图用D3D11在两个顶点之间画一条线.我在D3D9和D3D11中有一些经验,但在D3D11中绘制一条线似乎是一个问题,它在一个给定像素中开始并以另一个结束.
我做了什么:
我将0.5f添加到每个顶点的像素坐标以适应纹理像素/像素坐标系统(我读取了Microsoft页面到D3D9和D3D11坐标系之间的差异):
f32 fOff = 0.5f; ColoredVertex newVertices [2] = {{D3DXVECTOR3(fStartX + fOff,fStartY + fOff,0),vecColorRGB},{D3DXVECTOR3(fEndX + fOff,fEndY + fOff,0),vecColorRGB}};
生成正交投影矩阵以适合渲染目标:
D3DXMatrixOrthoOffCenterLH(&MatrixOrthoProj,0.0F,(F32)uRTWidth,0.0F,(F32)uRTHeight,0.0F,1.0F); D3DXMatrixTranspose(&cbConstant.m_matOrthoProjection,&MatrixOrthoProj);
设置RasterizerState,BlendState,Viewport,......
问题:Line看起来像是一个像素.它从给定的像素坐标开始,非常适合它.线条的方向看起来是正确的,但我希望线条结束的像素仍然没有着色.看起来这条线只是一个像素来缩短...
是否有任何教程解释这个问题或者有没有人有同样的问题?我记得在D3D9中并不困难.
请询问您是否需要进一步的信息.
谢谢,斯特凡
编辑:找到d3d10的光栅化规则(对于d3d11应该是相同的):http: //msdn.microsoft.com/en-us/library/cc627092%28v=vs.85%29.aspx#Line_1
我希望这能帮助我理解......
根据光栅化规则(上面问题中的链接)我可能找到了一个应该有效的解决方案:
这是为了告诉光栅化器应该绘制线条的最后一个像素。
f32 fXStartOff = 0.5f;
f32 fYStartOff = 0.5f;
f32 fXEndOff = 1.0f;
f32 fYEndOff = 1.0f;
ColoredVertex newVertices[2] =
{
{ D3DXVECTOR3((f32)fStartX + fXStartOff, (f32)fStartY + fYStartOff,0), vecColorRGB },
{ D3DXVECTOR3((f32)fEndX + fXEndOff , (f32)fEndY + fYEndOff,0), vecColorRGB }
};
Run Code Online (Sandbox Code Playgroud)
如果您知道更好的解决方案,请告诉我。