Nepp.
MAn kan använda den på olika sätt. I spel används den oftast som "huvudfilen".
Så här ser min dpr fil ut just nu:
//*******************************//
// © Copyright Daniel Henell //
// [email]noshit556@yahoo.com[/email] //
//*******************************//
program Breakout3D_v01;
uses
Windows,
Init,
OpenGL12,
TGATexture;
const
BLOCK_W = 1.0;
BLOCK_H = 0.2;
PADDLE_W = 1.2;
PADDLE_H = 0.3;
OBJ_DEPTH = 0.5;
type
TVector3 = record
X : GLfloat;
Y : GLfloat;
Z : GLfloat;
end;
TBlock = record
Image : Integer;
Visible : Boolean;
end;
var
// FPS vars
LastFrame : Integer;
LastTime : Integer;
FPS : Integer;
// Textures
BlockTex : array[0..9] of GLuint;
// Compiled objects
Block : GLuint;
Ball : GLuint;
Paddle : GLuint;
// Game vars
BlockMap : array[0..9,0..9] of TBlock;
PaddleX : GLfloat;
BallX : GLfloat;
BallY : GLfloat;
BallVelX : GLfloat;
BallVelY : GLfloat;
function IntToStr(Num: Integer): String;
begin
Str(Num, Result);
end;
function PixelPerSec(X : Integer): GLfloat;
begin
Result := (x/1000)*(getTickCount()-LastFrame);
end;
procedure ReSizeGLScene(Width, Height: GLsizei);
begin
WindowWidth := Width;
WindowHeight := Height;
if (Height = 0) then
Height := 1;
glViewport(0, 0, Width, Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, Width / Height, 0.1, 1500.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
end;
procedure LoadBlockMap(Filename: String);
var
F : file of byte;
B : byte;
X : Integer;
Y : Integer;
begin
AssignFile(F, Filename);
Reset(F);
for X := 0 to 9 do begin
for Y := 0 to 9 do begin
Read(F, B);
if B > High(Block) then B := 0;
BlockMap[X][Y].Image := B;
BlockMap[X][Y].Visible := true;
end;
end;
CloseFile(F);
end;
procedure CompileObjects();
var
quadratic : PGLUquadricObj;
begin
Block := glGenLists(1);
glNewList(GL_COMPILE,Block);
glBegin(GL_QUADS);
glVertex3f(BLOCK_W, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, BLOCK_H, 0.0);
glVertex3f(BLOCK_W, BLOCK_H, 0.0);
glVertex3f(BLOCK_W, 0.0, -OBJ_DEPTH);
glVertex3f(0.0, 0.0, -OBJ_DEPTH);
glVertex3f(0.0, BLOCK_H, -OBJ_DEPTH);
glVertex3f(BLOCK_W, BLOCK_H, -OBJ_DEPTH);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, -OBJ_DEPTH);
glVertex3f(0.0, BLOCK_H, -OBJ_DEPTH);
glVertex3f(0.0, BLOCK_H, 0.0);
glVertex3f(BLOCK_W, 0.0, 0.0);
glVertex3f(BLOCK_W, 0.0, -OBJ_DEPTH);
glVertex3f(BLOCK_W, BLOCK_H, -OBJ_DEPTH);
glVertex3f(BLOCK_W, BLOCK_H, 0.0);
glEnd();
glEndList();
Paddle := glGenLists(1);
glNewList(GL_COMPILE,Paddle);
glBegin(GL_QUADS);
glVertex3f(PADDLE_W, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, PADDLE_H, 0.0);
glVertex3f(PADDLE_W, PADDLE_H, 0.0);
glVertex3f(PADDLE_W, 0.0, -OBJ_DEPTH);
glVertex3f(0.0, 0.0, -OBJ_DEPTH);
glVertex3f(0.0, PADDLE_H, -OBJ_DEPTH);
glVertex3f(PADDLE_W, PADDLE_H, -OBJ_DEPTH);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, -OBJ_DEPTH);
glVertex3f(0.0, PADDLE_H, -OBJ_DEPTH);
glVertex3f(0.0, PADDLE_H, 0.0);
glVertex3f(PADDLE_W, 0.0, 0.0);
glVertex3f(PADDLE_W, 0.0, -OBJ_DEPTH);
glVertex3f(PADDLE_W, PADDLE_H, -OBJ_DEPTH);
glVertex3f(PADDLE_W, PADDLE_H, 0.0);
glEnd();
glEndList();
quadratic := gluNewQuadric();
gluQuadricNormals(quadratic, GLU_SMOOTH);
Ball := glGenLists(1);
glNewList(GL_COMPILE,Ball);
gluSphere(quadratic,1.3,32,32);
glEndList();
end;
procedure glInit();
begin
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_SMOOTH);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.4);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_TEXTURE_2D);
LoadTGA('Data\Graphic\block000.tga', BlockTex[0], False);
LoadTGA('Data\Graphic\block001.tga', BlockTex[1], False);
LoadTGA('Data\Graphic\block002.tga', BlockTex[2], False);
LoadTGA('Data\Graphic\block003.tga', BlockTex[3], False);
LoadTGA('Data\Graphic\block004.tga', BlockTex[4], False);
LoadTGA('Data\Graphic\block005.tga', BlockTex[5], False);
LoadTGA('Data\Graphic\block006.tga', BlockTex[6], False);
LoadTGA('Data\Graphic\block007.tga', BlockTex[7], False);
LoadTGA('Data\Graphic\block008.tga', BlockTex[8], False);
LoadTGA('Data\Graphic\block009.tga', BlockTex[9], False);
LoadBlockMap('Data\Blocks.map');
end;
procedure DrawBlocks();
var
X : Integer;
Y : Integer;
begin
for X := 0 to 9 do
begin
for Y := 0 to 9 do
begin
glPushMatrix();
glTranslatef(X*BLOCK_W, Y*BLOCK_H, 0);
glBindTexture(GL_TEXTURE_2D, BlockTex[BlockMap[X][Y].Image]);
glCallList(Block);
glPopMatrix();
end;
end;
end;
procedure glDrawScene();
begin
LastFrame := getTickCount();
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
DrawBlocks();
glPushMatrix();
glTranslatef(PaddleX, 0.0, 0.0);
glCallList(Paddle);
glPopMatrix();
glPushMatrix();
glTranslatef(BallX, BallY, 0.0);
glCallList(Ball);
glPopMatrix();
end;
procedure ProcessInput();
var
MousePos : TPoint;
begin
GetCursorPos(MousePos);
if MousePos.x < WindowWidth shl 1 then PaddleX := PaddleX - PixelPerSec(100);
if MousePos.x > WindowWidth shl 1 then PaddleX := PaddleX + PixelPerSec(100);
end;
begin
NewWindow('Breakout3D',800,600,32,wmFullscreen);
end.