TRƯỜNG ĐHCN VINH
KHOA : CÔNG NGHỆ
BỘ MÔN: ĐỒ HỌA MÁY TÍNH (OPENGL)
BÀI TẬP:VẼ OTO CHẠY TRÊN MẶT PHẲNG NGANG
GVHD: NGUYỄN THỊ HIỀN
NHÓM:BÙI ĐỨC HIẾU
NGUYỄN ĐÌNH CHUẨN
NGUYỄN KHẮC BÌNH
LỚP :K2DCNTT
NỘI DUNG
•
•
•
GIỚI THIỆU ĐỀ TÀI
NÊU Ý TƯỞNG, GIẢI QUYẾT BÀI TOÁN
CHẠY CHƯƠNG TRÌNH
I.GIỚI THIỆU ĐỀ TÀI
•
•
Thiết kế một oto đơn giản chạy trên mặt ngang của màn hình
Oto chạy từ viền trái đến viền phải màn hình thì quay lại từ trái tạo cảm giác oto đang chạy liền mạch trên màn hinh
Nền tảng và môi trường phát triển
II.NÊU Ý TƯỞNG, GIẢI QUYẾT BÀI TOÁN
1.
Nêu ý tưởng
Thiết kế khối tứ giác và hai hình tròn dặcđể tạo oto có cấu tạo đơn giảnđơn giản
•.
•.
•.
Sử dụng hàm tịnh tiến glTranslate để di chuyển tứ giác và 2 hình tròn
Sử dụng hàm quay glRotate để quay 2 (bánh) hình tròn
Sử dụng hàm điều kiện if lúc nào oto chay đến giới hạn hiển thị thì cho x trở lại vị trí ban đầu
2. giải quyết bài toán
Tham chiếu thư viện
#include<glut.h>
#include<gl/GLU.h>
#include<gl/GL.h>
Khai báo
#define ESCAPE 27
int window;
float rtri = 0.0;
float rquad = 0.0;
// định dạng màn hình
void ReSizeGLScene(int Width, int Height)
{
if (Height == 0)
Height = 1;
glViewport(0, 0, Width, Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)Width / (GLfloat)Height, 0.1f, 100.0f);
glMatrixMode(GL_MODELVIEW);
}
//banh xe
void drawBall(void) {
float X = -0.5f;
glColor3f(1.0, 1.0, 1.0);
glTranslatef(X, Y, Z);//tinh tien
float Y = 0.0f;
float Z = 0.0f;
glRotatef (X, X, Y, Z);//quay
glutSolidSphere(0.3, 20, 20);
glTranslatef(X + 2, Y, Z);
glutSolidSphere(0.3, 20, 20); //hinh cau dac
}
void DISPLAY()
{
glClear(GL_COLOR_BUFFER_BIT |
glBegin(GL_QUADS); //glBegin(GL_LINE_STRIP)
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, 1.0f, 0.0f);
GL_DEPTH_BUFFER_BIT);
glVertex3f(1.0f, 1.0f, 0.0f);
glLoadIdentity();
glVertex3f(2.0f, 0.0f, 0.0f);
glTranslatef(rtri, 0.0f, -6.0f);
glVertex3f(-1.0f, 0.0f, 0.0f);
void keyPressed(unsigned char key, int x, int y)
glEnd();
{
drawBall();
rtri += 0.001f;
if (key == ESCAPE)
if (rtri>2)
{
rtri = -2.0f;
glutDestroyWindow(window);
rquad -= 15.0f;
glutSwapBuffers();
exit(0);
}
}
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH);
glutInitWindowSize(1000, 640);
glutInitWindowPosition(0, 0);
glutCreateWindow("TEST ");
glutDisplayFunc(DISPLAY);
}
glutIdleFunc(DISPLAY);
glutReshapeFunc(&ReSizeGLScene);
glutKeyboardFunc(&keyPressed);
glutMainLoop();
return 1;
Phần 3. chạy chương trình