darkonoid

7
PRINCIPLES OF COMPUTER GRAPHICS Instructors : RAFFAELE DE AMICIS, GIUSEPPE CONTI Final Project : 3-D Arkonoid Student : ORUC HUSEYIN GURSOY

Upload: graphitech

Post on 11-May-2015

192 views

Category:

Education


3 download

DESCRIPTION

Darkonoid is the 3-d version of the old game Arkonoid.(3-DArkonoid=Darkonoid)

TRANSCRIPT

PRINCIPLES OFCOMPUTER GRAPHICS

Instructors :

RAFFAELE DE AMICIS,GIUSEPPE CONTI

Final Project : 3-D Arkonoid

Student :

ORUC HUSEYIN GURSOY

1. INTRODUCTION OF THE GAME DARKONOID :

Darkonoid is the 3-d version of the old game Arkonoid.(3-D Arkonoid=Darkonoid)

In Arkonoid you had everything as 2-d objects. Your base was a thick line-shaped object, ball was circle, items to destroy was rectangles and all of the movements were in 2-d.

So in Darkonoid everything is in 3-d. In picture-1 you can see the difference.

Picture-1 : Difference of Arkonoid and Darkonoid.

In Darkonoid every object is typically 6-gon prism, but there is a little difference in your ball. The ball is modified to make it spehere-like shape. You can see a general picture of these objects in picture-2

You can control your base with the mouse, and you can move your point of view with the keyboard.

Your mission is to destroy the items which are colored red, green and blue. Red is 5 points, Blue is 3 points, Green is 1 point.

The scoreboard and other information is displayed in a seperate window.

When the game starts the ball will start to move and bounce from the walls and the items. You must not miss the ball towards youerself. If so you will loose 1 life and you have 3 lives. If you loose all of them the game is over.

Picture 2.The objects in Darkonoid.

2. THE CLASSES:

A. Class MATRIX :

Members :public int satir; // #rowspublic int sutun; // #columnspublic double[][] sayi; // matrix items

Construction :public Matrix(int satir, int sutun)public Matrix(Point3D p)

The class matrix is used for matrix related operations. it has three members : the number of rows, the number of columns and the array which holds the matrix's items. It can be created by just giving the row and column or giving a point. If row and column is given, then an identity matrix is created. If a point is given, then the matrix form ofthe point is created.

Methods .public void sifirla() : makes this matrix identitypublic void Esitle(Matrix e) : makes this matrix equal to epublic void MultiplyWith(Matrix m) : multiplies with mpublic void transMatrix(double a,double b,double c) : makes this matrix a

translation matrixpublic void scaleMatrix(double sx, double sy, double sz) : makes this

matrix a scaling matrixpublic void rotateAroundY(double theta) : makes this matrix a rotation

matrix

public void rotateMatrixAroundPoint(Point3D p, double theta) : makes this matrix a rotation around a Point

public void strToConsole() : writes matrix to console

B. Class Geometry :

The class Geometry is the base geometry for all of the objects. Every object can have its own matrix.

Every geometry has its own display, applyTtansform, range and coloring (renk) method.

C. Class Point3D :

Members :public double x;public double y; COORDINATES OF THE POINTpublic double z;

public double r;public double g; COLOR OF THE POINTpublic double b;

Methods :public void renkRandom() // Random coloring of the point.

Point3D is the primitive class in the project. Every thing is created from Point3D. It has the coordinates and the color as the members. The renkRandom is used for coloring the point randomly.

D. Class N_gon3D :

Members;public int n; // n of Ngonpublic Point3D Points[]; // points of Ngonpublic Point3D center; // center point

Constructionpublic N_gon3D(Point3D center, double r1,double r2, int n)center : center pointr1 : radius 1r2 : radius 2n : n of N_gon3D

N_gon3D, has a ceter point and set of points which forms the Ngon. It is constructed by giving n, radius 1, radius 2 and the center pont. So the shape of the Ngon can be elliptical if r1is not equal to r2. If r1==r2 then it is circular.

E. Class Obj3D :

Members;public N_gon3D alt;public N_gon3D ust;public int n;public double r1;public double r2;public double h;

Constructionpublic Obj3D(int n, double r1,double r2, double h)h : height of object

Obj3D is formed by two N_gon3D s. One is placed at the bottom and the other at the top. h is the range between them.

3. HOW IT WORKS :

A. Creating The Objects :

All of the objects are created at the initialization phase. The objects are first created and moved to their locations. The items are located randomly in the game volume.

The ball is also Obj3D but it is modified for transforming it into sphere-like shape. The center ponts of the N_gon3D at the bottom and the top, are moved towards outside.

The game volume and the base are displayed by lines in order to make the game playable.

At each mouse movement, the base is moved to the location of the mouse on its plane.

B. Main Algorithm :

At each display following actions are done;1: get the ball,2: apply its own transformation matrix,3: if collision with the walls

take back the movement,change the transformation matrix properly,apply new transformation,

4: if inside an itemtake back the movement,change the transformation matrix properly,apply new transformation,

5: if life lostdo appropriate actions.

C. Info About Code :

1. Rage from a plane :

In this project, the range from a point to a plane is needed to be calculated for understanding the collision between the objects. The form of this method is as follows :

double rangeFromPlane(Point3D p, Point3D p1,Point3D p2,Point3D p3)

In order to calculate the range the plane has to be calculated in the form : ax+by+cz+d=0. This is done by solving an equations system. This system is shown in picture 3.

Picture 3. Equation system of the plane. x,y,z are the coordinates of p1,p2 and p3.

Whe you get a,b,c,d the distance becomes to

If you don't take the absolute value, then you can determine the point is in the normal's side or not.

2. Reflection from a plane :

Some can do this by setting the normal of the wall on one of the axes, then rotating 180 degrees or scaling with -1 according to that axis and setting the normal back to the original.(Of course you have to negate the vector.) There are lots of matrix multiplications in this way.

However my way is a bit different and faster. It is faster because you don't need to do lots ofmutrix multiplications.

Here is the algorithm :

● get the normal of the plane● get the projection of your vector on the normal and negate it● add the 2 x result to your vector

In picture 4 Reflection from a plane is demonstrated.

Picture 4 : Reflection from a plane.

3. Round-like shaped base :

In order to increase the playabality of the game, a minor control of the ball is added to the game.

If the ball hits the center of the base no change at the direction of the ball occurs. If it hits far from the center, then the reflection is a bit changed against the center point. This is shown in picture 5.

Picture 5 : Reflection from the base.

This is done with a trick : by just adjusting the normal according to the range between the center of the base and the hitting point.

4. Information about other parts :

The collision detection of the ball and the items, requires a lot of calculations. In order to avoid this a pre-check of the range is done. First the range between a point on the ball and one of the center points on the item is checked. If it is below a value then further check is done. This make the game run faster.