2011-01-07 2 views
1

я объявил устройство + спрайты в Windows.Form как этотSprite.Draw() рисует мои текстуры слишком маленькие

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%)

Я попробовал его с прямоугольником источника с заданным размером текстуры, но произошла такая же ошибка

любые предложения?

ответ

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(); 
} 

Правда, это не очень объектно-ориентированный способ делать вещи, но это соответствует моим потребностям.

+0

Спасибо, это указало мне в правильном направлении. Для других, использующих SlimDX, посмотрите «Sprite.Transform = Matrix.Scaling (0.1, 0.1, 0.1)» – Basic

1

Предостережение: Я не специалист по DirectX, но у меня была та же проблема.

Когда вы загружаете спрайт, он расширяет спрайт, чтобы соответствовать размеру, где каждое измерение имеет силу 2. Например, если вы спрайт был 200 х 65, спрайт будет иметь ширину 256 (и изображение будет расширяться до 256, увеличивая его немного) на 128 (почти удваивая высоту).

Когда вы рисуете изображение, оно будет почти в два раза выше, чем вы ожидали.

Моим решением было изменить файл изображения, чтобы иметь высоту и ширину в 2 раза, а затем нарисовать только часть, которая была оригинального размера.

+0

OMFG СПАСИБО. У меня была аналогичная проблема в игре, над которой я работаю, и я не мог понять, почему мои кнопки размером 384x48, казалось бы, были увеличены, а затем прямоугольник 384x48 отрезал нижний и правый края. Я полностью забыл, что 384 и 48 не являются полномочиями 2. – derpface