ВУЗ:
Составители:
Основы компьютерной графики для программистов 88
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
For j:= 0 to ySize-1 do
begin
bits[(i*xSize+j)*3+0]:=
GetRValue(bitmap.Canvas.Pixels[j,xSize-1-i]);
bits[(i*xSize+j)*3+1]:=
GetGValue(bitmap.Canvas.Pixels[j,xSize-1-i]);
bits[(i*xSize+j)*3+2]:=
GetBValue(bitmap.Canvas.Pixels[j,xSize-1-i]);
end;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
xSize, ySize,// здесь задается размер текстуры
0, GL_RGB, GL_UNSIGNED_BYTE, bits);
Result:=bits;
//FreeMem(bits);
bitmap.Free;
end;//function LoadBmpTexture
Как видим, внутри функции
LoadBmpTexture вызывается функция загрузки текстуры
glTexImage2D. Особенность загрузки текстур состоит в том, что в образе битовой карты
информация о пикселах хранится не в виде R-G-B, как это принято в формате
изображений DIB, а наоборот B-G-R, то есть первой идет компонента синего цвета,
затем зеленого и далее красного. Удобство функции
LoadBmpTexture также состоит в
том, что метод загрузки картинки из файла объекта
TBitmap автоматически преобразует
любые форматы DDB в универсальный формат DIB, так что нам остается только
правильно поменять местами расположение байтов тройки RGB, что и происходит в
двойном цикле:
For i:= 0 to xSize-1 do
For j:= 0 to ySize-1 do
begin
bits[(i*xSize+j)*3+0]:=
GetRValue(bitmap.Canvas.Pixels[j,xSize-1-i]);
bits[(i*xSize+j)*3+1]:=
GetGValue(bitmap.Canvas.Pixels[j,xSize-1-i]);
bits[(i*xSize+j)*3+2]:=
GetBValue(bitmap.Canvas.Pixels[j,xSize-1-i]);
end;
Рассмотрим параметры функции glTexImage2D, как она использована в программе.
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA,
xSize, ySize, 0, GL_RGB,
GL_UNSIGNED_BYTE, bits
);
Первый параметр в этой функции может принимать только значение символической
константы
GL_TEXTURE_2D. Второй параметр указывает значение уровня детализации
текстуры. Уровень детализации задает уменьшение текстуры в заданное число раз с
применением алгоритмов Mipmap. По умолчанию используется значение 0. Третий
параметр задает количество цветовых компонент текстуры, может быть от 1 до 4.
Четвертый и пятый параметры задают ширину и высоту текстуры. Ширина должна
удовлетворять выражению 2
n
+2 x Border, где Border = 0 или 1, ширина границы
текстуры, задается в следующем, шестом параметре. Седьмой параметр задает формат
пикселов, может принимать следующие значения:
GL_COLOR_INDEX, GL_RED,
Основы компьютерной графики для программистов 88 ____________________________________________________________________________________________________________________ For j:= 0 to ySize-1 do begin bits[(i*xSize+j)*3+0]:= GetRValue(bitmap.Canvas.Pixels[j,xSize-1-i]); bits[(i*xSize+j)*3+1]:= GetGValue(bitmap.Canvas.Pixels[j,xSize-1-i]); bits[(i*xSize+j)*3+2]:= GetBValue(bitmap.Canvas.Pixels[j,xSize-1-i]); end; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, xSize, ySize,// здесь задается размер текстуры 0, GL_RGB, GL_UNSIGNED_BYTE, bits); Result:=bits; //FreeMem(bits); bitmap.Free; end;//function LoadBmpTexture Как видим, внутри функции LoadBmpTexture вызывается функция загрузки текстуры glTexImage2D. Особенность загрузки текстур состоит в том, что в образе битовой карты информация о пикселах хранится не в виде R-G-B, как это принято в формате изображений DIB, а наоборот B-G-R, то есть первой идет компонента синего цвета, затем зеленого и далее красного. Удобство функции LoadBmpTexture также состоит в том, что метод загрузки картинки из файла объекта TBitmap автоматически преобразует любые форматы DDB в универсальный формат DIB, так что нам остается только правильно поменять местами расположение байтов тройки RGB, что и происходит в двойном цикле: For i:= 0 to xSize-1 do For j:= 0 to ySize-1 do begin bits[(i*xSize+j)*3+0]:= GetRValue(bitmap.Canvas.Pixels[j,xSize-1-i]); bits[(i*xSize+j)*3+1]:= GetGValue(bitmap.Canvas.Pixels[j,xSize-1-i]); bits[(i*xSize+j)*3+2]:= GetBValue(bitmap.Canvas.Pixels[j,xSize-1-i]); end; Рассмотрим параметры функции glTexImage2D, как она использована в программе. glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, xSize, ySize, 0, GL_RGB, GL_UNSIGNED_BYTE, bits ); Первый параметр в этой функции может принимать только значение символической константы GL_TEXTURE_2D. Второй параметр указывает значение уровня детализации текстуры. Уровень детализации задает уменьшение текстуры в заданное число раз с применением алгоритмов Mipmap. По умолчанию используется значение 0. Третий параметр задает количество цветовых компонент текстуры, может быть от 1 до 4. Четвертый и пятый параметры задают ширину и высоту текстуры. Ширина должна удовлетворять выражению 2n+2 x Border, где Border = 0 или 1, ширина границы текстуры, задается в следующем, шестом параметре. Седьмой параметр задает формат пикселов, может принимать следующие значения: GL_COLOR_INDEX, GL_RED, http://www.ksu.ru/persons/9134.ru.html
Страницы
- « первая
- ‹ предыдущая
- …
- 86
- 87
- 88
- 89
- 90
- …
- следующая ›
- последняя »