Delphi - OpenGL en Delphi

 
Vista:

OpenGL en Delphi

Publicado por Carli (1 intervención) el 28/09/2005 19:48:26
Hola a todos
Necesito como darle textura a un objeto programando OpenGL.
Si es muy largo el codigo pueden escribir a mi correo.
Por favor necesito con urgencia ese codigo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:OpenGL en Delphi

Publicado por EL CARIOCA (1 intervención) el 30/10/2005 00:02:55
DONDE GUARDES EL PROJECT DEBES COLOCAR LA TEXTURA CON EL NOMBRE QUE LE DOI EN EL CÓDIGO QUE ES 1.JPG

QUE TE SIRVA.

unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
dc:HDC;
rc:Cardinal;
Procedure glDibuja;
Procedure Ocio(Sender:TObject; var hecho:boolean);
public
{ Public declarations }
end;

var
Form1: TForm1;
angulo1,angulo2,angulo3,angulo4,angulo5,angulo6,angulo7:integer;
x,y,z:real;
textura:GLuint;
implementation
procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;

Procedure glInicia;
begin
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_SMOOTH);
glClearDepth(1.0);
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

glEnable(GL_TEXTURE_2D);
LoadTexture('1.jpg', textura, FALSE);
end;
{$R *.dfm}
Procedure TForm1.glDibuja;
Begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;

glTranslatef(x,y,-11.5);

if HiWord(GetKeyState(VK_DELETE)) <> 0 then
Y:=y+0.04;

if HiWord(GetKeyState((VK_INSERT))) <> 0 then
Y:=y-0.04;

if HiWord(GetKeyState(VK_END)) <> 0 then
X:=x+0.04;

if HiWord(GetKeyState((VK_HOME))) <> 0 then
x:=x-0.04;

if HiWord(GetKeyState(VK_down)) <> 0 then
inc(angulo1,2);
glRotate(angulo1,1.0,0.0,0.0);

if HiWord(GetKeyState(VK_UP)) <> 0 then
inc(angulo2,2);
glRotate(angulo2,-1.0,0.0,0.0);

if HiWord(GetKeyState(Ord('X'))) <> 0 then
inc(angulo3,2);
glRotate(angulo3,0.0,1.0,0.0);

if HiWord(GetKeyState(Ord('Z'))) <> 0 then
inc(angulo4,2);
glRotate(angulo4,0.0,-1.0,0.0);

if HiWord(GetKeyState(VK_right)) <> 0 then
inc(angulo6,2);

glRotate(angulo6,0.0,0.0,1.0);

if HiWord(GetKeyState(VK_LEFT)) <> 0 then
inc(angulo7,2);

glRotate(angulo7,0.0,0.0,-1.0);


//Base de la extructura
glBindTexture(GL_TEXTURE_2D,textura);

glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0);
glVertex3d(-2.0,-2.0,0.0);

glTexCoord2f(1.0, 1.0);
glVertex3d(-2.0,2.0,0.0);

glTexCoord2f(0.0, 1.0);
glVertex3d(2.0,2.0,0.0);

glTexCoord2f(0.0, 0.0);
glVertex3d(2.0,-2.0,0.0);
glEnd;

glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0);
glVertex3d(-2.0,2.0,3.0);

glTexCoord2f(1.0, 1.0);
glVertex3d(-2.0,2.0,0.0);

glTexCoord2f(0.0, 1.0);
glVertex3d(2.0,2.0,0.0);

glTexCoord2f(0.0, 0.0);
glVertex3d(2.0,2.0,3.0);
glEnd;

glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0);
glVertex3d(-2.0,-2.0,0.0);

glTexCoord2f(1.0, 1.0);
glVertex3d(-2.0,-2.0,3.0);

glTexCoord2f(0.0, 1.0);
glVertex3d(2.0,-2.0,3.0);

glTexCoord2f(0.0, 0.0);
glVertex3d(2.0,-2.0,0.0);
glEnd;

glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0);
glVertex3d(-2.0,-2.0,3.0);

glTexCoord2f(1.0, 1.0);
glVertex3d(-2.0,2.0,3.0);

glTexCoord2f(0.0, 1.0);
glVertex3d(2.0,2.0,3.0);

glTexCoord2f(0.0, 0.0);
glVertex3d(2.0,-2.0,3.0);
glEnd;

glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0);
glVertex3d(-2.0,-2.0,0.0);

glTexCoord2f(1.0, 1.0);
glVertex3d(-2.0,2.0,0.0);

glTexCoord2f(0.0, 1.0);
glVertex3d(-2.0,2.0,3.0);

glTexCoord2f(0.0, 0.0);
glVertex3d(-2.0,-2.0,3.0);
glEnd;

glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0);
glVertex3d(2.0,-2.0,3.0);

glTexCoord2f(1.0, 1.0);
glVertex3d(2.0,2.0,3.0);

glTexCoord2f(0.0, 1.0);
glVertex3d(2.0,2.0,0.0);

glTexCoord2f(0.0, 0.0);
glVertex3d(2.0,-2.0,0.0);
glEnd;



glFlush;
SwapBuffers(dc);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
pfd:PIXELFORMATDESCRIPTOR;
pf:Integer;
begin
dc:=GetDC(Form1.Handle);

pfd.nSize:=SizeOf(pfd);
pfd.nVersion:=1;
pfd.dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER or 0;
pfd.iPixelType:=PFD_TYPE_RGBA;
pfd.cColorBits:=16;

pf:=ChoosePixelFormat(dc,@pfd);
SetPixelFormat(dc,pf,@pfd);

rc:=wglCreateContext(dc);
wglMakeCurrent(dc,rc);

Form1.Width:=700;
Form1.Height:=700;

glInicia;

Form1.FormResize(Sender);
Application.OnIdle:=Ocio;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
wglMakeCurrent(0,0);
wglDeleteContext(rc);
end;

Procedure TForm1.Ocio(Sender:TObject; var hecho:Boolean);
Begin
hecho:=false;
glDibuja;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
glViewport(0,0,Form1.Width,Form1.Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
gluPerspective(45,Form1.Width/Form1.Height,0.01,50);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
end;

end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar