требование к bmp для загрузки в OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем witcher, 9 дек 2006.

  1. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    Добрый день подскажите пожалуйста какие требования к bmp для загрузки в виде текстуры в OpenGL.
    Вопрос возник из-за того что некотоые текстуры bmp в OpenGLне подгружаются.
    подгружаю я таким образом.
    image = auxDIBImageLoad("carpet.bmp");
    glGenTextures(1, &tex[1]);
    glBindTexture(GL_TEXTURE_2D, tex[1]);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, image->sizeX, image->sizeY,
    0, GL_RGB, GL_UNSIGNED_BYTE, image->data);
     
  2. P_F

    P_F New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2006
    Сообщения:
    116
    Адрес:
    Russia
    а подробней..., некоторые подгружаются?

    ps:если не отображаются не значит что не подгружаются, глянь маны auxDIBImageLoad.
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    вроде, ширина и высота должны быть степенями двойки (256, 512, etc.)
     
  4. witcher

    witcher New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2006
    Сообщения:
    73
    При загрузке ошибок нет.
    Но текстура не рисуется.
     
  5. cpp_and_wasm

    cpp_and_wasm Владимир

    Публикаций:
    0
    Регистрация:
    27 июл 2006
    Сообщения:
    128
    Ты не забыл про glTexCoord, которая вызывается перед установкой vertex'a?
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    пардон за оффтоп (не хочется создавать тему ради этого новую):
    а каким образом можно заставить OGL в качестве текстур принимать графич. файлы и других форматов помимо BMP (хотя бы JPEG, TGA).
    а то BMP - это уже прошлый век.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    varnie
    OpenGL не воспринимает ни каких форматов текстур, кроме одного своего RGBA. Так что если нужно JPEG, используй загрузчик, который загрузит в память RGBA.
    TGA довольно простой формат парситься очень легко, так как там максимум RLE сжатие, а со JPEG сложнее. Я предпочитаю OLE функции винды, довольно простой загрузчик получается.
     
  8. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    сейчас попробовал применить процедурку для парсинга TGA файла. вроде бы все ок, но проблема такая же как и у топикстартера - текстура не отображается. в дебаге обнаружил, что после выполнения
    Код (Text):
    1. glGenTextures(1, &textureId);
    где textureId - это:
    Код (Text):
    1. GLuint textureId;
    textureId остается неинициализированным. т.е. если изначально textureId не был инициализирован, то в отладчике мы увидим BAADFOOD, или же, если был инициализирован нулем, то нуль и останется. это нормально или нет?
    если нет, то и у топикстартера походу такая же проблема.

    ps: щас проверил, wglCreateContext, wglMakeCurrent нормально отрабатывают в ходе инициализации OGL.
     
  9. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    все проверил, теперь все работает. пардон за пост выше:)

    в случае, если получаю RGBA данные из TGA файла, то и glTexImage2D(), и gluBuild2DMipmaps() обе нормально работают, и в дальнейшем текстура отрисосывается нормально.

    в случае, если получаю RGBA данные из BMP файла,
    то если юзать glTexImage2D(), то текстура не выводится, а при gluBuild2DMipmaps() нормально выводится.

    вот это мне не ясно.
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rmn

    Уже года три как не должны.


    Booster

    OpenGL воспринимает очень много форматов. Например GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, и т.д. RTFMSDN.


    varnie

    Какие параметры фильтрации и какие параметры у неработающей glTexImage2D?
     
  11. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    _DEN_,
    след. строчки:

    Код (Text):
    1.   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);  
    2.  
    3.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    4.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    5.    
    6.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_NONE);
    7.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NONE);
    8.    
    9.   glTexImage2D(GL_TEXTURE_2D, 0, 3, _pBackground->_sizeX, _pBackground->_sizeY,
    10.                       0, GL_RGB, GL_UNSIGNED_BYTE, _pBackground->_data);
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    _DEN_
    Ну это само собой, я просто хотел сказать, что TGA, JPeg, и BMP сразу не загрузишь -).

    varnie
    Желательно посмотреть код, установки текстур.
    glTexParameter с какими параметрами используешь?
     
  13. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    varnie
    Нет ты лучше приведи целиком, то есть с glBindTexture и glGenTextures.
    И почему в третьем параметре 3, а не GL_RGBA например?
     
  14. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    Код (Text):
    1.  
    2.    //мой класс для получения RGB данных из графич. файла
    3.    CImage *_pBackground;
    4.    GLuint _textureId;  
    5.  
    6.    _pBackground = new CImage();
    7.     if (!_pBackground || !_pBackground->loadFile("images/background.tga") )
    8.        return;      
    9.      
    10.     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);    
    11.    
    12.     glGenTextures(1,&_textureId);        
    13.     glBindTexture(GL_TEXTURE_2D, _textureId);
    14.        
    15.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    16.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    17.    
    18.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_NONE);
    19.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_NONE);
    20.    
    21.     //для BMP не пашет почему-то
    22.     //здесь _pBackground->_data -- это  PBYTE
    23.     //_pBackground->_sizeX -- это unsigned int
    24.     //_pBackground->_sizeY -- это unsigned int
    25.     glTexImage2D(GL_TEXTURE_2D, 0, 3, _pBackground->_sizeX, _pBackground->_sizeY,
    26.                  0, GL_RGB, GL_UNSIGNED_BYTE, _pBackground->_data);
    27.    
    28.     //а эта для всего пашет (TGA,BMP хотя бы)
    29.     //gluBuild2DMipmaps(GL_TEXTURE_2D, 3, _pBackground->_sizeX, pBackground->_sizeY, GL_RGB, GL_UNSIGNED_BYTE, pBackground->_data);
    30.      
    31.     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
     
  15. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    кстати, я вчера все это тестил на старом компе с процем пнем III 850 и со старой видюхой Radeon 9000 128 мб, а сегодня - уже на новом intel core 2 duo 2400MHz E6600, новой корсаровской памятью и, что самое главное, с новой видяхой -- GeForce 7900GS от Gigabyte на 256 mb.
    это я к чему - на новом железе у меня те оба варианта заработали.
    но все равно, был бы рад, если бы мне насчет моего кода выше пояснили - есть ли там баги итд.
    спасибо!
     
  16. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    varnie

    glTexParameteri для GL_TEXTURE_WRAP_X никакого GL_NONE не принимает. Можно только GL_CLAMP или GL_REPEAT (если не считать расширений). Попробуй установить одну из них.

    Для чего ты юзаешь glPixelStorei(GL_UNPACK_ALIGNMENT, 1); ? Убери нафек.

    Странно вопщем. Псмотри что после фиксации врапа будет. Должно все работать. И посмотри, не заоверрайдены ли у тебя в дровах параметры фильтрации для текстур в опенжл.

    Скорее всего у тебя юзается мипмап фильтрация. Если моя догадка верна - подведи камеру вплотную к полику с текстурой. начиная с определенного расстояния ты ее (текстуру) увидешь.
     
  17. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    _DEN_,
    да, насчет glTexParameteri ты прав. поправил.

    glPixelStorei(GL_UNPACK_ALIGNMENT,1); я юзаю, т.к. данные загруженной текстуры у меня хранятся не в float, а в unsigned char. по мануалу нужно юзать эту ф-цию в подобном случае.

    в общем, сейчас все пашет (правда, опять же, это на новой видяхе,т.к. теперь на старой проверить не могу, видяхи той нету). а каким образом мне можно узнать,
    , поясни пожалуйста?
     
  18. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    varnie

    Покеж мануал.

    Некоторые параметра рендеринга можно заоверрайдить в дровах через какую-нить утилу, которая с дровами идет. Тоесть переопределить. Например можно жестко сказать видяхе что антиальясинг будет 8x, и все. Во всех приложениях будет 8x, а попытки его смены будут просто игнориться. То же касается и фильтрации.
     
  19. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    (c) 3-D Computer Graphics by Samuel R.Buss

    т.к. у меня как раз таки данные и идут в unsigned char, т.е. НЕ float, то я и применяю эту команду согласно выдержке выше. разве не так?
     
  20. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    varnie

    Незнаю, может и так. Никогда не юзал и проблем никогда не было ;)