Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-54485
jen_bond
2003-03-29 17:12
2003.04.17
Проверка транзакции


3-54523
DenKop
2003-03-30 19:12
2003.04.17
IB Server EIBInterBaseRoleError


1-54660
Alex Digy
2003-04-04 13:54
2003.04.17
Передача параметров процедуры в DLL


1-54549
anbezr
2003-04-04 10:35
2003.04.17
Изменение св-ва Parent


1-54729
Tolic-F
2003-04-05 10:48
2003.04.17
Макс. размер INI файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский