Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование графики > C# openGL (tao framewok) наложение текстуры на сферу


Автор: Demon2 06.04.10, 14:32
Для загрузки использую такой код:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    private void LoadGLTexturePartial(Bitmap textureImage, int elementIndex, bool flip)
    {
        if (flip)
        {
            textureImage.RotateFlip(RotateFlipType.Rotate180FlipX);
        }
        Rectangle rectangle = new Rectangle(0, 0, textureImage.Width, textureImage.Height);
        BitmapData bitmapData = textureImage.LockBits(rectangle, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
        GL.glBindTexture(GL.GL_TEXTURE_2D, this.texture[elementIndex]);
        GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, (int)GL.GL_RGB8, textureImage.Width, textureImage.Height, 0, GL.GL_BGR_EXT, GL.GL_UNSIGNED_byte, bitmapData.Scan0);
        GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, (int)GL.GL_LINEAR);
        GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, (int)GL.GL_LINEAR);
        if (bitmapData != null)
        {
            textureImage.UnlockBits(bitmapData);
        }
    }


Вывожу так:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
                LoadTexture(new Bitmap("1.bmp"), 0, true);
                quadr = Glu.gluNewQuadric();
                Glu.gluQuadricTexture(quadr, Gl.GL_TRUE);
                Gl.glEnable(Gl.GL_TEXTURE_2D);
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[0]);
                Glu.gluSphere(quadr, 0.4, 50, 50);
                Gl.glDisable(Gl.GL_TEXTURE_2D);


Текстура 256х256 (Икс на синем фоне)
Почему отображается вот с такими проблемами?
user posted image
При повороте сферы glRotate текстура отображается нормально, как на скрине или вообще пропадает.

Автор: OpenGL 07.04.10, 07:04
Подобные артефакты могут возникать при включенном depth test, если забываешь очищать depth buffer. Проверь, очищаешь ли ты его.

Автор: Demon2 07.04.10, 17:32
Добавил
Gl.glEnable(Gl.GL_DEPTH_TEST);
и всё стало нормально. Просто я ещё новичок в этом деле :blush:
Ощищать-то - очищал, а что включить надо его - незнал.
Спасибо

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)