Как мне создать и использовать mipmap из отдельных файлов? - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть код, который выглядит следующим образом:

_bfTex = new Texture(TextureTarget.Texture2D, true);
_bfTex.Image2D("Textures/sphax/terrain128.png", 0);
_bfTex.Image2D("Textures/sphax/terrain64.png", 1);
_bfTex.Image2D("Textures/sphax/terrain32.png", 2);
_bfTex.Image2D("Textures/sphax/terrain16.png", 3);
_bfTex.Image2D("Textures/sphax/terrain8.png", 4);
_bfTex.Image2D("Textures/sphax/terrain4.png", 5);
_bfTex.Image2D("Textures/sphax/terrain2.png", 6);
_bfTex.Image2D("Textures/sphax/terrain1.png", 7);
_bfTex.SetMinFilter(TextureMinFilter.NearestMipmapNearest);
_bfTex.SetMagFilter(TextureMagFilter.Nearest);
_bfTex.SetParameter(TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge);
_bfTex.SetParameter(TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge);

Функция Image2D выглядит следующим образом:

public void Image2D(Bitmap bmp, int mipmapReductionLevel = 0)
{
    var rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
    var data = bmp.LockBits(rect, ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

    GL.TexImage2D(TextureTarget.Texture2D, mipmapReductionLevel, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
        OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);

    bmp.UnlockBits(data);
}

(код в C #, но должен отображаться1: 1 с C API)

Я подумал, что если бы я звонил glTexImage2D несколько раз с разными уровнями уменьшения mipmap, я бы тогда мог использовать свою текстуру с mipmapping, но Ничего кажется, что он нарисован на экране (даже не черная текстура).

Если я просто изменю минимальный фильтр на «ближайший», все будет выглядеть нормально, как и ожидалось, так что это определенно проблема с mipmapping.

Если я вместо этого использую glGenerateMipmap для создания своего mipmap, это также работает.

Причина, по которой я хочу создать свой собственный mipmap, заключается в том, что это spritemap, и он выглядит как некоторые из краевспрайты кровоточат вместе во время изменения размера, поэтому я сделал отдельные изображения, которые имеют острые края между спрайтами.

1 Ответ

1 голос
/ 15 февраля 2012

Я подумал, что если бы я вызывал glTexImage2D несколько раз с разными уровнями уменьшения mipmap, я бы тогда мог использовать свою текстуру с mipmapping

Ваше предположение верно, именно так вы обычно явно загружаете уровни mipmap. Вы тестировали свою программу с помощью gDEBugger , чтобы увидеть, что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...