1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng phần mềm hỗ trợ học sinh cấp 3 học khảo sát và vẽ đồ thị hàm số bằng opengl

74 634 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 74
Dung lượng 873,79 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xây dựng phần mềm hỗ trợ học sinh cấp 3 học khảo sát và vẽ đồ thị hàm số bằng opengl

Trang 1

BỘ CÔNG THƯƠNG

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

Trang 2

BÁO CÁO BÀI TẬP LỚN

MÔN ĐỒ HỌA MÁY TÍNH

ĐỀ TÀI: XÂY DỰNG PHẦN MỀM HỖ TRỢ HỌC SINH CẤP 3 HỌC

KHẢO SÁT VÀ VẼ ĐỒ THỊ HÀM SỐ BẰNG OPENGL.

Giảng viên hướng dẫn: ThS Vũ Minh Yến

Nhóm thực hiện: NHÓM 7 – HTTT- K5

NHÓM 7_H3TK5Lời mở đầu

Trang 3

Trong thời đại phát triển của ngành công nghệ thông tin ngày nay, việc ứng dụng công nghệ thông tin và cuốc sống có vai trò vô cùng ý nghĩa góp phần tích cực xâydựng một xã hội hiện đại, sánh vại với các nước hiện đại trên thế giới

Ngành đồ họa máy tính là một lĩnh vực trong công nghẹ thông tin đang được phát triển một cách mạnh mẽ, trong đó có việc ứng dụng công nghệ vẽ 3D trong xây dựng các đô thị hiện đại, hướng tới một tương lai hiện đại phát triển

Không những thế, đồ họa máy tính còn được ứng dụng trong game 3D, một loại hình giải trí thịnh hành trong thập niên chúng ta Và ứng dụng này giờ đây cũng được áp dụng trong việc học tập của học sinh, sinh viên, là một công cụ mạnh mẽ hỗ trợ cho việc dạy học của thầy cô và học sinh, sinh viên, nâng cao kết quả dạy vàhọc của thầy và trò

Nhận đề tà bài tập lớn đồ họa máy tính “ Xây dựng phần mềm hỗ trợ học sinh

cấp 3 học khảo sát và vẽ đồ thị hàm số bằng opengl” nhóm 19_HTTT_k5 chúng

em với 3 thành viên trong nhóm đã tích cực tìm hiểu về opengl OpenGl là một bộ phận mới của đồ họa máy tính nhưng tính năng của nó vô cùng mạnh mẽ trong công việc phác họa và vẽ 3D Nó được đánh giá cao trong việc lập trình 3D Qua thời gian nghiên cứu và tìm hiểu của các thành viên trong nhóm về đồ họa 3D opengl, chúng em đã có thể hiểu cơ bản về opengl và có thể lập trình căn bản opengl trong đề tài của nhóm

Tuy có tìm hiểu và học hỏi nhưng opengl là một chương trình mới lạ so với kiến thức đã học trên lớp, có nhiều phần chúng em cũng chưa rõ nên lập trình còn

sơ sài, thiếu sót, mong cô và các bạn đóng góp ý kiến để đề tài trở nên hoàn chỉnh

và cũng là cơ hội cho các bạn học hỏi, đúc kết thêm kho tàng kiến thức của mình

Chúng em xin chân thành cảm ơn!!

Nhóm 7_HTTT_K5

NỘI DUNG VÀ YÊU CẦU CỦA ĐỀ TÀI

1. Nội dung

Trang 4

Giúp khảo sát 2 hàm cơ bản trong chương trình cấp 3

+ Hàm đa thức bậc 2: y=ax2 + bx2 + c (a#0)

+ Hàm đa thức bậc 3: y=ax3 +bx2 + cx + d (a#0)

+ Hàm đa thức bậc 4( trùng phương): y=ax4 + bx2 + c (a#0)

Người dùng chỉ việc kích chuột phải và chọn loại hàm đa thức nào( có trong menu) và phần mềm sẽ tự động khảo sát và vẽ bảng biến thiên và đồ thị hàm số

Phần 1 Giới thiệu về OPENGL.

I Tìm hiểu về Opengl

1.Lịch Sử Phát Triển :

Trang 5

Nguyên thủy, GL do Silicon Graphics Incorporated (SGI) thiết kế để dùng chocác trạm làm việc (workstation) đồ họa IRIS của họ IRIS GL với các cấu hình phần cứng khác thì có vấn đề phát sinh.

OpenGL là kết quả nổ lực của SGI nhằm cải thiện tính tương thích của IRIS

GL Ngôn ngữ mới này có khả năng của GL, đồng thời “mở “ nghĩa là dễ dàng tương thích với các lọai cấu hình phần cứng, cũng như các hệ điều hành khác nhau Version1.0 của OPENGL được giới thiệu vào ngày 01/7/1992

Để bảo đảm tính “mở “, mọi sự nâng cấp OpenGL phải thông qua Ủy Ban Xem Xét Kiến Trúc OpenGL(OpenGL Architecture Review Board AEB) gồm các thành viên sáng lập là SGI, Digittal Equipment Corporation, IBM , Intel và

Microsoft.ARB hợp mỗi năm hai lần Open GL version1.1 được ARB thông qua vào tháng 12/1995

2 Opengl là gì?

Được phát triển đầu tiên bởi Silicon Graphic, Inc., là một giao diện phần phần mềm hướng thủ tục theo chuẩn công nghiệp hộ trợ đồ họa 3 chiều Cung cấp

khoảng 120 tác vụ để vẽ các primitive trong nhiều mode khác nhau Với OpenGL, bạn có thể tạo ra ảnh 3 chiều cả tĩnh và động với chất lượng cao

Là một giao diện phần mềm độc lập với phần cứng (hardware – independent

software interface) hộ trợ cho lập trình đồ họa Để làm được điều này, OpenGL không thực hiện các tác vụ thuộc về hệ điều hành cũng như không nhận dữ liệu nhập của người dùng (người dùng giao tiếp với OpenGL thông qua OpenGL API) Nó là lớp trung gian giữa người dùng và phần cứng Nghĩa là nó giao tiếp trực tiếp với driver của thiết bị đồ họa

3 Các hàm cơ bản trong OpenGL

Trong Opengl các hàm được bắt đầu bằng GL nằm trước tên hàm

void glutInit(int *argc, char **argv);

Khởi động GLUT , argc, argv là 2 đối số dòng lệnh của hàm main

void glutInitWindowPosition(int x, int y);

Trang 6

chung đây là điểm bên trái, phía trên của cửa sổ, từ đây ta kéo xuống phía dưới, bên phải là được 1 cửa sổ Đơn vị của x, y là pixel.

void glutInitWindowSize(int width, int height);

Khởi tạo kích thước cửa sổ với chiều dài và chiều rộng, cộng thêm 1 điểm bắt đầu mới nói ở trên nữa, bạn đã tưởng tượng ra đc 1 cái cửa sổ chưa

void glutInitDisplayMode(unsigned int mode)

Định nghĩa mode hiển thị, chỉ ra màu của mode và số + kiểu của buffer

+ GLUT_RGBA or GLUT_RGB : cửa sổ màu RGBA, đây là mode mặc định

+ GLUT_SINGLE : cửa sổ buffer đơn

+ GLUT_DOUBLE : cửa sổ buffer đôi

+ GLUT_DEPTH : cửa sổ buffer sâu

int glutCreateWindow(char *title);

Tạo cửa sổ có tiêu đề title

void glutDisplayFunc(void (*func)(void));

Hàm này báo cho GLUT biết phải trình diễn theo hàm nào , đối số của nó là mộtcon trỏ hàm trả về kiểu void

Các giá trị R,G,B trong OpenGL thì >=0.0 (không có) và <=1.0 (độ sáng cực đại)

Ba tham số đầu là màu đỏ xanh lá cây và xanh da trời, còn tham số thứ 4 là độ sángtối của window

Hàm glClear() mới thực sự xoá window, nó có những hằng số xác định.Có trường hợp có những hàm chưa được chạy đến khi kết thúc chương trình, để tránh trường hợp này hàm glFlush() được gọi, nó sẽ thực hiện tất cả các hàm chưa được chạy vàkết thúc chương trình

Trang 7

Dùng glClear*() để định màu xóa cho các buffer.

Sau đó glClear(GLbitfied mask) để xóa buffer tương ứng với mask

Tham số của hàm glClear() có thể nhận từ 1 đến 4 giá trị sau:

Buffer Name

Color buffer GL_COLOR_BUFFER_BIT

Depth buffer GL_DEPTH_BUFFER_BIT

Accumulation buffer GL_ACCUM_BUFFER_BIT

Stencil buffer GL_STENCIL_BUFFER_BIT

Để định màu xóa cho mỗi buffer, ta dùng các hàm glClear*() như sau:

glClearColor(), glClearDepth(), glClearAccum(), glClearStencil()

Buộc việc vẽ hoàn tất

Đối với các ứng dụng đồ họa chạy qua mạng, trong đó client chạy phần chương trình chính và hiển thị kết quả đến server, thường thì client sẽ gom nhiều lệnh vẽ vào một packet, sau đó mới gửi đến server Nhưng làm sao để client biết được khi nào thì ảnh trên server đã vẽ xong và gửi tiếp packet khác? Do đó nó sẽ đợi đến khinào packet đầy mới gửi tiếp Nhưng packet có thể không bao giờ đầy vì việc vẽ bên client đã hoàn tất và như vậy server không thấy được trọn vein kết quả vẽ OpenGL cung cấp hàm glFlush() để chúng ta giải quyết vấn đề này Lệnh này buộcclient gửi packet ngay cả khi packet chưa đầy Lệnh này không đợi cho việc vẽ hoàn tất, nó buộc việc vẽ phải bắt đầu thực hiện và do đó đảm bảo tất cả các lệnh trước đó thực hiện trong một thời gian giới hạn Nếu máy chạy local thì ta không cần dùng lệnh này

Một lệnh khác cũng gần giống là lệnh glFinish(), nó thực hiện chức năng giống glFlush() nhưng nó đợi phản hồi từ phần cứng đang vẽ hoặc mạng để khẳng định việc vẽ đã hoàn tất Lệnh này hữu dụng khi ta muốn đồng bộ hóa các phần vẽ Ví dụ ta muốn một phần nào đó vẽ hoàn tất xong thì mới thực hiện các phần khác Nhưng lạm dụng lệnh này sẽ làm chậm chương trình vì nó phải đợi phản hồi

Phần II Code và chương trình chạy đồ thị

Trang 8

Dưới đây là code để chạy DTHS cần vẽ.

#include<windows.h>

#include<gl/GL.h>

#include<gl/glut.h>

#include<String.h>

// -**************THIET LAP CUA

SO*********** -void setWindow(float left, float right, float bottom, float top)

{ glMatrixMode(GL_PROJECTION);// thiet lap ma tran

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();// dua ma tran ve ma tran don vi

gluOrtho2D(left,right,bottom,top);

}

// -************THIET LAP KHUNG

NHIN******** -void setViewport(int left, int right, int bottom, int top)

Trang 9

glColor4d(0.6,0.8,0.4,1.0);// -*****TAO MAU CHO NET

glClear(GL_COLOR_BUFFER_BIT);// -******XOA MAN HINH TRONG

setWindow(-1.80,1.80,-1.80,1.80);// -******CUA

setViewport(-50,600,-90,670); // -****KHUNG

// -*************CAC BUOC VE DO

vediem("NHOM 19-H3TK5",-1,1); vediem("* CHAO MUNG CAC BAN DEN VOI BAI GIANG VE HAM SO.",-0.1,0.5); vediem("* BAI GIANG DUOC THUC HIEN BOI NHOM 19-H3TK5.",-0.1,0.3); vediem("* CHUC CAC BAN CO MOT BUOI HOC VUI VE.",-0.1,0.1); vediem("* XIN VUI LONG NHAP PHAI CHUOT VA CHON MUC CHO BAI HOC.",-0.1,-0.1); vediem("THANK YOU!!!",0.8,-0.8);

glFlush(); }

// -************ CAC BUOC VE DO

THI******* -void hamso0() { glClearColor(0.0,0.0,0.0,0.0);// -***********XOA

glShadeModel(GL_SMOOTH); glColor4d(0.9,0.7,0.5,0.2);// -*****TAO MAU CHO NET

glClear(GL_COLOR_BUFFER_BIT);// -******XOA MAN HINH TRONG

setWindow(-1.50,1.50,-1.50,1.50);// -******CUA

setViewport(-50,600,-90,670); // -****KHUNG

// -*************CAC BUOC VE DO

vediem("* CAC BUOC VE DTHS *",-0.7,1.0); vediem("* B1: Tim TXD cua ham so",-0.1,0.9);

vediem(" - Voi ham bac 3,4 co TXD la |R",-0.1,0.8);

vediem(" - Voi ham y=(ax+b)/(cx+d) thi co TXD la |R\{-d/c}",-0.1,0.7); vediem("* B2: Khao sat su bien thien cua ham so",-0.1,0.6);

vediem(" Tinh y',giai PT y'=0",-0.1,0.5);

Trang 10

vediem(" Lap bang bien thien",-0.1,0.3);

vediem(" Tu bang bien thien suy ra",-0.1,0.2);

vediem(" - Cac khoang dong bien, ngich bien cua ham so",-0.1,0.1);

vediem(" - Cac diem cuc tri(neu co) cua ham so",-0.1,0.0);

vediem("* B3: Ve DTHS",-0.1,-0.1);

vediem(" Tim giao diem cua DT voi truc Oy( cho x=0, tinh y",-0.1,-0.2); vediem(" Tim giao diem cua DT voi truc Ox( cho y=0, tinh x",-0.1,-0.3); vediem(" bang cach gpt F(x)=0",-0.1,-0.4);

vediem(" Chu y den tinh doi xung cua do thi",-0.1,-0.5);

vediem(" - DTHS bac 3 nhan trung diem cua cuc dai va cuc tieu ",-0.1,-0.6); vediem(" lam TDX",-0.1,-0.7);

vediem(" - DTHS bac 4(trung phuong) nhan Oy lam truc DX",-0.1,-0.8); vediem(" - DTHS nhat bien nhan giao diem 2 duong tiem can ",-0.1,-0.9); vediem(" lam tam doi xung",-0.1,-1.0);

Trang 14

vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);

vediem("Voi A>0 va y'=0 co nghiem kep",1.05,1);

vediem("Do thi co 1 diem uon",1.05,0.9);

// -*************CAC BUOC VE DO // -**********VE HAM SO************ -// -**************NHAP DANG DO THI CAN VE******* - float x=-0.45;

y=(a*x*x*x)+(b*x*x)+c*x+d;

glBegin(GL_POINTS);

glVertex2f(x,y);

glEnd();

Trang 15

glEnd();

glBegin(GL_LINES);

Trang 19

vediem("-4",-0.6,-0.05);

vediem("-5",-0.75,-0.05);

vediem("-6",-0.9,-0.05);

vediem("-7",-1.05,-0.05);

vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);

vediem("Voi A>0 va pt y'=0 vo nghiem",1.05,1);

vediem("Do thi khong co diem uon",1.05,0.9);

// -*************CAC BUOC VE DO // -**********VE HAM SO************ -// -**************NHAP DANG DO THI CAN VE******* - float x=-0.35;

glBegin(GL_LINES);// -****NOI DIEM THANH DOAN THANG

glVertex2f(0.0,0.0);// -****DI CHUYEN DEN GOC O DE VE

glVertex2f(-1.2,0.0);// -****VE

glVertex2f(0.0,0.0);

Trang 20

glEnd();

glBegin(GL_LINES);

glVertex2f(0.0,0.0);

glVertex2f(0.0,1.1);// -*********VE glVertex2f(0.0,0.0);

Trang 21

glEnd();

glBegin(GL_LINES);

glVertex2f(0,0.4);

Trang 22

vediem("2",0.05,0.4);

Trang 23

vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);

vediem("Voi A>0 va y'=0 co 2 nghiem phan biet",1.05,1);

vediem("Do thi cat truc ox tai 3 diem phan biet",1.05,0.9);

// -*************CAC BUOC VE DO // -**********VE HAM SO************ -// -**************NHAP DANG DO THI CAN VE******* - float x=-0.37;

Trang 24

glBegin(GL_LINES);// -****NOI DIEM THANH DOAN THANG

glVertex2f(0.0,0.0);// -****DI CHUYEN DEN GOC O DE VE

Trang 25

// -******** CHIA TOA DO CHO DO glBegin(GL_LINES);// -**********DANH DAU DO THI****** - glVertex2f(0.15,0);// -********DANH DAU TRUC OX********** - glVertex2f(0.15,0.02);

Trang 28

vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);

vediem("Voi A<0 va phuong trinh y'=0 co 2 nghiem phan biet",0.8,1);

vediem("Do thi cat truc ox tai 3 diem phan biet",0.8,0.9);

// -*************CAC BUOC VE DO // -**********VE HAM SO************ - // -**************NHAP DANG DO THI CAN VE******* - float x=-0.55;

Trang 31

glVertex2f(-1.05,0.02);

glEnd();

glBegin(GL_LINES);// -********DANH DAU TRUC glVertex2f(0,0.2);// -********DANH DAU TRUC DUONG OY**** - glVertex2f(0.02,0.2);

Trang 32

glEnd();

// -**********DANH DAU DIEM CHO DO glColor4d(0.9,0.6,0.3,0.2);// -*****TAO MAU CHO NET VE****** - // -*********************DANH DAU TRUC OY**************- vediem("1",0.05,0.2);

vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);

vediem("Voi A<0 va pt y'=0 co nghiem kep",1.05,1);

vediem("Do thi co 1 diem uon",1.05,0.9);

Trang 34

glVertex2f(0.0,0.0);

glVertex2f(0.0,1.1);// -*********VE glVertex2f(0.0,0.0);

Trang 37

vediem("Do thi ham so Y=AX^3+BX^2+CX+D",1.05,1.1);

vediem("Voi A<0 va pt y'=0 vo nghiem",1.05,1);

vediem("Do thi khong co diem uon",1.05,0.9);

Trang 39

// chia cac diem cho do thi

glBegin(GL_LINES);//danh dau do thi

glVertex2f(0.15,0);//danh dau truc ox

Trang 40

glBegin(GL_LINES);//danh dau do thi

glVertex2f(0,0.2);//danh dau truc duong oy

glBegin(GL_LINES);//danh dau do thi

glVertex2f(0,-0.2);//danh dau truc am oy

glVertex2f(0.02,-0.2);

glVertex2f(-0.02,-0.2);

Trang 41

// danh dau diem cho do thi

glColor4d(0.8,0.3,0.2,0.6);// tao mau cho net ve

//danh dau truc oy

Trang 43

// chia cac diem cho do thi

glBegin(GL_LINES);//danh dau do thi

glVertex2f(0.15,0);//danh dau truc ox

Ngày đăng: 04/12/2015, 12:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w