![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Наложение текстуры на трехмерный объект произвольной формы [Delphi, Windows]
VasRog © (2005-07-19 11:59:00)Создал трехмерную поверхность произвольной формы (через связанные треугольники). Теперь нужно наложить текстуру, загружаемую из файла на весь этот объект. Размер текстуры - 512 - 512. Размер отображаемой поверхности - 477 - 497. Пытаюсь сделать как в предлагает нам товарищ Краснов:
procedure BmpTexture;
var
i_t, j_t: Integer;
Row_t: pRGBTripleArray;
beGin
Bitmap_t := TBitmap.Create;
Bitmap_t.LoadFromFile('egyptsandbig.bmp'); // загрузка текстуры из файла
{--- заполнение битового массива ---}
For j_t := 0 to 511 do
beGin
Row_t:= Bitmap_t.ScanLine[j_t];
For i_t := 0 to 511 do
beGin
bits [j_t, i_t, 0] := Row_t[i_t].rgbtRed;
bits [j_t, i_t, 1] := Row_t[i_t].rgbtGreen;
bits [j_t, i_t, 2] := Row_t[i_t].rgbtBlue;
end;
end;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
512, 512 , // здесь задается размер текстуры
0, GL_RGB, GL_UNSIGNED_BYTE, @Bits);
// чтобы цвет объекта не влиял на текстуру
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glEnable(GL_TEXTURE_2D);
end;
Но возникает ошибка: Stream Read Error. Помогите, пожалуйста, разобраться. И еще: как в моем случае определить s и t координать для заданной поверхности.
A22 (2005-07-19 13:38:00) [1]угу, только X и Y от 0 считай
VasRog (2005-07-19 12:59:00) [2]Bits: Array [0..511, 0..511, 0..2] of GLubyte;
Это битовый массив.
> s = x/Width;
> t = y/Height;
Здесь Width и HeiGht - это ширина и длина поверхности?
XProger (2005-07-19 12:48:00) [3]
s = x/Width;
t = y/Height;
Что есть bits?
MeF Dei Corvi (2005-07-19 12:41:00) [4]
> Но возникает ошибка: Stream Read Error.
очевидно косяк какой-то с форматом и содержимым файла.