1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139:
| Unit Unit1;
interface
uses Windows, Forms, OpenGL, Classes, ExtCtrls, Messages, glaux, Dialogs;
type TMainForm = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormResize(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Inittextures;
private RC : HGLRC; Angle : Integer; procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND; end;
var MainForm: TMainForm; tex: gluint;
implementation
PROCEDURE glGenTextures(n: GLsizei; VAR textures: GLuint); STDCALL; EXTERNAL opengl32; PROCEDURE glBindTexture(target: GLenum; texture: GLuint); STDCALL; EXTERNAL opengl32;
{$R *.DFM}
procedure TMainForm.FormCreate(Sender: TObject); begin RC:=CreateRenderingContext(Canvas.Handle,[opDoubleBuffered],32,0);
end;
procedure TMainForm.FormDestroy(Sender: TObject); begin DestroyRenderingContext(RC); end;
procedure TMainForm.FormPaint(Sender: TObject); begin ActivateRenderingContext(Canvas.Handle,RC); glClearColor(0,0.5,0.5,1); glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity; gluLookAt(0,0,6,0,0,-10,0,1,0); glRotatef(0.5*Angle,0,1,0); glRotatef(30,1,0,0); glScalef(1,sin(Angle*pi/90),1); glEnable(GL_DEPTH_TEST);
glenable(gl_texture_2d); inittextures;
glBindTexture(GL_TEXTURE_2D, tex);
glBegin(GL_TRIANGLE_FAN); gltexcoord2f(0,0); glVertex3f(0,0,0); gltexcoord2f(0,1); glVertex3f(0,1,0); gltexcoord2f(1,0.5); glVertex3f(1,0,0); glEnd;
glBegin(GL_TRIANGLE_FAN); gltexcoord2f(0,0); glVertex3f(0,0,0); gltexcoord2f(0,1); glVertex3f(0,1,0); gltexcoord2f(1,0.5); glVertex3f(0,0,1); glEnd;
SwapBuffers(Canvas.Handle); DeactivateRenderingContext; end;
procedure TMainForm.FormKeyPress(Sender: TObject; var Key: Char); begin if Key = #27 then Application.Terminate; end;
procedure TMainForm.FormResize(Sender: TObject); begin wglMakeCurrent(Canvas.handle,RC); glViewport(0,0,Width,Height); glMatrixMode(GL_PROJECTION); glLoadIdentity; gluPerspective(35,Width/Height,1,100); wglMakeCurrent(0,0); Refresh; end;
procedure TMainForm.Timer1Timer(Sender: TObject); begin Inc(Angle,1); if Angle >= 360 then Angle:=0; Repaint; end;
procedure TMainForm.Inittextures;
var textur: PTAUX_RGBImageRec;
begin textur := auxDIBImageLoadA('HIMMEL.bmp'); glGenTextures(1, tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_linear); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_linear); glTexImage2D(GL_TEXTURE_2D, 0, 3, textur^.sizeX, textur^.sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, textur^.data); end;
procedure TMainForm.WMEraseBkgnd(var Message: TWMEraseBkgnd); begin Message.Result:=1; end;
end. |