Проблема с наложением текстур в OpenGLES - PullRequest
1 голос
/ 23 января 2009

Я очень новичок в OpenGL и использую управляемую оболочку OpenGLES, написанную для телефонов с Windows Mobile ( OpenGLES Windows Mobile ). У меня есть простая задача - нарисовать квадрат (понял) и текстурировать его с помощью изображения с диска, поэтому я просто хочу отобразить файл jpg на экране. Однако каждый раз, когда я пытаюсь это сделать, отображается белый квадрат без текстуры. Я проверил, что моя текстура загружается правильно (используя некоторые из существующих примеров и просто заменив текстуру на мою). Поэтому я считаю, что моей проблемой является правильное сопоставление текстуры с объектом. Вот мой код (функции и объекты удалены, чтобы сделать его простым):

        private Bitmap image = new Bitmap(@"\Storage Card\someimage.jpg");
        using (MemoryStream ms = new MemoryStream())
        {
            Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            myImage = Texture.LoadStream(ms, false);
        }
        gl.ShadeModel(gl.GL_SMOOTH);
        gl.ClearColor(0.0f, 0.0f, 0.0f, 0.5f);
        gl.BlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA);
        gl.Hint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_NICEST);
        glLocation.Clear();
        gl.Clear(gl.GL_COLOR_BUFFER_BIT);
        gl.MatrixMode(gl.GL_PROJECTION);
        gl.LoadIdentity();
        gl.Orthof(0, ClientSize.Width, ClientSize.Height, 0, 0, 1);
        gl.Disable(gl.GL_DEPTH_TEST);

        gl.MatrixMode(gl.GL_MODELVIEW);
        gl.LoadIdentity();
        float[] rectangle = new float[] {
            0, 0,
            myImage.Width, 0,
            0,  myImage.Height,
            myImage.Width,  myImage.Height
        };

        float[] texturePosition = new float[] {
            0, 0,
            myImage.Width, 0,
            0,  myImage.Height,
            myImage.Width,  myImage.Height
        };

        //Bind texture
        gl.BindTexture(gl.GL_TEXTURE_2D, myImage.Name);
        gl.TexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR);
        gl.TexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR);
        //move cursor
        glLocation.MoveCursor(Location.X, Location.Y);
        gl.EnableClientState(gl.GL_TEXTURE_COORD_ARRAY);
        gl.EnableClientState(gl.GL_VERTEX_ARRAY);

        //draw square and texture it.
        fixed (float* rectanglePointer = &rectangle[0], positionPointer = &texturePosition[0])
        {
            gl.TexCoordPointer(2, gl.GL_FLOAT, 0, (IntPtr)positionPointer);
            gl.VertexPointer(2, gl.GL_FLOAT, 0, (IntPtr)rectanglePointer);
            gl.DrawArrays(gl.GL_TRIANGLE_STRIP, 0, 4);
        }

        gl.DisableClientState(gl.GL_TEXTURE_COORD_ARRAY);
        gl.DisableClientState(gl.GL_VERTEX_ARRAY);
        egl.SwapBuffers(myDisplay, mySurface);
        gl.Clear(gl.GL_COLOR_BUFFER_BIT);

Ответы [ 2 ]

2 голосов
/ 18 декабря 2009

вы не включили GL_TEXTURE_2D - добавьте эту строку

gl.glEnable(gl.GL_TEXTURE_2D)
0 голосов
/ 16 февраля 2009

Попробуйте изменить координаты положения текстуры с myImage.Width и myImage.Height на 1.0. Координаты текстуры от 0,0 до 1,0.

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