我对 DirectX 还很陌生,仍在学习,我认为我缺乏理解并没有那么先进,无法找到解决问题的好方向。
我在这里使用 Direct3D-9 并尝试在顶点缓冲区的某些 uv 坐标中渲染纹理。
这是顶点缓冲区和 uv 坐标:
VertexXYZColorT1 * m_pVB = new VertexXYZColorT1[10];
m_pVB[0].Set( 0.0f, 0.1f, 0.0f, m_dwCurrColor, 0.5f, 0.5f);
m_pVB[9].Set(-0.5f, 0.1f, -0.5f, m_dwCurrColor, 0.0f, 1.0f);
m_pVB[8].Set( 0.0f, 0.1f, -0.5f, m_dwCurrColor, 0.5f, 1.0f);
m_pVB[7].Set( 0.5f, 0.1f, -0.5f, m_dwCurrColor, 1.0f, 1.0f);
m_pVB[6].Set( 0.5f, 0.1f, 0.0f, m_dwCurrColor, 1.0f, 0.5f);
m_pVB[5].Set( 0.5f, 0.1f, 0.5f, m_dwCurrColor, 1.0f, 0.0f);
m_pVB[4].Set( 0.0f, 0.1f, 0.5f, m_dwCurrColor, 0.5f, 0.0f);
m_pVB[3].Set(-0.5f, 0.1f, 0.5f, m_dwCurrColor, 0.0f, 0.0f);
m_pVB[2].Set(-0.5f, 0.1f, 0.0f, m_dwCurrColor, 0.0f, 0.5f);
m_pVB[1].Set(-0.5f, 0.1f, -0.5f, m_dwCurrColor, 0.0f, 1.0f);
现在我想知道是否有任何方法可以将纹理定位在顶点缓冲区的某个位置,即左上角而顶点缓冲区仍在中心?
我想在顶点缓冲区的左上角绘制纹理,同时保持顶点缓冲区居中,这样我就可以绘制如下内容:

我读了很多文章,也在书中Introduction to 3D game programming with DirectX 9.0他谈到了纹理,我们可以将 d3d-device 设置为:
s_lpD3DDev->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR);
s_lpD3DDev->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR);
并在此处查看 Microsoft 的文档:
https ://docs.microsoft.com/en-us/windows/desktop/direct3d9/wrap-texture-address-mode
我似乎找不到解决问题的好方向,非常感谢您对如何实现这一目标的帮助或解释。基本上我的目标是使用这种纹理并绘制 4 次以形成一个完整的圆圈。
我想这也与旋转 uv 坐标或类似的东西有关?还是我需要为此绘制 4 个顶点缓冲区并为每个顶点缓冲区绘制 1 个纹理?
还是我让事情变得太复杂了,它与告诉 directx 使用此标志渲染 4 个纹理有关?:
const DWORD FVF_XYZCOLORT4 = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX4;
那么我将如何旋转这个纹理来绘制一个完整的圆呢?
提前感谢您的帮助和时间!



