forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=108)
-   -   OpenGL текстуры. Объясните (http://forum.boolean.name/showthread.php?t=5991)

Данил 05.05.2008 18:35

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 работает нормально?
Может кто-нибудь объяснить доходчиво, что делает его код, и почему он робит, а мой нет ? :wallbash:
Не пойму...

HolyDel 05.05.2008 18:42

Ответ: OpenGL текстуры. Объясните
 
текстура грузится та же самая? подозреваю что пиксмап выравнян по 4 байта. попробуй грузить с флагом GL_RGBA заместо флага GL_RGB

Данил 05.05.2008 18:46

Ответ: 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) ;
не помогло.

HolyDel 05.05.2008 18:51

Ответ: OpenGL текстуры. Объясните
 
скрин в студию. или ничего не изменилось? код рисования тоже желателен бы, особенно каким обращом задаются uv координаты.

Данил 05.05.2008 20:43

Ответ: OpenGL текстуры. Объясните
 
Ничего не изменилось... :(

тут код и все необходимое. так же ехе...

ABTOMAT 05.05.2008 20:55

Ответ: OpenGL текстуры. Объясните
 
У тебя ж вроде получалось раньше накладывать, только красный с синим каналы путались?

Данил 05.05.2008 22:18

Ответ: OpenGL текстуры. Объясните
 
Я каналы настроил. Но этот метод я взял у NeHe. Решил попробовать сам сделать. Получилась какая-то хня...

dimanche13 05.05.2008 23:29

Ответ: 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)
...

видимо надо перевести пиксмап в другой вид (делается в цикле)

Данил 06.05.2008 15:59

Ответ: OpenGL текстуры. Объясните
 
Вроде бы да, NeHe какие-то преобразования делает с текстурой, и в итоге она нормально грузится. Но что это за преобразования такие, что они делают, и почему они так строго нужны

breadman 06.05.2008 16:06

Re: OpenGL текстуры. Объясните
 
Что мне кажется странным, дак это то что у него не получилось загрузить его методом. Вроде на Бмаксе опенгл упрощён, и либы бмп,пнг,жпг есть. Там просто обязан быть ламерский способ загрузки!

HolyDel 06.05.2008 17:24

Ответ: 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)

Данил 06.05.2008 19:02

Ответ: OpenGL текстуры. Объясните
 
Хм. Другой вопрос - это обязательно? Или же можно как-то не использоватьт эту функцию?

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, PixmapWidth(tex) , PixmapHeight(tex) , 0, GL_RGB, GL_UNSIGNED_BYTE, tex) ;


Часовой пояс GMT +4, время: 09:12.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot