Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.17;
Скачать: CL | DM;

Вниз

Простейший пример наложения текстуры в OpenGL на примитив   Найти похожие ветки 

 
xenos   (2003-01-14 21:36) [0]

Здравствуйте, я пытался наложить текстуру в OpenGL на куб
согласно примеру, но ничего не вышло. Подскажите пожалуйста
как это сделать. Спасибо. Вот код на всякий случай:
=================================================================
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, OpenGL;

type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
bitmap: TBitmap;
bits: Array [0..67, 0..67, 0..3] of GLubyte;
procedure BmpTexture;
public
{ Public declarations }
end;

var
Form1: TForm1;
DC:HDC;
HRC:HGLRC;
angle:GLFloat;

implementation

{$R *.dfm}

procedure SetDCPixelFormat (hdc : HDC);
var
pfd : TPixelFormatDescriptor;
nPixelFormat : Integer;
begin
FillChar (pfd, SizeOf (pfd), 0);
pfd.dwFlags :=PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
nPixelFormat :=ChoosePixelFormat (hdc, @pfd);
SetPixelFormat(hdc, nPixelFormat, @pfd);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DC := GetDC (Handle);
SetDCPixelFormat(DC);
hrc := wglCreateContext(DC);
wglMakeCurrent(DC, hrc);
glClearColor (0.0, 0.0, 0.0, 1.0);
glMatrixMode (GL_PROJECTION);
glLoadIdentity;
glFrustum (-1, 1, -1, 1, 2, 20);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity;
glTranslatef(0.0, 0.0, -6.0);
BmpTexture;
Timer1.Enabled:=True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wglMakeCurrent(0, 0);
wglDeleteContext(hrc);
ReleaseDC (Handle, DC);
DeleteDC (DC);
Timer1.Enabled:=False;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glRotated(angle,0,1,0);
glColor3d(0,0,1);
glBegin(GL_Quads);
glVertex3d(-1,0,1);
glVertex3d(1,0,1);
glVertex3d(1,-2,1);
glVertex3d(-1,-2,1);
glEnd;
glBegin(GL_Quads);
glVertex3d(-1,0,-1);
glVertex3d(-1,0,1);
glVertex3d(1,0,1);
glVertex3d(1,0,-1);
glEnd;
glBegin(GL_Quads);
glVertex3d(-1,-2,-1);
glVertex3d(-1,-2,1);
glVertex3d(1,-2,1);
glVertex3d(1,-2,-1);
glEnd;
glBegin(GL_Quads);
glVertex3d(-1,0,1);
glVertex3d(-1,0,-1);
glVertex3d(-1,-2,-1);
glVertex3d(-1,-2,1);
glEnd;
glBegin(GL_Quads);
glVertex3d(1,0,1);
glVertex3d(1,0,-1);
glVertex3d(1,-2,-1);
glVertex3d(1,-2,1);
glEnd;
SwapBuffers(DC);
{glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glEnable (GL_DEPTH_TEST);}
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
angle:=angle+1;
if angle>1 then angle:=1;
InvalidateRect(Handle, nil, False);
end;

{**********************************************************************}
{*** ПРОЦЕДУРА ЗАГРУЗКИ И ИНИЦИАЛИЗАЦИИ ТЕКСТУРЫ ***}
{**********************************************************************}
procedure TForm1.BmpTexture;
var
i, j: Integer;
begin
bitmap := TBitmap.Create;
bitmap.LoadFromFile("kirpich.bmp"); // загрузка текстуры из файла

{--- заполнение битового массива ---}
for i := 0 to 67 do
for j := 0 to 67 do begin
bits [i, j, 0] := GetRValue(bitmap.Canvas.Pixels[i,j]);
bits [i, j, 1] := GetGValue(bitmap.Canvas.Pixels[i,j]);
bits [i, j, 2] := GetBValue(bitmap.Canvas.Pixels[i,j]);
bits [i, j, 3] := 255;
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,
68, 68, // здесь задается размер текстуры
0, GL_RGBA, GL_UNSIGNED_BYTE, @bits);
glEnable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
end;


end.
=================================================================


 
Mihey   (2003-01-14 21:58) [1]

Возьми тот же пример, замени в нём текстуру на свою. Потом уже разбирайся.


 
Mirovodin   (2003-01-15 16:31) [2]

Размер текстуры желателен 2^N. На старых картах текстуры других размеров обраб-ся не корректно. Создай текстуру размера 64x64.


 
Ricks   (2003-01-15 21:40) [3]

А ты случайно не забыл вставить перед glVertex3d такую штуку: glTexCoord2d??? Попоробуй, должно помочь :-)



Страницы: 1 вся ветка

Текущий архив: 2003.04.17;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.008 c
3-54507
KAA
2003-03-31 15:12
2003.04.17
2000 Каскадное удаление


14-54812
Романов Р.В.
2003-03-30 15:25
2003.04.17
Как прошла очередная встреча мастаков?


1-54672
Тимохов
2003-04-04 15:53
2003.04.17
Господа, пользующиеся Д7.


3-54458
Алекс
2003-03-28 15:07
2003.04.17
Синхнонизация данных клиента и сервера


11-54542
kostyantyn
2002-06-29 17:27
2003.04.17
установка КОЛ в Дельфи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский