我在XNA中的矩形區域上拉伸紋理時遇到問題。對於一些背景:這是一個3d項目,在某個地方,我正在拍攝一個大屏幕「拍攝」其他區域。這是通過渲染完成的,並且紋理渲染效果非常好(我通過渲染到文件中進行了檢查)。問題是,當我將其設置爲我定義的區域的紋理時,映射的紋理由瓦片組成,如您在我上傳的圖片上看到的那樣。其中紋理應該被拉伸的區域定義是這樣的:在xna中的矩形區域上拉伸紋理
VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[6];
vertices[0].Position = new Vector3(0.0F, 20.0F, 0.0F);
vertices[0].TextureCoordinate.X = 0;
vertices[0].TextureCoordinate.Y = 0;
vertices[1].Position = new Vector3(50.0F, 0.0F, 0.0F);
vertices[1].TextureCoordinate.X = 1f;
vertices[1].TextureCoordinate.Y = 1f;
vertices[2].Position = new Vector3(0.0F, 0.0F, 0.0F);
vertices[2].TextureCoordinate.X = 0f;
vertices[2].TextureCoordinate.Y = 1f;
vertices[3].Position = new Vector3(50.0F, 0.0F, 0.0F);
vertices[3].TextureCoordinate.X = 1f;
vertices[3].TextureCoordinate.Y = 1f;
vertices[4].Position = new Vector3(0.0F, 20.0F, 0.0F);
vertices[4].TextureCoordinate.X = 0f;
vertices[4].TextureCoordinate.Y = 0f;
vertices[5].Position = new Vector3(50.0F, 20.0F, 0.0F);
vertices[5].TextureCoordinate.X = 1f;
vertices[5].TextureCoordinate.Y = 0f;
telebimBuffer = new VertexBuffer(GraphicsDevice, VertexPositionNormalTexture.VertexDeclaration, vertices.ToList().Count, BufferUsage.WriteOnly);
telebimBuffer.SetData<VertexPositionNormalTexture>(vertices);
我擔心的是,我試圖用有紋理座標玩,看不出任何區別:/。我使用自己的效果文件進行渲染,這可能是問題的根源,您可以在此處獲取此文件:http://gamma.mini.pw.edu.pl/~zabak/random/PhongAlternative.fx
渲染的紋理作爲「xTexture」傳遞到效果文件。
最後顯示我的問題的屏幕:http://gamma.mini.pw.edu.pl/~zabak/random/gk3d_2error.jpg 正如你所看到的,我在廣播屏幕上看到大量的圖塊,目標是讓紋理拉伸。 (對於做截圖的目的,我通過註釋
color = (color+specular+diffuse*diffuseIntensity+ambientLightColor)+light1+light2+light3;
線在我效力的文件關掉燈。)
更新: 我改變聲明從效果文件從這個:
struct VertexShaderOutputPerPixelDiffuse
{
float4 Position : POSITION;
float3 WorldNormal : TEXCOORD0;
float3 WorldPosition : TEXCOORD1;
float2 TextureCoords: TEXCOORD2;
};
這一個:
struct VertexShaderOutputPerPixelDiffuse
{
float4 Position : POSITION;
float3 WorldNormal : TEXCOORD0;
float3 WorldPosition : TEXCOORD2;
float2 TextureCoords: TEXCOORD1;
};
而廣播屏幕的作品,但燈光混亂。有人可以告訴我,我做錯了什麼?
PIX(在DirectX SDK中)可以幫助調試這類問題。 –
嗯,首先,您的VertexShader輸出結構應該與您的PixelShader輸入匹配。 – borrillis
非常感謝!這是問題。 – Konrad