|
3D-программирование miniB3D, OpenGL |
05.05.2008, 18:35
|
#1
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
OpenGL текстуры. Объясните
Давно меня тут не было ... но все же вернулся, ибо есть проблема...
Точнее, проблема была. Решил. Спасибо NeHe. Но вот я не могу понять...
Смотрите мой код:
Global tex:TPixmap = LoadPixmap ("2.png")
Global Texture
glGenTextures(1, Int Ptr(Texture)) ;
glBindTexture(GL_TEXTURE_2D, Texture) ;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) ;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) ;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PixmapWidth(tex) , PixmapHeight(tex) , 0, GL_RGB, GL_UNSIGNED_BYTE, tex) ;
|
При юзании этого кода у нас текстура накладывается.... немного странно :
И вот код от NeHe :
glGenTextures(1, Int Ptr(Texture)) ;
glBindTexture(GL_TEXTURE_2D, Texture) ;
Global PointeurImg:Byte Ptr
Global TexWidth
global TexHeight
TexWidth = PixmapWidth(tex)
TexHeight = PixmapHeight(tex)
Local Checkimage:Byte[TexWidth, TexHeight, 4]
PointeurImg = PixmapPixelPtr(tex, 0, 0)
pp=0
For y=TexHeight-1 To 0 Step -1
For x=0 To TexWidth-1
Checkimage[y, x, 0] = PointeurImg[pp + 0]
Checkimage[y, x, 1] = PointeurImg[pp + 1]
Checkimage[y, x, 2] = PointeurImg[pp + 2]
Checkimage[y, x, 3] = 100
pp = pp + 3
Next
Next
tex = Null
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TexWidth, TexHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, Checkimage)
|
Почему мой код дает ТАКОЙ эффект, а код от NeHe работает нормально?
Может кто-нибудь объяснить доходчиво, что делает его код, и почему он робит, а мой нет ?
Не пойму...
|
(Offline)
|
|
05.05.2008, 18:42
|
#2
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL текстуры. Объясните
текстура грузится та же самая? подозреваю что пиксмап выравнян по 4 байта. попробуй грузить с флагом GL_RGBA заместо флага GL_RGB
|
(Offline)
|
|
05.05.2008, 18:46
|
#3
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: OpenGL текстуры. Объясните
Global tex:TPixmap = LoadPixmap ("2.png")
Global Texture
glGenTextures(1, Int Ptr(Texture)) ;
glBindTexture(GL_TEXTURE_2D, Texture) ;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) ;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) ;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PixmapWidth(tex) , PixmapHeight(tex) , 0, GL_RGBA, GL_UNSIGNED_BYTE, tex) ;
|
не помогло.
|
(Offline)
|
|
05.05.2008, 18:51
|
#4
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL текстуры. Объясните
скрин в студию. или ничего не изменилось? код рисования тоже желателен бы, особенно каким обращом задаются uv координаты.
|
(Offline)
|
|
05.05.2008, 20:43
|
#5
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: OpenGL текстуры. Объясните
Ничего не изменилось...
тут код и все необходимое. так же ехе...
Последний раз редактировалось Данил, 30.11.2009 в 20:55.
|
(Offline)
|
|
05.05.2008, 20:55
|
#6
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: OpenGL текстуры. Объясните
У тебя ж вроде получалось раньше накладывать, только красный с синим каналы путались?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
05.05.2008, 22:18
|
#7
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: OpenGL текстуры. Объясните
Я каналы настроил. Но этот метод я взял у NeHe. Решил попробовать сам сделать. Получилась какая-то хня...
|
(Offline)
|
|
05.05.2008, 23:29
|
#8
|
Мастер
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений (для 252 пользователей)
|
Ответ: OpenGL текстуры. Объясните
сдается мне, что у тебя картинка не загрузилась... обрати внимание на эти строки
For y=TexHeight-1 To 0 Step -1
For x=0 To TexWidth-1
Checkimage[y, x, 0] = PointeurImg[pp + 0]
Checkimage[y, x, 1] = PointeurImg[pp + 1]
Checkimage[y, x, 2] = PointeurImg[pp + 2]
Checkimage[y, x, 3] = 100
pp = pp + 3
Next
Next
...
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TexWidth, TexHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, Checkimage)
...
видимо надо перевести пиксмап в другой вид (делается в цикле)
|
(Offline)
|
|
06.05.2008, 15:59
|
#9
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: OpenGL текстуры. Объясните
Вроде бы да, NeHe какие-то преобразования делает с текстурой, и в итоге она нормально грузится. Но что это за преобразования такие, что они делают, и почему они так строго нужны
|
(Offline)
|
|
06.05.2008, 16:06
|
#10
|
Нуждающийся
Регистрация: 23.02.2007
Сообщений: 65
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: OpenGL текстуры. Объясните
Что мне кажется странным, дак это то что у него не получилось загрузить его методом. Вроде на Бмаксе опенгл упрощён, и либы бмп,пнг,жпг есть. Там просто обязан быть ламерский способ загрузки!
|
(Offline)
|
|
06.05.2008, 17:24
|
#11
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: OpenGL текстуры. Объясните
For y=TexHeight-1 To 0 Step -1
For x=0 To TexWidth-1
Checkimage[y, x, 0] = PointeurImg[pp + 0]
Checkimage[y, x, 1] = PointeurImg[pp + 1]
Checkimage[y, x, 2] = PointeurImg[pp + 2]
Checkimage[y, x, 3] = 100
pp = pp + 3
Next
Next
ясно же... текстура из трехкомпонентной превращается в 4х компонентную (альфа - 100/255)
|
(Offline)
|
|
06.05.2008, 19:02
|
#12
|
Модератор
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений (для 1,694 пользователей)
|
Ответ: OpenGL текстуры. Объясните
Хм. Другой вопрос - это обязательно? Или же можно как-то не использоватьт эту функцию?
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, PixmapWidth(tex) , PixmapHeight(tex) , 0, GL_RGB, GL_UNSIGNED_BYTE, tex) ;
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:36.
|