Thứ Hai, 24 tháng 11, 2008

Chuong trinh ve hinh vuong = VB

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )

#include
#include "glut.h"
#include "iostream.h"
#include "afxwin.h"
#include
// kich thuoc, vi tri cua so
#define windowWidth 640
#define windowHeight 480
#define startX 0
#define startY 0
// hang so PI
#define M_PI 3.14159265358979
// macro doi tu do --> radian
#define RAD(goc) ((goc)*(M_PI/180.0))
// 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 b):red(r),green(g), blue(b){};
};
// ham khoi tao
void Init();
// !!! ham ve (tat ca thao tac ve nam trong ham nay)
void Display();
// ham ve lai moi khi cua so thay doi kich thuoc
void Reshape(int Width,int Height);
// ham xu ly ban phim
void OnKey(unsigned char key,int x, int y);

// ham ve duong thang
void DrawLine(int x1, int y1, int x2,int y2, colorentry c);
// ham ve diem
void PutPixel(int x, int y, colorentry c);
// ham ve hinh vuong
void DrawSquare(int x0, int y0, int w, colorentry c);

int main(int argc, char* argv[])
{
// Khoi tap cua so OpenGL
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(windowWidth, windowHeight);
glutInitWindowPosition(startX, startY);
glutCreateWindow("Draw Square Demo");
// Cac thao tac khoi tao
Init();
// Dang ky ham Display
glutDisplayFunc(Display);
// Dang ky ham Reshape
glutReshapeFunc(Reshape);
// Dang ky ham OnKey
glutKeyboardFunc(OnKey);
// Vong lap su kien
glutMainLoop();
// Ket thuc
return 0;
}

void Init()
{
glClearColor(0.0,0.0,0.0,0.0);
}
int w=100;
void Display()
{
// Xoa de bat dau ve
glClear(GL_COLOR_BUFFER_BIT);
// !!! Cac thao tac ve
int xMax = glutGet(GLUT_WINDOW_WIDTH);
int yMax = glutGet(GLUT_WINDOW_HEIGHT);
DrawSquare(xMax/2,yMax/2,w,colorentry(255,255,0));
PutPixel(xMax/2,yMax/2,colorentry(255,0,0));
// Ket xuat ra man hinh
glFlush();
}

void Reshape(int Width,int Height)
{
glViewport(0, 0 , (GLsizei)Width,(GLsizei)Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,(GLdouble)Width,0, (GLdouble)Height);
}

void OnKey(unsigned char key,int x, int y)
{
switch(key)
{
case '+':
w+=10;
break;
case '-':
w=w-10;
break;
case 27: // (ESC)
exit(0);
break;
}
glutPostRedisplay();
}

void DrawLine(int x1, int y1, int x2,int y2, colorentry c)
{
glBegin(GL_LINES);
glColor3ub(c.red,c.green,c.blue);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glEnd();
}

void PutPixel(int x, int y, colorentry c)
{
glPointSize(2.0);
glBegin(GL_POINTS);
glColor3ub(c.red,c.green,c.blue);
glVertex2f(x,y);
glEnd();
}

void DrawSquare(int x0, int y0, int w, colorentry c)
{
int pos[][2] = { {-w,w},{w,w},{w,-w},{-w,-w},{-w,w} };
for(int i=0;i<4;i++)
{
int x1 = x0 + pos[i][0];
int y1 = y0 + pos[i][1];
int x2 = x0 + pos[i+1][0];
int y2 = y0 + pos[i+1][1];
DrawLine(x1,y1,x2,y2,c);
}
}

Không có nhận xét nào: