2014-10-31 4 views
0

Я использую оболочку OpenTK в C# для OpenGL 3.1. Я создаю сцену, где одни и те же текстуры используются для объектов ближнего и дальнего действия. Когда я не использую MipMap, текстуры очень острые (даже если текстурированный объект очень мал), но сцинтилляция (если я правильно понимаю термин) видна - пиксели текстуры кажутся мигающими, когда текстурированный объект движется далеко , Поэтому я попытался использовать mipmaps. После перехода к TextureMinFilter в LinearMipmapLinear и вызов GL.GenerateMipmap (GenerateMipmapTarget.Texture2D) сцинтилляционные эффектов нет, но текстуры очень размыты, здесь изображения для сравнения:OpenGL: размытые текстуры при использовании mipmap (OpenTK)

no mipmaps mipmaps

Похоже, автоматических генерация mipmaps требует некоторой настройки, но я не мог найти никакого способа сообщить OpenTK, сколько mipmaps должно быть построено или какой метод следует использовать для масштабирования исходных изображений. Это код, используемый для загрузки текстур:

var data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 
GL.BindTexture(TextureTarget.Texture2D, textures[idx]); 
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear); 
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear); 
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp.Width, bmp.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0); 
GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); 
bmp.UnlockBits(data); 

Что может быть сделано для улучшения текстуры резкости при использовании мипа?

UPDATE:

После генерации мипмапов вручную эффект точно такой же.

РЕШЕНИЕ: Я последовал ответ datenwolf и использовал анизотропную фильтрацию текстур - что устранила проблему. Я включил его с кодом:

 float maxAniso; 
     GL.GetFloat((GetPName)ExtTextureFilterAnisotropic.MaxTextureMaxAnisotropyExt, out maxAniso); 
     GL.TexParameter(TextureTarget.Texture2D, (TextureParameterName)ExtTextureFilterAnisotropic.TextureMaxAnisotropyExt, maxAniso); 

Список поддерживаемых расширений могут быть получены с помощью:

var extensions = GL.GetString(StringName.Extensions).Split(' '); 
+1

Что касается сколько mipmaps построено, есть очень систематический способ, который делается. Я изложил это в другом [ответе на аналогичный вопрос] (http://stackoverflow.com/questions/21284586/glteximage2d-vs-glubuild2dmipmaps/21290595#21290595). Вы можете взглянуть на это полезное. –

ответ

1

Есть два основных возможных виновники здесь: Там может быть onla низкого качества уменьшением размера фильтра в OpenGL реализация языка glGenerateMipmap. Небольшая анизотропия в координатах текстуры, которая может вызвать мерцающую фильтрацию.

средства правовой защиты:

  • Реализовать свой собственный уменьшение масштаба изображения и пройти каждый уровень MIPMAP индивидуально (glTexImage2D параметр уровня), а не полагаться на glGenerateMipmaps

  • Использование анизотропной фильтрация текстур

+0

Я попробую. На данный момент я заметил, что добавление GL.TexParameter (TextureTarget.Texture2D, TextureParameterName.TextureMaxLevel, 3); делает текстуры менее размытыми, но это только потому, что это вынуждает OpneGL использовать только несколько генерируемых мип-карт. – PanJanek

+0

Я протестировал применение моих собственных уменьшенных изображений (они острые), но они размыты одинаково, когда используются как текстуры openGL. Таким образом, это не проблема с GenerateMipmap, а с тем, как интерпретируется опция LinearMipmapLinear. Я не мог найти, как использовать анизотропную фильтрацию в OpenTK – PanJanek

+0

@PanJanek: Это потому, что по историческим соображениям интеллектуальной собственности (то есть патентам) это расширение, отличное от ARB OpenGL.Подробное объяснение см. В конце [Учебника по анизотропии Arcsynthesis] (http://www.arcsynthesis.org/gltut/Texturing/Tut15%20Anisotropy.html). – datenwolf

Смежные вопросы