TRƯỜNG ĐHCN VINHKHOA : CÔNG NGHỆ BÀI TẬP:VẼ OTO CHẠY TRÊN MẶT PHẲNG NGANG BỘ MÔN: ĐỒ HỌA MÁY TÍNH OPENGL 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 :K
Trang 1TRƯỜNG ĐHCN VINH
KHOA : CÔNG NGHỆ
BÀI TẬP:VẼ OTO CHẠY TRÊN MẶT PHẲNG NGANG
BỘ MÔN: ĐỒ HỌA MÁY TÍNH (OPENGL)
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
Trang 2NỘ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
Trang 3I.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
Trang 4Nền tảng và môi trường phát triển
Trang 5II.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
Trang 62 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;
Trang 7// đị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);
}
Trang 8//banh xe
void drawBall(void) {
glColor3f(1.0, 1.0, 1.0);
glTranslatef(X, Y, Z);//tinh tien
glRotatef (X, X, Y, Z);//quay
glutSolidSphere(0.3, 20, 20);
glTranslatef(X + 2, Y, Z);
glutSolidSphere(0.3, 20, 20); //hinh cau dac
}
float X = -0.5f;
float Y = 0.0f;
float Z = 0.0f;
Trang 9glBegin(GL_QUADS); //glBegin(GL_LINE_STRIP)
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glVertex3f(2.0f, 0.0f, 0.0f);
glVertex3f(-1.0f, 0.0f, 0.0f);
void DISPLAY()
{
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(rtri, 0.0f, -6.0f);
Trang 10glEnd();
drawBall();
rtri += 0.001f;
if (rtri>2)
rtri = -2.0f;
rquad -= 15.0f;
glutSwapBuffers();
}
void keyPressed(unsignedcharkey, intx, inty)
{
if (key == ESCAPE)
{
glutDestroyWindow(window);
exit(0);
}
}
Trang 11int 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);
}
Trang 12glutReshapeFunc(&ReSizeGLScene);
glutKeyboardFunc(&keyPressed);
glutMainLoop();
return 1;
Trang 13Phần 3 chạy chương trình