2011-12-11 32 views
0

我在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; 
}; 

而廣播屏幕的作品,但燈光混亂。有人可以告訴我,我做錯了什麼?

+0

PIX(在DirectX SDK中)可以幫助調試這類問題。 –

+1

嗯,首先,您的VertexShader輸出結構應該與您的PixelShader輸入匹配。 – borrillis

+0

非常感謝!這是問題。 – Konrad

回答

0

正如borillis指出的那樣,問題是我的VertexShader輸出與PixelShader輸入不匹配。我修改PixelShader輸入如下:

struct PixelShaderInputPerPixelDiffuse 
{ 
float4 Position : POSITION; 
float3 WorldNormal : TEXCOORD0; 
float3 WorldPosition : TEXCOORD2; 
float2 TextureCoords: TEXCOORD1; 
}; 
struct VertexShaderOutputPerPixelDiffuse 
{ 
float4 Position : POSITION; 
float3 WorldNormal : TEXCOORD0; 
float3 WorldPosition : TEXCOORD2; 
float2 TextureCoords: TEXCOORD1; 
}; 

現在它運行良好。