2013-07-22 5 views
0

Я искал это, и я уверен, что это можно сделать.Directx 11 Отображение текстур

Кто-нибудь знает, как я могу остановить текстуру, растянутую над негабаритным гранью?

Я помню, в некоторых игровых проектах у вас была возможность либо растянуть изображение по объекту, либо запустить повтор.

EDIT: Хорошо, поэтому я использовал пиксельные координаты, и проблема все еще остается. Вершины точны. То, что я пытаюсь сделать, это загрузить растровое изображение и сохранить размер одинаковым независимо от того, что такое разрешение, или размер изображения. Я хочу, чтобы изображение использовало только физические пиксели 20x20.

Я надеюсь, что это имеет смысл, потому что я не думаю, что мое предыдущее объяснение.

Texture2D Texture; 

SamplerState SampleType 
{ 
    Filter = TEXT_1BIT; 
// AddressU = Clamp; 
// AddressV = Clamp; 
}; 

struct Vertex 
{ 
    float4 position : POSITION; 
    float2 tex : TEXCOORD0; 
}; 

struct Pixel 
{ 
    float4 position : SV_POSITION; 
    float2 tex : TEXCOORD0; 
}; 

Pixel FontVertexShader(Vertex input) 
{ 
    return input; 
} 

float4 FPS(Pixel input) : SV_Target 
{ 
    return Texture.Sample(SampleType, input.tex); 
} 

...

+0

Растяжка зависит от координаты текстуры, которую вы используете в выборке пиксельного шейдера. Не могли бы вы дать код вашего пиксельного шейдера? –

+0

Режим адреса текстуры (повторение, зеркалирование, обертывание, зажим) зависит от [D3D11_TEXTURE_ADDRESS_MODE] (http://msdn.microsoft.com/en-us/library/windows/desktop/ff476256.aspx), который вы установили для текстуры Sampler (созданный с параметром [D3D11_SAMPLER_DESC] (http://msdn.microsoft.com/en-us/library/windows/desktop/ff476207.aspx)). –

+0

Это выглядит ужасно, поэтому я разместил его как ответ ниже. Текстура отображается штрафом до тех пор, пока размер окна не изменится, это то, что я нашел. Я знаю, что сопоставляю текстуры с блоком 2x2. (От -1.0f до 1.0f), и поэтому они изменяются при изменении окна. В идеале я хочу, чтобы текстуры, которые я печатаю, всегда были одного размера, если я не хочу, чтобы они менялись. Я просто не знаю, как это сделать или если это возможно. – user2600628

ответ

0

Ответ в HWND = CreateWindow (...);

Использование WS_POPUP означает, что я удалил границы, и моя текстура смогла правильно отобразить карту.

Необходимо использовать GetClientRect();

Благодарим всех за помощь. :)