如何在2D引擎中转换顶点缓冲区坐标

时间:2014-10-16 07:35:35

标签: c++ matrix directx 2d vertex-buffer

我正在尝试(使用2D Directx9引擎库)在顶点缓冲区中旋转/转换一组点。

我理解在3D系统中如何做到这一点 - 即使用渲染管道的顶点着色器阶段和变换基质......

但我不确定是否适用于2D? (或者我错了)。我不知道顶点着色器阶段在2D或至少在我正在使用的2D引擎库中发生的位置(来自Programming2DGames一书)?或者它是否真的发生了?

基本上我可以使用像D3DXMatrixTransformation2D()这样的东西来创建变换矩阵,我知道如何将它应用于LPD3DXSPRITE对象(使用Sprite-> SetTransform()),但是如何将该变换矩阵应用于集合10个坐标存储在顶点缓冲区而不是精灵中。

非常感谢任何帮助或建议。感谢

1 个答案:

答案 0 :(得分:0)

我认为你有两个选择:

1)创建第二个顶点缓冲区并使用循环中的D3DXVec2TransformCoord变换所有顶点。如果您不需要旧顶点,请使用单个缓冲区。

2)使用顶点着色器:

ID3DXEffect* effect;
MATRIX matrixToTransfrom;
UINT passes;

effect->SetTechnique(technique);
effect->SetVector(handleMatrix, &matrixToTransform);
effect->Begin(&passes, 0);
effect->BeginPass(0);

sprite->Begin(xxx);

// drawing

sprite->End();

effect->EndPass();
effect->End();