我在像这样的Windows.Form中声明了一个设备+精灵
PresentParameters presentParameters = new PresentParameters();
presentParameters.Windowed = true;
presentParameters.SwapEffect = SwapEffect.Copy;
var device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, presentParameters);
var sprite = new Sprite(device);
我通过TextureLoader.FromFile(device, "image.png");
在我的Draw方法中,我启动了设备场景,然后是精灵场景,然后我写了
sprite.Draw2D(texture, PointF.Empty, 0, PointF.Empty, Color.White);
绘图本身有效,但它只绘制了大部分缩放到屏幕上的图像(如90%)
我尝试使用具有给定纹理大小的源矩形,但发生了同样的错误
有什么建议吗?
答案 0 :(得分:1)
我在C ++ DirectX方面经验丰富,但不是C#DirectX,所以请耐心等待。
根据我对Sprite界面的体验,您需要像3D对象一样进行缩放,旋转和平移。你可能忘记了扩展。这是我的更新功能的代码。
void Button::Update()
{
Sprite->Begin(D3DXSPRITE_ALPHABLEND);
D3DXMATRIX trans;
D3DXMATRIX scale;
D3DXMATRIX world;
D3DXMatrixIdentity(&world);
D3DXMatrixTranslation(&trans, pos.x, pos.y, 0.0f);
D3DXMatrixScaling(&scale, scaleFactor, scaleFactor, 1.0f);
world = scale * trans;
Sprite->SetTransform(&world);
Sprite->Draw(buttonTexture, NULL, NULL, &D3DXVECTOR3(-width2, -height2, 0.0), whitecol);
Sprite->End();
}
不可否认,这不是一种非常面向对象的做事方式,但它符合我的需要。
答案 1 :(得分:1)
当您加载精灵时,它会扩展精灵以适合每个维度为2的幂的大小。例如,如果您的精灵是200 x 65,精灵的宽度将为256(并且图像将是扩展到256的宽度,略微增加128)(几乎加倍高度)。
绘制图像时,它几乎是预期高度的两倍。
我的解决方法是修改我的图像文件,使其高度和宽度为2,然后只绘制原始大小的部分。