Главная страница
    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
1-54602
ДЮША
2003-04-07 17:26
2003.04.17
сворачивается в системный трей


3-54473
Друмлин
2003-03-28 21:41
2003.04.17
что использовать?


3-54410
Veles
2003-04-01 13:58
2003.04.17
передача из sql в dbf


14-54841
Cherepovets
2003-04-01 14:14
2003.04.17
Как открыть папку


4-54939
alexrush
2003-02-15 12:00
2003.04.17
Desktops & WindowStations





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