2013-07-22 51 views
0

我已经找了这个,我很确定它可以完成。Directx 11纹理映射

有谁知道我怎么能阻止纹理被拉伸超过一个方面?

我记得在某些游戏设计中,您可以选择将图像拉伸到对象上还是重复运行。

编辑:好的,所以我已经使用像素坐标,问题仍然存在。顶点很好。我试图做的是加载一个位图,并保持大小相同,无论分辨率是什么,或图像的大小。我希望图像只能使用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

拉伸取决于您在Pixel Shader采样中使用的纹理坐标。你可以给你的像素着色器的代码? –

+0

纹理地址模式(重复,镜像,换行,钳制)取决于您为纹理设置的[D3D11_TEXTURE_ADDRESS_MODE](http://msdn.microsoft.com/zh-cn/library/windows/desktop/ff476256.aspx)采样器(使用参数[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();

谢谢大家的帮助。 :)