Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2012, 22:48   #1
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию Не отображаются текстуры в OpenGL

Собственно, в чем проблема.
Загружал файл bmp с помощью glaux'a и из полученного изображения делал текстуру. Делал это в своем хидере, возвращал функцией ID полученной текстуры. Все было нормально.
Затем возникла необходимость во время выполнения программы менять текстуры(т.е. переменная та же, но изображение другое).
Ничего хорошего из этого не вышло, и просто новое создание текстуры в существующую переменную(предварительно сделав/не сделав - расмм.разные варианты) никакого эффекта не принесло(причем изображение грузилось корректно.
Решил вынести все создание текстуры в main(переменная текстуры глобальная, конечно). Загружаемое изображение в формате glaux'a брал из соответствующей переменно, и делал так:

Код:
contour[2] - отсюда беру изображение, все нормально с ним
Texture[2] - понятно, две текстуры
Код:
glutInitWindowPosition(300, 100);
    glutInitWindowSize(600, 300);
    glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );

	contour[0].CreateFromFile(L"31.bmp");
	contour[1].CreateFromFile(L"1.bmp");
	glColor3d(1, 1, 1);
	glGenTextures(2, Texture);
	glPixelStorei(GL_UNPACK_ALIGNMENT,  1);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	glBindTexture(GL_TEXTURE_2D, Texture[0]);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, contour[0].image->sizeX, contour[0].image->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, contour[0].image->data);

	glBindTexture(GL_TEXTURE_2D, Texture[1]);
	glTexImage2D(GL_TEXTURE_2D, 0, 3, contour[1].image->sizeX, contour[1].image->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, contour[1].image->data);
Рисую так:
Код:
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
	glEnable(GL_TEXTURE_2D);
	glDisable(GL_DEPTH_TEST);

	glBindTexture(GL_TEXTURE_2D, Texture[0]);
	glBegin(GL_QUADS);
		glTexCoord2d(0, 0); glVertex2d(0.5/4, 0);
		glTexCoord2d(0, 1); glVertex2d(0.5/4, 0.5);
		glTexCoord2d(1, 1); glVertex2d(0.5/4*3, 0.5);
		glTexCoord2d(1, 0); glVertex2d(0.5/4*3, 0);
	glEnd();
	glBindTexture(GL_TEXTURE_2D, Texture[1]);
	glBegin(GL_QUADS);
		glTexCoord2d(0, 0); glVertex2d(0.5+0.5/4, 0);
		glTexCoord2d(0, 1); glVertex2d(0.5+0.5/4, 0.5);
		glTexCoord2d(1, 1); glVertex2d(1-0.5/4, 0.5);
		glTexCoord2d(1, 0); glVertex2d(1-0.5/4, 0);
	glEnd();
так вот, это вообще перестало рисовать.Этот код(создания текстуры) был в функции, загружающей изображение - работало.
так-не работает...Не пойму, в чем дело?

Как выяснилось опытным путем, дело в рендере...Но что конкретно - хз..

Последний раз редактировалось monolit111; 19.09.2012 в 00:17.
monolit111 вне форума Ответить с цитированием
Старый 19.09.2012, 20:46   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Попробуйте загружать bmp через Glaux.h. команду не помню сори: как то так начинается auxDIBImageLoadA("имя файла") вроде так.

Может так попробовать я всегда так делал и проблем не возникало

Код:
glBindTexture(GL_TEXTURE_2D, Texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, contour[0].image->sizeX, contour[0].image->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, contour[0].image->data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

glBindTexture(GL_TEXTURE_2D, Texture[1]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, contour[1].image->sizeX, contour[1].image->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE,contour[1].image->data)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.

Последний раз редактировалось kineziz; 19.09.2012 в 20:51.
kineziz вне форума Ответить с цитированием
Старый 19.09.2012, 23:33   #3
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

Так и гружу.
Проблем тоже не возникало до недавнего момента, но в один прекрасный момент(описано выше)...
Выяснил я, что вместо текстуры рисуется текущий цвет(который glColor3d)...
т.е.DrawPixels работает, и проблемы все-таки с текстурой) Хотелось бы понять, в чем дело, но практически 6-часовое сидение перед монитором, глядя на код, результатов не принесло...
monolit111 вне форума Ответить с цитированием
Старый 20.09.2012, 13:51   #4
de-em
Пользователь
 
Регистрация: 28.07.2011
Сообщений: 14
По умолчанию

А еще память нужно бы освободить... или текст загрузки не полный?

или так
Код:
AUX_RGBImageRec *TextureImage[pichures];        // массив для текстур
memset(TextureImage,0,sizeof(void *)*pichures); // Обнуление
if ((TextureImage[0]=LoadBMP("Data/111.bmp"))
... //перечень загружаемых файлов
 glGenTextures(pichures, &texture[0]);    // Создание текстуры
      for (int loop=0; loop<pichures; loop++)  // Цикл для текстур
      {
        glBindTexture(GL_TEXTURE_2D, texture[loop]);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX,
          TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE,
          TextureImage[loop]->data);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
     }
      for (int loop=0; loop<pichures; loop++)      // Цикл для рисунков
      {
        if (TextureImage[loop])         // Если текстура существует
        {
          if (TextureImage[loop]->data) // Если рисунок есть
          {
            free(TextureImage[loop]->data);
          }
          free(TextureImage[loop]);     // Очистить память из-под него
        }
      }
    }

Последний раз редактировалось de-em; 20.09.2012 в 13:54.
de-em вне форума Ответить с цитированием
Старый 20.09.2012, 14:40   #5
monolit111
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 95
По умолчанию

конечно не полный, все есть в соответствующем месте)
Но с загрузкой все нормально, говорю ж, DrawPixels работает с этим изображением вполне корректно.
Что не так с текстурой...Я рисую в QUADS, но вместо текстуры текущий цвет. Вот и я думаю, может я что-то очевидное упустил? Потому что мало того что в другом проэкте(не так давно делал) этот код работал, так и в этом работал!(Создание текстуры было в функции(возвращал GLuint), но только одноразовое..Т.е. в ту же переменную новую текстуру перезаписать не получалось ..)

Что-то у меня очевидно с glTexImage2D ...
Ибо gluBuild2DMipmaps все нормально грузит и при этом текстуры отображаются.

Последний раз редактировалось monolit111; 20.09.2012 в 14:56. Причина: Нашел
monolit111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Текстуры OPENGL gufon Общие вопросы Delphi 3 02.06.2012 12:11
OpenGL. Текстуры. _PROGRAMM_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 01.06.2011 20:32
OpenGL и текстуры N!ckeL Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 05.05.2010 15:46
Текстуры OpenGl Stanislav Мультимедиа в Delphi 7 17.12.2008 17:55
OpenGL текстуры NoName_emaNoN Win Api 3 29.11.2007 20:11