Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наложение текстуры на трехмерный объект произвольной формы [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.

очевидно косяк какой-то с форматом и содержимым файла.


Наверх

Титульная страница Поиск, карта сайта Написать письмо