ĐẠI HỌC CÔNG NGHIỆP VINH
KHOA CÔNG NGHỆ
NGÀNH CÔNG NGHỆ THÔNG TIN
Bộ môn: ĐỒ HỌA MÁY TÍNH
Đề tài: Mô phỏng dao động con lắc đơn
Sv:Trần Xuân Sang
Sv: Phan Thế Đạt
Sv: Hồ Tuấn Anh
Gvhd: Phan Thị Hiền
I.Giới thiệu Opengl
II.Giới thiệu đề tài
Nội dung
III. Demo
IV. Kết luận
GiỚI THIỆU VỀ OPENGL
•
OpenGL (tếng Anh Open Graphics Library) là một têu chuẩn kỹ thuật đồ họa có
mục đích định ra một giao diện lập trình ứng dụng ( API) đồ họa 3 chiều.
OpenGL cũng có thể được dùng trong các ứng dụng đồ họa 2 chiều. Giao diện
lập trình này chứa khoảng 250 hàm để vẽ các cảnh phức tạp từ những hàm đơn
giản. Nó được dùng rộng rãi trong các trò chơi điện tử. Ngoài ra nó còn dùng
trong các ứng dụng CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông
tn, phát triển trò chơi
GIỚI THIỆU ĐỀ TÀI
•
•
Mô phỏng hoạt động con lắc đơn
Click chuột để
con lắc đơn
hoạt động.
GIỚI THIỆU ĐỀ TÀI
•
Nền tảng phát triển
Giải quyết bài toán
Giải quyết bài toán
– Ý TƯỞNG
• Sử dung DrawCircle Vẽ 2 hình tròn
•
•
•
•
Sử dụng LINE để vẽ sợi dây nối
Dùng hàm if để giới hạn vị trí lắc
Sử dụng hàm glTranstale để lắc
Sử dụng hàm mouse để thao tác chuột
Giải quyết bài toán
•
•
Cài đặt opengl vào Visual c++
Tham chiếu thư viện Opengl
#include<math.h> #include<iostream>
#include<glut.h>
Giải quyết bài toán
•
Khai báo biến toàn cục
float tdl=0.1;
float A=135;
Giải quyết bài toán
- Hàm DrawCIrcle để vẽ hình tròn
•
•
•
•
•
•
•
•
•
•
•
•
•
float drawCircle(float segments,float radius,float sx,float sy)
{
glBegin(GL_LINE_LOOP);
for(int i=0;i
{
float theta=2.0*3.142*float(i)/float(segments); //get the current A
float x=radius*cos(theta);
float y=radius*sin(theta);
glVertex2f(x+sx,y+sy);
}
glEnd();
return 0;
}
Giải quyết bài toán
•
Gọi hàm Draw để vẽ các thành phần của con lắc đơn:
void draw(float x1,float y1,float A)
float segments=150;
float radius=6.0;
glLineWidth(3);
glColor3f(1,1,0);//màu vàng
drawCircle(segments,radius,x1,y1);
Vẽ hình tròn gốc
Giải quyết bài toán
Vẽ đường nối 2 đường tròn
glColor3f(0,0,1);//màu xanh
glBegin(GL_LINES);
glVertex2f(x1,-1*(radius)+0.2);
glVertex2f(x2,y2);
glEnd();
Giải quyết bài toán
•
Vẽ hình tròn tượng trưng quả lắc
glColor3f(0,1,1);//màu xanh nhạt
drawCircle(segments,radius2,x2,y2);
Giải quyết bài toán
•
Hàm hiển thị
•
void display()
•
{
•
glClearColor(0,0,0,1);
•
glClear(GL_COLOR_BUFFER_BIT);
•
glLoadIdentty();
•
glTranslatef(-5,15,-30);
•
glColor3f(1,1,1);
Giải quyết bài toán
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Giới hạn lặp
•
}
if(A>310)
{
A=310;
tdl=-tdl;
}
if(A<210)
{
A=210;
tdl=-tdl;
}
A += tdl;
draw(0,0,A);
glutSwapBuffers();
Giải quyết bài toán
•
Hàm định dạng thao tác chuột
void glutMouseFunc(int button, int state, int x, int y)
{
if(button==GLUT_RIGHT_BUTTON && state == GLUT_DOWN)
{
glutIdleFunc(display);
}
}
Nhấp chuột phải con lăc sẽ lắc đều
Giải quyết bài toán
•
•
•
•
•
•
•
•
Cuối cùng là main chương trình
int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(800,600);
glutInitWindowPositon(0,0);
glutCreateWindow("con lac don");
•
•
•
•
•
glutDisplayFunc(display);
glutMouseFunc(glutMouseFunc);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
DEMO
KẾT LUẬN
THANKS FOR WATCHING