DirectX 11直接纹理映射
DirectX 11 Direct Texel Mapping
我正在尝试使用正交投影矩阵在DirectX 11 (c++ API)中渲染纹理。在水平维度中,我利用了发生的"投影",但在垂直维度中,我希望我的顶点直接映射到特定的文本行。
我创建了一个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_Position投影矩阵转换y值为0.0f的坐标,它将被绘制到纹理的顶部行。y值为127.0f的坐标将绘制到纹理的底部行。
然而,给它的数据,我希望填充整个纹理(我画了许多顶点作为一个点列表),我的纹理的底部行是空白的。我注意到我的纹理的最上面一行并没有包含我期望的顶点。似乎所有东西都向上移动了一行(或部分行)。
我已经阅读了DirectX 10坐标系统的页面,但我一定不能完全理解这一点。我认为这是在告诉我,我不需要像在DirectX 9中那样将任何东西偏移0.5。但也许我说反了?
什么是正确的方式来控制什么texel行我的顶点绘制到?
我不知道这是否有任何后果,但我要注意的是,我从来没有将这种纹理渲染到屏幕上。我将纹理保存到图像文件
我已经解决了这个问题。在重读了我在问题中链接的文章后,我意识到我之前误解了坐标系统。如果我像下面这样修改我的正交矩阵,那么我的顶点将被转换为正好落在文本行中心,而不是文本行之间的边界上。现在所有的数据都被绘制到所需的纹理,我不再有空白的底部行问题。
XMMATRIX projection = XMMatrixOrthographicOffCenterLH(50.0f, 250.0f, 127.5f, -0.5f, 256.0f, 0.0f);
相关文章:
- OpenGL 透视投影裁剪多边形与顶点在视锥体之外 = 错误的纹理映射?
- NV12 纹理在 DirectX 11.1 中不起作用
- 尝试将纹理映射到 GLSL 中的三角形时出现访问冲突
- GPU驱动程序中的Vulkan纹理映射不准确
- GLSL纹理映射,最大纹理数
- 使用 OpenGL 和 QT 进行纹理映射 - C++
- 使用 openGL 进行多纹理映射
- 如何将纹理映射到 3D 对象
- OpengGl 4.2 纹理映射未显示
- openGL中的Does纹理映射遵循反向方法的正向纹理映射
- QOpenGLWidget纹理映射结果为黑屏
- 在OpenGL中将纹理映射到顶点
- OpenGL 3.3纹理映射三角形
- GLSL纹理映射不起作用
- 寻找球面纹理映射的和
- Directx9.0纹理映射渲染
- 如何在SFML或OpenGL中正确地将纹理映射到凸多边形上
- DirectX 11直接纹理映射
- glDrawArrays vs glDrawElements w/纹理映射
- Opengl纹理映射