SOURCE CODE TAMPILAN BINTANG

//Memanggil library yang akan digunakan
#include
#include
#include
#include
//Inisialisasi ukuran dari window
GLsizei winWidth=400, winHeight=400;
//Pengesetan terhadap range dari koordinat
GLfloat xwcMin=0.0,xwcMax=50.0;
GLfloat ywcMin=0.0,ywcMax=50.0;
class wcPt2D {
public: GLfloat x,y;
};
//Deklarasi variabel yang digunakan
typedef GLfloat Matrix3x3 [3][3];
Matrix3x3 matComposite;
const GLdouble pi=3.14159;
//Pengesetan warna background window menjadi hijau
void init(void) {
glClearColor(0.0,1.0,0.0,0.0);
}
//Construksi matriks identitas 3x3
void matrix3x3SetIdentity (Matrix3x3 matIdent3x3){
GLint row, col;
for(row=0;row<3;row++)
for(col=0;col<3;col++)
matIdent3x3[row][col]=(row==col);
}
//Melakukan perkalian terhadap matriks m1 dan m2 lalu hasilnya ditampung di m2
void matrix3x3PreMultiply (Matrix3x3 m1, Matrix3x3 m2){
GLint row, col;
Matrix3x3 matTemp;
for(row=0;row<3;row++)
for(col=0;col<3;col++)
matTemp[row][col]=m1[row][0]*m2[0][col]+m1[row][1]*m2[1][col]+m1[row][2]*m2[2][col];
for(row=0;row<3;row++)
for(col=0;col<3;col++)
m2[row][col]=matTemp[row][col];
}
//Fungsi untuk melakukan rotasi sebesar theta(sudut) yang diinputkan
void rotate2D(wcPt2D pivotPt, GLfloat theta){
Matrix3x3 matRot;
matrix3x3SetIdentity(matRot);
matRot[0][0]=cos(theta);
matRot[0][1]=-sin(theta);
matRot[0][2]=pivotPt.x * (1-cos(theta))+pivotPt.y * sin(theta);
matRot[1][0]=sin(theta);
matRot[1][1]=cos(theta);
matRot[1][2]=pivotPt.y * (1-cos(theta))-pivotPt.x * sin(theta);
matrix3x3PreMultiply(matRot,matComposite);
}
//Menggunakan matriks kompososit, dan melakukan transformasi koordinat
void transformVerts2D(GLint nVerts, wcPt2D * verts){
GLint k;
GLfloat temp;
for(k=0;ktemp=matComposite[0][0]*verts[k].x+matComposite[0][1]*verts[k].y+matComposite[0][2];
verts[k].y=matComposite[1][0]*verts[k].x+matComposite[1][1]*verts[k].y+matComposite[1][2];
verts[k].x=temp;
}
}
//Menggambarkan satu sisi dari 5 sisi bintang dengan menggunakan koordinat yang ditentukan
void bintang(wcPt2D *verts)
{
GLint k;
glBegin(GL_LINE_LOOP);
for(k=0;k<6;k++)
glVertex2f(verts[k].x,verts[k].y);
glEnd();
}
//Fungsi utama yang menampilkan bintang
void displayFcn(void){
//deklarasi jumlah titik-titik pada satu sisi bintang
GLint nVerts=6;
//deklarasi koordinat dari titik-titik yang digunakan
wcPt2D verts[6]={{17.3,23.5},{24.5,45.9},{29.6,30.2},{26.4,30.2},{24.5,36.0},{19.8,21.7}};
wcPt2D centroidPt,pivPt,fixedPt;
//deklarasi titik pusat sebagai sumbu putar
centroidPt.x=24.5;
centroidPt.y=23.2;
pivPt=centroidPt;
fixedPt=centroidPt;
//deklarasi besar sudut perputaran
GLdouble theta=2*pi/5;
glClear(GL_COLOR_BUFFER_BIT);//Clear window
glColor3f(0.0,0.0,0.0);//Set warna garis luar bintang menjadi hitam
//Menggambarkan sisi tersebut sebanyak lima kali hingga membentuk bintang
for(int i=0; i<6; i++){
bintang(verts);
matrix3x3SetIdentity(matComposite);
rotate2D(pivPt,theta); //?Rotasi terhadap sisi yang telah digambar
transformVerts2D(nVerts,verts);
}
glFlush();
}
//Fungsi untuk pengondisian window
void winReshapeFcn(GLint newWidth, GLint newHeight){
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(xwcMin,xwcMax,ywcMin,ywcMax);
glClear(GL_COLOR_BUFFER_BIT);
}
//Fungsi utama/main yang dipanggil ketika awal program dijalankan
int main(int argc, char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(50,50);
glutInitWindowSize(winWidth,winHeight);
glutCreateWindow("Gambar Bintang");
init();
glutDisplayFunc(displayFcn);
glutReshapeFunc(winReshapeFcn);
glutMainLoop();
return 0;
}

Poskan Komentar

About this blog

Diberdayakan oleh Blogger.

About Me

Foto Saya
kalo anda mengenAL saya,, anda ga mgkin menyesal apabila ntar qta berteman...