5 Hiện thực chương trình
3.21 Hai mặt phẳng vng góc
Hình lăng trụ đứng, hình hộp chữ nhật, hình lập phương
Hình lăng trụ đứng là hình lăng trụ đứng có đáy là đa giác đều. Hình hộp đứng là hình lăng trụ đứng có đáy là hình bình hành. Hình hộp chữ nhật là hình hộp đứng có đấy là hình chữ nhật. Hình lập phương là hình hộp có tất cả các mặt là hình vng.
3.1 Lý thuyết cơ bản về hình học 11
Hình 3.22: Hình lăng trụ đứng
Hình 3.23: Hình hộp chữ nhật
Hình 3.24: Hình lập phương
Hình chóp đều và hình chóp cụt đều
3.2 OpenGL
tạo với mặt đáy các góc bằng nhau.
Hình chóp cụt đều: Phần của hình chóp đều nằm giữa đáy và một thiết diện song song với đáy gọi là hình chóp cụt đều.
Hình 3.25: Hình chóp đều
Hình 3.26: Hình chóp cụt đều
3.2 OpenGL
3.2.1 OpenGL
OpenGL (Open Graphics Library) là một API đa nền tảng, đa ngôn ngữ cho render đồ họa vector 2D và 3D. OpenGL thường được sử dụng để tương tác với bộ
3.2 OpenGL
xử lý đồ họa (GPU), nhằm đạt được tốc độ render phần cứng.
Silicon Graphics, Inc. (SGI) Bắt đầu phát triển OpenGL năm 1991 và phát hành nó vào 30 tháng 6 năm 1992; 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 tin, video game. Từ năm 2006, OpenGL được quản lý bởi consortium công nghệ phi lợi nhuận Khronos Group. Đối thủ chính của OpenGL là DirectX của Microsoft.
Với OpenGL, một ứng dụng có thể tạo ra các hiệu ứng tương tự trong bất kỳ hệ điều hành nào sử dụng các bộ điều hợp đồ họa của OpenGL. Có thể nói, OpenGL giống như một ngơn ngữ đồ họa độc lập và có khả năng tương thích với mọi nền tảng, mọi kiểu máy tính, thậm chí cả trên những máy tính khơng hỗ trợ đồ họa cao cấp.
3.2.2 Cơ chế hoạt động của OpenGL
OpenGL chỉ định một tập hợp các “lệnh” hoặc các hàm phải được thực thi ngay lập tức. Trong đó mỗi lệnh phụ trách một hành động vẽ hoặc tạo ra các hiệu ứng đặc biệt nào đó. Một danh sách các lệnh như vậy có thể được tạo ra để tạo các hiệu ứng lặp đi lặp lại OpenGL độc lập với các đặc tính của mỗi hệ điều hành, nhưng cung cấp các quy trình “glue” đặc biệt cho mỗi hệ điều hành, điều này cho phép OpenGL hoạt động được trong mơi trường của hệ thống đó.
OpenGL chứa đựng một số lượng lớn các tính năng tích hợp được chỉ định và yêu cầu thông qua API, bao gồm loại bỏ bề mặt ẩn, trộn alpha, chống hiệu ứng răng cưa, làm mịn, tính tốn pixel, theo dõi và biến đổi các mơ hình, và các hiệu ứng về khơng khí (sương mù, khói và khói mù).
3.2.3 Tác dụng của OpenGL
• Đơn giản hóa việc tương tác giữa các mơ hình khơng gian 3 chiều bằng một giao diện lập trình thống nhất.
• Hỗ trợ tối đa các chức năng của giao diện OpenGL bằng cách ép buộc các phần cứng 3 chiều khác nhau phải tương thích. Ngay cả khi khơng thể ép phần cứng hỗ trợ hồn tồn, OpenGL có thể u cầu hệ thống sử dụng thêm
3.2 OpenGL
sức mạnh phần mềm để xử lý.
• Tiêu chuẩn OpenGL nhận các nguyên hàm hình học như điểm, đường thẳng và đa giác rồi chuyển thành các điểm đồ họa (pixel) trên màn hình. Quá trình này được thực hiện thông qua luồng ống dẫn đồ họa (thuật ngữ graphics pipeline). Một tên gọi khác của OpenGL cũng được giới kỹ thuật chia sẻ đó là bộ máy trạng thái OpenGL.
Ưu điểm
• Miễn phí
• Cho phép can thiệp sâu vào GPU để tối ưu hóa hiệu suất.
• Tương thích đa nền tảng: Windows, iOS, MacOS, Linux hay thậm chí là cả nền tảng di động.
Nhược điểm
• Khó khăn khi xây dựng các ứng dụng đồ họa lớn và phức tạp.
• OpenGL phụ thuộc vào phần cứng. Nếu phần cứng không hỗ trợ OpenGL, chúng ta khơng thể sử dụng nó.
3.2.4 Các hàm của OpenGL được sử dụng trong chươngtrình trình 1 v o i d WINAPI g lC l e a r ( 2 G L b i t f i e l d mask 3 ) ; 1 v o i d WINAPI g l C l e a r C o l o r ( 2 G L c l a m p f red , 3 G L c l a m p f green , 4 G L c l a m p f blue , 5 G L c l a m p f alpha 6 ) ; 1 v o i d WINAPI g l M a t r i x M o d e ( 2 GLenum mode 3 ) ;
3.2 OpenGL 1 v o i d WINAPI g l L o a d I d e n t i t y (v o i d) ; 1 v o i d g l C o l o r 3 f v (c o n s t G L f l o a t * v ) ; 1 v o i d WINAPI g l C o l o r 4 f v ( 2 c o n s t G L f l o a t * v 3 ) ; 1 v o i d WINAPI g l C o l o r 4 f ( 2 G L f l o a t red , 3 G L f l o a t green , 4 G L f l o a t blue , 5 G L f l o a t alpha 6 ) ; 1 v o i d WINAPI g l T r a n s l a t e f ( 2 G L f l o a t x , 3 G L f l o a t y , 4 G L f l o a t z 5 ) ; 1 v o i d WINAPI g lF l u s h (v o i d) ; 2 v o i d WINAPI g lB e g i n ( 3 GLenum mode 4 ) ; 1 v o i d WINAPI glEnd (v o i d) ; 2 v o i d WINAPI g l E n a b l e ( 3 GLenum cap 4 ) ; 1 v o i d WINAPI glHint ( 2 GLenum target , 3 GLenum mode 4 ) ; 1 v o i d WINAPI g l V e r t e x 2 f ( 2 G L f l o a t x , 3 G L f l o a t y 4 ) ; 1 v o i d WINAPI g l V e r t e x 3 f ( 2 G L f l o a t x , 3 G L f l o a t y , 4 G L f l o a t z 5 ) ; 1 v o i d WINAPI g l P o i n t S i z e ( 2 G L f l o a t size 3 ) ; 1 v o i d WINAPI g l L i n e W i d t h ( 2 G L f l o a t width
3.2 OpenGL 1 v o i d WINAPI g l L i n e S t i p p l e ( 2 GLint factor , 3 G L u s h o r t p at t e r n 4 ) ; 1 v o i d WINAPI g l D i s a b l e ( 2 GLenum cap 3 ) ; 1 v o i d WINAPI g l P o l y g o n M o d e ( 2 GLenum face , 3 GLenum mode 4 ) ; 1 v o i d WINAPI g l P o l y g o n O f f s e t ( 2 G L f l o a t factor , 3 G L f l o a t units 4 ) ; 1 v o i d WINAPI g l B l e n d F u n c ( 2 GLenum sfactor , 3 GLenum d fa c t o r 4 ) ; 1 v o i d WINAPI g l D e p t h F u n c ( 2 GLenum func 3 ) ; 1 v o i d WINAPI g l D e p t h M a s k ( 2 G L b o o l e a n flag 3 ) ; 1 v o i d WINAPI g l u L o o k A t ( 2 G L d o u b l e eyex , 3 G L d o u b l e eyey , 4 G L d o u b l e eyez , 5 G L d o u b l e centerx , 6 G L d o u b l e centery , 7 G L d o u b l e centerz , 8 G L d o u b l e upx , 9 G L d o u b l e upy , 10 G L d o u b l e upz 11 ) ; 1 v o i d WINAPI g l V i e w p o r t ( 2 GLint x , 3 GLint y , 4 G L s i z e i width , 5 G L s i z e i height 6 ) ; 1 v o i d WINAPI g lO r t h o ( 2 G L d o u b l e left ,
3.3 MFC (Microsoft Foundation Classes)3 G L d o u b l e right , 3 G L d o u b l e right , 4 G L d o u b l e bottom , 5 G L d o u b l e top , 6 G L d o u b l e zNear , 7 G L d o u b l e zFar 8 ) ;
3.3 MFC (Microsoft Foundation Classes)
• MFC là thư viện cung cấp các lớp (class, OOP), dùng trong lập trình trên Windows.
• Được xây dựng trên cơ sở các hàm thư viện API của Windows, đã được đóng gói.
• MFC tạo ra một Application Framework giúp phát triển ứng dụng: Tạo ra kiến trúc của ứng dụng một cách khoa học, giảm bớt nhiều phần của Windows API.
• Trọng tâm của MFC là các khái niệm về Document và View Document và View hoạt động song song với nhau:
• Chứa, quản lý và hiển thị dữ liệu đặc trưng riêng của ứng dụng. • Cung cấp một giao diện để người dùng có thể thao tác với dữ liệu. • Tham gia viết và đọc tệp tin.
• Xử lý hầu hết các lệnh và thông điệp trong ứng dụng.
Document liên quan đến việc quản lý và lưu trữ dữ liệu thông qua các biến thành viên của lớp Document.
View là một khung cửa sổ mà qua đó người dùng tương tác với Document, sử dụng các biến trên để truy cập dữ liệu cho việc hiển thị và cập nhật.
3.3 MFC (Microsoft Foundation Classes)
SDI và MDI là 2 kiểu thiết kế hệ thống theo hướng Document-View, cả hai có cùng kiến trúc nhưng lại khác nhau về mục đích, cách hoạt động.
3.3.1 Single-Document Interface (SDI):
SDI là một dạng kiến trúc Document-View. Chỉ cho phép tập trung hiển thị một cửa sổ tài liệu tại một thời điểm.
Ví dụ: Notepad, paint
3.3.2 Multiple-Document Interface (MDI):
MDI là một dạng kiến trúc Document-View. Ở đây cho phép mở nhiều cửa sổ khung tài liệu tại một thời điểm. Ứng dụng MDI có một khung cửa sổ chính, trong đó lại chứa nhiều cửa sổ con, mỗi cửa sổ con chứa một tài liệu riêng biệt. Các cửa sổ trong MDI thể hiện các loại tài liệu có thể giống hoặc khác nhau tùy vào mục đích lập trình.
4 Thiết kế chương trình
4.1 Kiến trúc hệ thống Kiến trúc Document-View MFC (MDI)
4.1 Kiến trúc hệ thống Luồng hoạt động
• Ứng dụng (CWinApp) tạo ta CDocTemplate
• CDocTemplate tạo ra CDocument và Frame Window (CFrameWnd) • Frame window tạo ra View (CView)
CWinApp:
• Class tương ứng của chương trình: class CGeosApp
• Lớp này dùng để quản lý các hàm xử lý chung ở mức ứng dụng như tạo ra các đối tượng cửa sổ chính (CFrameWnd), đối tượng quản lý tài liệu (CDocument), đối tượng quản lý vùng nhìn (CView) và quan hệ giữa những
đối tượng này
CFrameWnd:
• Class tương ứng của chương trình: class CChildFrame • Là khung cửa sổ chứa lớp CView
• Hỗ trợ liên kết giữa một hoặc nhiều view và document.
CMultiDocTemplate:
• Class tương ứng của chương trình: class CMultiDocTemplate • Hỗ trợ điều phối một hoặc nhiều tài liệu hiện có của đối tượng
• Quản lý việc tạo các đối tượng view, document và kiểu của đối tượng được tạo.
CDocument
• Class tương ứng của chương trình: class CGeosDoc
• Chứa các hàm quản lý tài liệu của ứng dụng, thực hiện các thao tác như đọc, ghi tệp tin
4.1 Kiến trúc hệ thống CView
• Class tương ứng của chương trình: class CGeosView
• Chứa các hàm quản lý vùng nhìn, quản lý phần hiển thị tài liệu cho người dùng xem, hầu hết các tác vụ vẽ đều tập trung ở lớp này
• Nơi cung cấp một góc nhìn đầy đủ về dữ liệu do người lập trình xác định. Giúp hiển thị tài liệu, đóng vai trị trung gian giữa tài liệu và người dùng, giúp thao tác với tài liệu.
Luồng thực thi khi mở và lưu một bài tốn