C++ DirectX 11直接纹理映射

C++ DirectX 11直接纹理映射,c++,viewport,directx-11,render-to-texture,projection-matrix,C++,Viewport,Directx 11,Render To Texture,Projection Matrix,我正在尝试使用正交投影矩阵在DirectX 11(C++API)中渲染纹理。在水平维度中,我利用了发生的“投影”,但在垂直维度中,我希望我的顶点直接映射到特定的texel行 我已经创建了一个128x128的纹理。我将其设置为渲染目标,并按如下方式设置视口: D3D11_VIEWPORT textureViewport; textureViewport.TopLeftX = 0.0f; textureViewport.TopLeftY = 0.0f; textureViewport.Height

我正在尝试使用正交投影矩阵在DirectX 11(C++API)中渲染纹理。在水平维度中,我利用了发生的“投影”,但在垂直维度中,我希望我的顶点直接映射到特定的texel行

我已经创建了一个128x128的纹理。我将其设置为渲染目标,并按如下方式设置视口:

D3D11_VIEWPORT textureViewport;
textureViewport.TopLeftX = 0.0f;
textureViewport.TopLeftY = 0.0f;
textureViewport.Height = 128.0f;
textureViewport.Width = 128.0f;
textureViewport.MinDepth = 0.0f;
textureViewport.MaxDepth = 1.0f;
我提供如下创建的投影矩阵:

XMMATRIX projection = XMMatrixOrthographicOffCenterLH(50.0f, 250.0f, 128.0f, 0.0f, 256.0f, 0.0f);
请注意,我的左侧和右侧值与纹理宽度不匹配,但从下到上的值与高度匹配。这样,如果我的顶点着色器使用上述SV_位置的投影矩阵变换Y值为0.0f的坐标,它将被绘制到纹理的顶行。Y值为127.0f的坐标将绘制到纹理的底行

但是,在给它提供了我希望填充整个纹理的数据(我正在将许多顶点绘制为点列表)之后,我的纹理的底行是空白的。我注意到纹理的顶行似乎不包含我期望的顶点。似乎所有内容都上移了一行(或部分行)

我已经阅读了上一页,但我不能完全理解这一点。我想这是在告诉我,我不必像在DirectX 9中那样偏移0.5。但也许我把它倒过来了

控制顶点绘制到哪个纹理行的正确方法是什么


我不知道这是否有任何后果,但我会注意到,我从来没有渲染这个纹理到屏幕上。我正在将纹理保存到图像文件。

我已经解决了这个问题。在重读了我在问题中链接的那篇文章后,我意识到我以前误解了坐标系。如果我按如下所示修改正交矩阵,那么我的顶点将变换为正好落在texel行的中心,而不是texel行之间的边界上。现在所有数据都按需要绘制到纹理,而我不再有空白底线的问题。

XMMATRIX projection = XMMatrixOrthographicOffCenterLH(50.0f, 250.0f, 127.5f, -0.5f, 256.0f, 0.0f);