Страницы: 1

Ответить
RSS
Опять текстура, Текстура грузится с искажением
 
Думал, что уже закончил разбираться с текстурами, ан нет, опять проблема. Господа, Дамы, подскажите, где собака порылась - заметил, что не все текстуры грузятся одинаково хорошо. некоторые грузятся с искажениями. Рисунок jpeg, глубина цвета - 24, размеры - 2480х3508. Другие картинки грузятся нормально. Пол картинки перевернуто и двойка другого цвета (должна быть синей). Сам файл, что пытаюсь грузить - https://drive.google.com/file/d/0BxSuWjzbtFnxVWxldTd4cDJ4dkk/view?usp=sharing Гружу -
Код
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, w, h, 0, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, pixels);
 
Попробуйте использовать текстуру , каждая из сторон которых пропорциональна степени 2.
Т.е. для начала 2048х2048, потом 2048х4096. Тогда текстура тоже отображается неверно?
 
2й вариант, еще попробуйте
Код
Il.ilEnable(Il.IL_ORIGIN_SET)
изменить на
Код
Il.ilEnable(Il.IL_CONV_PAL)
 
Изменил размеры текстуры - поменялся только цвет отдельных пикселей (двойка стала зеленой). При замене
Код
Il.ilEnable(Il.IL_ORIGIN_SET)
на
Код
Il.ilEnable(Il.IL_CONV_PAL)
реакции совсем нет.(

Я что-то слыхал еще из Delphi о пиксельном сдвиге, но вот что именно, сейчас найти не могу. Может в нем дело, не зря же цвета меняются с изменением размера текстуры.
 
Точно нет ошибки при назначении текстурных координат?
 
Но ведь другие текстуры грузит без искажений.(
Загруженная текстура: https://drive.google.com/file/d/0BxSuWjzbtFnxMnFUT0E2RDNWX3c/view?usp=sharing
Оригинал картинки: https://drive.google.com/file/d/0BxSuWjzbtFnxbXFhOUZSMGpLZ1U/view?usp=sharing
 
Вот, собственно, сама функция вывода текстуры на экран:
Код
private void DrawSubstrate() //Рисуем подложку
        {
            int fcs = auxiliary_procedures.func_cur_scen();
            if (StatClass.ScenarioArray[fcs].DataTextureArray.Length == 0)
            {
                return;
            }

            //Gl.glPushMatrix();
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR_MIPMAP_LINEAR);
            Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_DECAL);
            Gl.glHint(Gl.GL_POLYGON_SMOOTH_HINT, Gl.GL_FASTEST);
            //Gl.glDisable(Gl.GL_LIGHT0);
            foreach (StatClass.DataTexture foreach_DataTextureArray in 
                         StatClass.ScenarioArray[fcs].DataTextureArray)
                {
                Gl.glPushMatrix();
                Gl.glDisable(Gl.GL_LIGHT0);
                // отрисовываем рамку выбора вокруг полигона текстуры
                if (foreach_DataTextureArray.Select)
                    {
                    Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE);
                    Gl.glColor3d(0, 255, 0);
                    Gl.glLineWidth(3);
                    Gl.glBegin(Gl.GL_QUADS);
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[0,0],//x1,
                              foreach_DataTextureArray.VertObj[0,1]); //y1 левый нижний угол квадрата
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[1,0],//x2
                              foreach_DataTextureArray.VertObj[1,1]); //y1 правый нижний
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[2,0],//x2
                              foreach_DataTextureArray.VertObj[2,1]); //y2 правый верхний
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[3,0],//x1
                              foreach_DataTextureArray.VertObj[3,1]); //y2 левый верхний
                    // завершаем отрисовку рамки вокруг полигона
                    Gl.glEnd();
                    }
                Gl.glEnable(Gl.GL_TEXTURE_2D);//Только после отрисовки рамки, иначе рамка будет серой
                Gl.glColor3d(1, 1, 1);
                // включаем режим текстурирования , указывая индификатор ListName
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, foreach_DataTextureArray.ListName);

                Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_FILL);
                // отрисовываем полигон
                    Gl.glBegin(Gl.GL_QUADS);
                    Gl.glTexCoord2d(0, 0); //s и t = 0
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[0, 0],
                                foreach_DataTextureArray.VertObj[0, 1]); // левый нижний угол квадрата
                    Gl.glTexCoord2d(1, 0); //s = 1 и t = 0
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[1, 0],
                                foreach_DataTextureArray.VertObj[1, 1]); // правый нижний
                    Gl.glTexCoord2d(1, 1); //s и t = 1
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[2, 0],
                                foreach_DataTextureArray.VertObj[2, 1]); // правый верхний
                    Gl.glTexCoord2d(0, 1); //s = 0 и t = 1
                    Gl.glVertex2d(foreach_DataTextureArray.VertObj[3, 0],
                                foreach_DataTextureArray.VertObj[3, 1]); // левый верхний
                    Gl.glEnd();

                Gl.glDisable(Gl.GL_TEXTURE_2D);
                Gl.glEnable(Gl.GL_LIGHT0);
                Gl.glPopMatrix();
            }
                //Gl.glEnable(Gl.GL_LIGHT0);
            //Gl.glPopMatrix();
            //}
        }
Изменено: constX7 - 1 Апреля 2016 10:19:08
Страницы: 1

Ответить
Читают тему (гостей: 2)
Форма ответов
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Загрузить картинки
Отправить Отменить
 
^
Регистрация
Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не забудьте проверить папку спам.
Логин*
Email*
Пароль*
Подтверждение пароля*
 
Логин*
Код*
 
×
Восстановление пароля
Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш Email. Если код не пришел в течении нескольких минут - проверьте папку спам.
Логин

или Email
Логин*
Код подтверждения*
Новый пароль*
Подтверждение пароля*
×
Авторизация
  • Используйте вашу учетную запись на Facebook.com для входа на сайт.
  • Используйте вашу учетную запись VKontakte для входа на сайт.
  • Используйте вашу учетную запись Google для входа на сайт.
Авторизуйтесь с помощью соц. сети или с помощью аккаунта на сайте:
×