Форум: "Media";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
ВнизПростейший пример наложения текстуры в 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 вся ветка
Форум: "Media";
Текущий архив: 2003.04.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c