Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

Câu 1:

#include <glut.h>
#include<math.h>
#include<stdlib.h>

int pressedkey;
void SpecialkeyDown(int key, int x, int y){
pressedkey = key;

if (key == GLUT_KEY_END) {
exit(-1);
}
else {
glutPostRedisplay();
}
}

void display() {
glClear(GL_COLOR_BUFFER_BIT);
if (pressedkey == GLUT_KEY_LEFT){
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glColor3f(0.0f, 1.0f, 0.0f); //nếu không có lệnh này sẽ lấy màu mặc định
}

else if (pressedkey == GLUT_KEY_RIGHT) { //chỉ định thiết lập màu đường vẽ


glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glColor3f(1.0f, 0.0f, 0.0f); //nếu không có lệnh này sẽ lấy màu mặc định

}
glBegin(GL_POLYGON);
glVertex2i(25, 25);
glVertex2i(75, 25);
glVertex2i(75, 75);
glVertex2i(25, 75);
glEnd();
glFlush();
}

int main(int argc, char* argv[]) {


//Khởi đầu thư viện glut, có thể không dùng lệnh này nếu chưa cần
glutInit(&argc, argv);
//Tạo cửa sổ, tiêu đề là: Dau tien!

glutInitWindowSize(250, 250);
glutCreateWindow("Dau tien!");
//Đăng ký hàm hiển thị là display

glutSpecialFunc(SpecialkeyDown); //Đăng ký hàm xử lý sự kiện phím thường


gluOrtho2D(-250.0, 250.0, -250.0, 250.0);

glutDisplayFunc(display);
//Thực hiện hàm hiển thị là display, lặp vòng chờ sự kiện
glutMainLoop();

}
Câu 2:
#include <glut.h>
#include<math.h>
#include<stdlib.h>

int x0 = -100, x1 = -800;


void idle() {
//x0 += 1; x1 += 1; //ok
glutPostRedisplay();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2i(x0, -200);
glVertex2i(x1, -200);
glVertex2i(x0, 200);
glEnd();
glFlush();
x0 -= 1; x1 -= 1;
}

int main(int argc, char* argv[]) {


//Khởi đầu thư viện glut, có thể không dùng lệnh này nếu chưa cần
glutInit(&argc, argv);
//Tạo cửa sổ, tiêu đề là: Dau tien!

glutInitWindowSize(500, 500);
glutCreateWindow("Dau tien!");
//Đăng ký hàm hiển thị là display
glutDisplayFunc(display);
glutIdleFunc(idle);
gluOrtho2D(-1000.0, 1000.0, -1000.0, 1000.0);

//Thực hiện hàm hiển thị là display, lặp vòng chờ sự kiện
glutMainLoop();

Câu 3: chạy 2 hình về 2 phía khác nhau


#include <glut.h>
#include<math.h>
#include<stdlib.h>

int x0 = -100, x1 = 800;


int x2 = -100, x3 = -800;

void idle() {
//x0 += 1; x1 += 1; //ok
glutPostRedisplay();
}

void d1() {
glBegin(GL_TRIANGLES);
glVertex2i(x0, -200);
glVertex2i(x1, -200);
glVertex2i(x0, 200);
glEnd();

glFlush();
x0 += 1; x1 += 1;

void d2() {
glBegin(GL_TRIANGLES);
glVertex2i(x2, -200);
glVertex2i(x3, -200);
glVertex2i(x2, 200);
glEnd();

glFlush();
x2 -= 1; x3 -= 1;

void display() {
glClear(GL_COLOR_BUFFER_BIT);

d1();
d2();

int main(int argc, char* argv[]) {


//Khởi đầu thư viện glut, có thể không dùng lệnh này nếu chưa cần
glutInit(&argc, argv);
//Tạo cửa sổ, tiêu đề là: Dau tien!

glutInitWindowSize(500, 500);
glutCreateWindow("Dau tien!");
//Đăng ký hàm hiển thị là display
glutDisplayFunc(display);
glutIdleFunc(idle);
gluOrtho2D(-1000.0, 1000.0, -1000.0, 1000.0);

//Thực hiện hàm hiển thị là display, lặp vòng chờ sự kiện
glutMainLoop();

You might also like