6
// Bo qua man hinh Console #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) #include <stdio.h> #include "GL/glut.h" #include <math.h> #include <stdlib.h> #include <time.h> // hang so PI #define M_PI 3.14159265358979 // macro doi tu do --> radian #define RAD(goc) ((goc)*(M_PI/180.0)) // macro doi tu radian --> goc #define GOC(rad) ((rad)*180.0/M_PI) // ham lam tron #define ROUND(n) ((int)(n+0.5)) // cau truc 1 thanh phan mau theo RGB struct colorentry { unsigned char red; unsigned char green; unsigned char blue; colorentry(int r, int g, int :red(r),green(g), blue( {}; }; // colorentry // ------------------------------------- // CAC HAM XU SU KIEN // ------------------------------------- // khoi tao thong so void OnInit(); // ham su kien ve void OnDraw(); // ham su kien thay doi kich thuoc cua so void OnSize(int width,int height); // ham su kien nhan phim void OnKey(unsigned char key,int x, int y); // ham su kien nhan phim mo rong void OnKeySpecial(int key,int x, int y); // ham su kien Idle void OnIdle(); // ham su kien thoi gian void OnTime(int ms); // ham su kien nhan chuot void OnMouse(int btn, int state, int x, int y); // ham su kien di chuyen chuot va nhan void OnMotion(int x, int y); // ham su kien di chuyen chuot va khong nhan void OnPassiveMotion(int x, int y); // ------------------------------------- // KHAI BAO CAC HAM VA BIEN // -------------------------------------

bai code de thi

Embed Size (px)

DESCRIPTION

dhmt

Citation preview

// Bo qua man hinh Console#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

#include #include "GL/glut.h"

#include #include #include

// hang so PI#define M_PI 3.14159265358979// macro doi tu do --> radian#define RAD(goc) ((goc)*(M_PI/180.0))// macro doi tu radian --> goc#define GOC(rad) ((rad)*180.0/M_PI)// ham lam tron#define ROUND(n) ((int)(n+0.5))

// cau truc 1 thanh phan mau theo RGBstruct colorentry { unsigned char red; unsigned char green; unsigned char blue; colorentry(int r, int g, int :red(r),green(g), blue({};}; // colorentry

// -------------------------------------// CAC HAM XU SU KIEN// -------------------------------------// khoi tao thong sovoid OnInit();// ham su kien vevoid OnDraw();// ham su kien thay doi kich thuoc cua sovoid OnSize(int width,int height);// ham su kien nhan phimvoid OnKey(unsigned char key,int x, int y);// ham su kien nhan phim mo rongvoid OnKeySpecial(int key,int x, int y);// ham su kien Idlevoid OnIdle();// ham su kien thoi gianvoid OnTime(int ms);// ham su kien nhan chuotvoid OnMouse(int btn, int state, int x, int y);// ham su kien di chuyen chuot va nhanvoid OnMotion(int x, int y);// ham su kien di chuyen chuot va khong nhanvoid OnPassiveMotion(int x, int y);

// -------------------------------------// KHAI BAO CAC HAM VA BIEN// -------------------------------------int _xc, _yc;

void DrawSquareRotate(int xc, int yc, int w, int dgoc, colorentry c);

int main(int argc, char* argv[]){ // ------------------------------------- // KHOI TAO CUA SO OPENGL // ------------------------------------- // khoi tao tham so cua so glutInit(&argc, argv); // che do hien thi: double buffer va he mau RGB glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); // do rong, cao cua cua so glutInitWindowSize(640, 480); // vi tri bat dau cua so glutInitWindowPosition(0, 0); // tao cua so glutCreateWindow("Ve hinh vuong xoay!"); // ------------------------------------- // CAC THAO TAC XU LY // ------------------------------------- OnInit();

// ------------------------------------- // DANG KY SU KIEN // ------------------------------------- // dang ky su kien ve glutDisplayFunc(OnDraw); // dang ky su kien thay doi kich thuoc cua so glutReshapeFunc(OnSize); // dang ky su kien nhan phim glutKeyboardFunc(OnKey); // dang ky su kien nhan phim mo rong glutSpecialFunc(OnKeySpecial); // Dang ky thoi gian 0.5s glutTimerFunc(100,OnTime,100); // dang ky su kien Idle glutIdleFunc(OnIdle); // dang ky su kien nhan chuot glutMouseFunc(OnMouse); // dang ky su kien di chuyen va nhan chuot glutMotionFunc(OnMotion); // dang ky su kien di chuyen va khong nhan chuot glutPassiveMotionFunc(OnMotion);

// ------------------------------------- // VONG LAP SU KIEN // ------------------------------------- glutMainLoop();

return 0;}int n;void OnInit(){ // thiet lap mau xoa glClearColor(0.0,0.0,0.0,0.0); int xMax = glutGet(GLUT_WINDOW_WIDTH); int yMax = glutGet(GLUT_WINDOW_HEIGHT); n=7; _xc = xMax/2; _yc = yMax/2;

}// OnInit

void OnDraw(){ // xoa man hinh glClear(GL_COLOR_BUFFER_BIT);

// cac thao tac ve int _w=100; //GLint _dgoc[]={0,8,16,24,32,40,48,56}; int _dgoc=0; for(int i=0;i30); //DrawSquareRotate(_xc,_yc,_w,_dgoc,colorentry(255,0,0)); else DrawSquareRotate(_xc,_yc,_w,_dgoc,colorentry(255,0,0)); _w-=2; _dgoc+=2; } // ket xuat ra man hinh glFlush(); // chuyen tien canh sang hau canh va nguoc lai (double buffer) glutSwapBuffers();}// Display

void OnTime(int ms){ // Ham xu ly thoi gian// _dgoc = (_dgoc+5) % 360;

// Lap lai cho lan ke tiep glutTimerFunc(ms,OnTime,ms);}// OnTime

void OnIdle(){ // yeu cau ve lai man hinh cua so glutPostRedisplay();}// OnIdle

void OnMouse(int btn, int state, int x, int y){ int xMax = glutGet(GLUT_WINDOW_WIDTH); int yMax = glutGet(GLUT_WINDOW_HEIGHT); _xc = x; _yc = yMax-y;}// OnMouse

void OnMotion(int x, int y){ int xMax = glutGet(GLUT_WINDOW_WIDTH); int yMax = glutGet(GLUT_WINDOW_HEIGHT); // xx = x; // yy = yMax-y;}// OnMotion

void OnSize(int width,int height){ // thiet lap khung hien thi cua cua so glViewport(0, 0 , (GLsizei)width,(GLsizei)height); // thiet lap phep chieu glMatrixMode(GL_PROJECTION); // ma tran bien doi la ma tran don vi glLoadIdentity(); // bien doi toa do gluOrtho2D(0,(GLdouble)width,0, (GLdouble)height);}// OnSize

void OnKey(unsigned char key,int x, int y){ switch(key) { case 3: // (Ctrl+C) case 27: // (ESC) exit(0); break; case 'x': // (ESC) n++; break; case 'z': // (ESC) n--; break; }// switch key}// OnKey

void OnKeySpecial(int key,int x, int y){ // printf("%d",key); switch(key) { case 100: // LEFT _xc -= 5; break; case 101: // UP _yc += 5; break; case 102: // RIGHT _xc += 5; break; case 103: // DOWN _yc -= 5; break; }}// OnKeySpecial

void DrawSquareRotate(int xc, int yc, int w, int dgoc, colorentry c){ float xi, yi; //GLint goc[] = { 135, 45, 315, 225, 135 }; GLfloat R = sqrt(w*w+w*w); glBegin(GL_LINE_LOOP); glColor3ub(c.red,c.green,c.blue); for(int i=0;i ta chn ng phn gic thuc BC vi mu 10 BresenhamLine(xa,(int)xi,ya,(int)yi,10);

}