У меня проблема с рисованием текстуры, растянутой по прямоугольной области в XNA.Для справки: это 3d-проект, где в каком-то месте я размещаю большой экран трансляции, «снимая» какую-то другую область.Это делается с помощью рендеринга, и текстура отображается очень хорошо (я проверил рендеринг в файл).Проблема в том, что когда я устанавливаю это как текстуру определенной области, отображаемая текстура состоит из плиток, как вы можете видеть на картинке, которую я загружаю.Область, где текстура должна быть растянута, определяется следующим образом:
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;
};
И экран трансляции работает, но огни не работают.Может кто-нибудь сказать мне, пожалуйста, что я делаю не так?