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

Tìm hiểu lập trình python và pyopengl

37 105 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

Tiêu đề Tìm Hiểu Lập Trình Python Và PyOpenGl
Người hướng dẫn Th.S Hồ Trung Mỹ
Trường học Đại Học Bách Khoa
Chuyên ngành Điện - Điện Tử
Thể loại Báo Cáo Thực Tập Tốt Nghiệp
Năm xuất bản 2020
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 37
Dung lượng 516,15 KB

Cấu trúc

  • BỘ MÔN ĐIỆN TỬ

  • GVHD: Th.S Hồ Trung Mỹ

  • TP. HỒ CHÍ MINH, THÁNG 09 NĂM 2020

  • MỤC LỤC

  • LỜI MỞ ĐẦU

    • 1. TỔNG QUAN VỀ NGÔN NGỮ PYTHON

      • 1.1 Giới thiệu Python

      • 1.2 Cú pháp ngôn ngữ

        • Kiểu số

        • Khai báo hàm theo cú pháp sau:

      • 1.3 Phân chia module

      • 1.4 Xử lý tập tin

    • 2. GIỚI THIỆU VỀ PYOPENGL

      • 2.1 Tìm hiểu về OpenGl

      • 2.2 Cấu trúc tập lệnh

      • 2.3 Ứng dụng của OpenGL

        • Chiếu phối cảnh (Perspective Projection)

        • Chiếu trực giao (Orthogonal Projection)

    • 3. MỘT SỐ DEMO CƠ BẢN

      • 3.1 Vẽ khối lập phương xoay

      • 3.2 Tương tác với chuột và bàn phím

      • 3.3 Thao tác với Model View và thư viện Random

    • 4. ĐỀ XUẤT CÁC ĐỀ TÀI LIÊN QUAN

    • 5. TÀI LIỆU THAM KHẢO

    • 6. PHỤ LỤC

Nội dung

BÁO CÁO THỰC TẬP TỐT NGHIỆP Đề Tài: Tìm Hiểu Lập Trình Python Và PyOpenGl GVHD: Th.S Hồ Trung Mỹ TP. HỒ CHÍ MINH, THÁNG 09 NĂM 2020 LỜI CẢM ƠN Chúng em xin cảm ơn chân thành tới các thầy cô Khoa Điện- Điện Tử Trường ĐH thầy cô. Chúng em xin chân thành cảm ơn! Tp. Hồ Chí Minh, ngày 08 tháng 09 năm 2020. Sinh viên MỤC LỤC LỜI MỞ ĐẦU 3 1. TỔNG QUAN VỀ NGÔN NGỮ PYTHON 4 1.1 Giới thiệu Python 4 1.1.1. Đặc điểm 4 1.1.2. Ưu điểm 4 1.1.3. Nhược điểm 5 1.2 Cú pháp ngôn ngữ 5 1.2.1. Biến số và toán tử 5 1.2.2. Kiểu dữ liệu 6 1.2.3. Cấu trúc lặp và rẽ nhánh 7 1.2.4. Hàm và Class 7 1.3 Phân chia module 9 1.3.1. Các loại module 9 1.3.2. Cách sử dụng module 9 1.4 Xử lý tập tin 10 1.4.1. Mở file 10 1.4.2. Đọc file 11 1.4.3. Ghi vào file 11 1.4.4. Đóng file 11 1.4.5. Đổi tên/ xóa file 11 2. GIỚI THIỆU VỀ PYOPENGL 12 2.1 Tìm hiểu về OpenGl 12 2.2 Cấu trúc tập lệnh 13 2.3 Ứng dụng của OpenGL 14 2.3.1. Vẽ các đối tượng hình học 14 2.3.2. Thao tác trên ModelView 16 2.3.3. Thao tác trên Projection 17 2.3.4. Thao tác trên Viewport 18 2.3.5. Thiết lập mô hình shading 19 2.3.6. Tương tác với người dùng 20 3. MỘT SỐ DEMO CƠ BẢN 23 3.1 Vẽ khối lập phương xoay 23 3.2 Tương tác với chuột và bàn phím 24 3.3 Thao tác với Model View và thư viện Random 25 3.4 Tạo một khối cầu mặt lưới từ hai mặt phẳng cắt 26 3.5 Xây dựng mô hình Trái Đất quay xung quanh Mặt Trời 26 3.6 Thiết lập mô hình Smooth-Shading cho một tam giác 26 4. ĐỀ XUẤT CÁC ĐỀ TÀI LIÊN QUAN 26 5. TÀI LIỆU THAM KHẢO 26 6. PHỤ LỤC 26 LỜI MỞ ĐẦU Thật rõ ràng để nhận thấy rằng nếu chỉ hiển thị thông tin chỉ với các ký hiệu, chữ cái, chữ số thì sẽ không thể hấp dẫn và dễ hiểu như khi có thêm biểu diễn bằng Kỹ thuật đồ hoạ. Đây cũng là công cụ không thể thiếu trong các ngành khoa học kỹ thuật, giáo dục, nghệ thuật, giải trí, quảng cáo…(để diễn đạt máy móc thiết bị, kiến trúc, cấu trúc cơ thể, thông tin thiên văn địa lý, hình ảnh minh hoạ..). Cùng với sự phát triển của tin học, kỹ thuật đồ họa trên máy vi tính, ngày càng trở nên tinh xảo. Giao diện các phần mềm ngày nay trở nên thân thiện, đẹp mắt nhờ các thể hiện đồ họa. Sự hỗ trợ của tin học cho các ngành khác trở nên đắc lực hơn nhờ khả năng đồ họa vi tính. Ngôn ngữ lập trình (Programming language) là dạng ngôn ngữ máy tính sử dụng để phát triển các chương trình phần mềm, tập lệnh hoặc các chuẩn hóa theo một hệ thống các quy tắc riêng để máy tính thực thi. Hiện nay có rất nhiều ngôn ngữ lập trình đang được sử dụng như JavaScript, Java, C/C++,Python,…Python có cú pháp khá đơn giản, tốc độ xử lý nhanh, mượt, không quá kén người sử dụng, nhất là phù hợp với những người học lập trình game và ứng dụng. Một điều đáng kinh ngạc đối với Python là tốc độ phát triển nhanh nhất hiện nay. Trong thành công của kỹ thuật đồ họa ngày nay không thể không nói đến sự phát triển vượt bậc của tốc độ phần cứng lẫn hệ điều hành. Nhưng bản thân kỹ thuật đồ họa thì có bước tiến nhảy vọt từ những phép tính toán học phức tạp đến những thư viện đồ họa được tạo sẳn. Các thư viện này cho phép giảm nhẹ thời gian và công sức của người lập trình; Bởi với chúng, để có được một “tác phẩm”đồ họa không đòi hỏi phải có một kiến thức hùng hậu về đường cong Bezier, B-spline, về hình học, tạo bóng…, mà chỉ ứng dụng các hàm tạo sẵn. Một trong những thư viện đó là OpenGL, được xem là tiêu chuẩn thiết kế công nghiệp cho đồ họa ba chiều. Mục tiêu của bài tiểu luận này làtìm hiểu thư viện đồ họa của OpenGL trong đồ họa ba chiều, đồng thời cũng cố gắng đưa ra một ứng dụng của OpenGL trong việc minh họa các giải thuật đồ họa ba chiều một cách đơn giản và dễ tiếp cận.

TỔNG QUAN VỀ NGÔN NGỮ PYTHON

Giới thiệu Python

Python là ngôn ngữ lập trình bậc cao đa năng, được phát triển bởi Guido van Rossum và ra mắt lần đầu vào năm 1991 tại Hà Lan Ngôn ngữ này kế thừa các đặc điểm từ nhiều ngôn ngữ khác như ABC, Module-3, C, C++ và Unix Shell Hiện nay, Python có một cộng đồng người dùng đông đảo và đứng thứ 3 trong top 10 ngôn ngữ lập trình phổ biến nhất theo bảng xếp hạng năm 2016.

Python đã trở thành lựa chọn hàng đầu cho lập trình viên nhờ vào tính linh hoạt, từ các trò chơi điện tử đơn giản đến các thuật toán tìm kiếm phức tạp Đặc biệt, trong bối cảnh công nghệ AI phát triển mạnh mẽ, Python được công nhận là công cụ quan trọng trong lĩnh vực công nghệ thông tin.

Python là một ngôn ngữ lập trình bậc cao dễ sử dụng, với số lượng từ khóa ít và cấu trúc đơn giản Cú pháp của Python được định nghĩa rõ ràng, giúp ngôn ngữ này trở thành lựa chọn thân thiện cho lập trình viên.

- Phần code của Python được định nghĩa khá rõ ràng và rành mạch.

- Python có một thư viện chuẩn khá rộng lớn Thư viện này dễ dàng tương thích và tích hợp với UNIX, Windows, và Macintosh.

Python là một ngôn ngữ lập trình thông dịch, cho phép thực thi mã nguồn theo từng dòng Điều này không chỉ giúp quá trình gỡ lỗi trở nên dễ dàng hơn mà còn là một trong những lý do chính khiến Python thu hút nhiều người học và trở nên phổ biến.

- Python cũng là một ngôn ngữ lập trình hướng đối tượng Ngoài ra, Python còn hỗ trợ các phương thức lập trình theo hàm và theo cấu trúc.

Python không chỉ nổi bật với các đặc điểm chính mà còn sở hữu nhiều tính năng đáng chú ý khác, bao gồm hỗ trợ lập trình giao diện người dùng (GUI), mã nguồn mở và khả năng tích hợp linh hoạt với các ngôn ngữ lập trình khác.

- Tốc độ chậm hơn so với các ngôn ngữ C/C++ hay Java.

- Không phải là ngôn ngữ tốt dành cho nền tảng mobile.

- Python không phải lựa chọn tốt cho các bài toán cần tối ưu bộ nhớ.

- Python có nhiều giới hạn khi làm việc với cơ sở dữ liệu phức tạp.

Cú pháp ngôn ngữ

1.2.1 Biến số và toán tử

Biến được khai báo bằng cách gán một giá trị cụ thể và sẽ tự động được giải phóng khi ra khỏi phạm vi sử dụng Một biến có thể nhận nhiều loại giá trị khác nhau, bao gồm số, chuỗi và ký tự.

Cũng có thể khai báo nhiều giá trị cho nhiều biến trên cùng một dòng hoặc chuyển đổi giữa hai giá trị rất dễ dàng:

1234585396326 (số nguyên dài vô hạn) -86.12 7.84E-04 3+ 8j (số phức)

Kiểu chuỗi (string): Đặt trong cặp dấu ‘ hoặc “

"Hello" "It's me" '"OK"-he replied'

Kiểu bộ (tuple): là cấu trúc mảng và một tuple đã được khai báo rồi thì không thay đổi được giá trị (immutable) mytuple = ('x' , 'y' , 'z') (1, 2.0, 3) (1,) ("Hello",1,())

Kiểu danh sách (list): là cấu trúc mảng và các phần tử có index có thứ tự numbers = [1, 2, 3, 4, 5] names = ['Marry' , 'Peter']

Kiểu từ điển (dictionary):là một cấu trúc mảng, nhưng các phần tử bao gồm key và value

{"Vietnam":"Hanoi", "Netherlands":"Amsterdam","France":"Paris"}

Chú thích: giúp cho lập trình viên dễ dàng cải tiến mã nguồn, ghi chú các chức năng của đoạn code thực hiện

1.2.3 Cấu trúc lặp và rẽ nhánh a) If…elif…else b) For…in…else c) While else if :

for in :

Trong lập trình, việc sử dụng đoạn mã lặp lại nhiều lần là điều thường gặp Để đơn giản hóa quá trình này, chúng ta có thể sử dụng hàm, nơi chúng ta viết tất cả các thao tác cần thiết và chỉ cần gọi hàm khi cần sử dụng.

Khai báo hàm theo cú pháp sau:

Hàm nếu không trả dữ liệu thì mặc định sẽ trả về giá trị

Here is an example of declaring and calling a function to find the maximum element in an array: ```pythondef max(a): max = a[0] for x in a: if x > max: max = x return maxdata = [1, 5, 1, 12, 3, 4, 6]print("Data:", data)```This code defines a function that iterates through the array to identify the largest number.

Khai báo một Class theo cú pháp sau: def (, , ):

Phân chia module

Có 3 loại module thường thấy là:

1 Viết bằng Python: có phần mở rộng là py

2 Các thư viện liên kết động: có phần mở rộng là dll , pyd , so , sl ,…

3 C-Module liên kết với trình phiên dịch

Modules trong Python là các tệp tin chứa các hàm và biến được định nghĩa sẵn, cho phép chúng ta tái sử dụng mã nguồn Các module này có đuôi mở rộng là py Python cung cấp một số module mặc định mà chúng ta có thể sử dụng bằng cách thực hiện lệnh import.

Khi gặp câu lệnh trên thì trình biên dịch sẽ tiến hành tìmkiếm file module tương ứng theo thứ tự thư mục sau:

1 Thư mục hiện hành mà script đang gọi

2 Các thư mục trong PYTHONPATH (nếu có set)

3 Các thư mục cài đặt chuẩn trên Linux/Unix import

Giả sử ta tạo một file python mymath.py có nội dung như sau: def cong(a, b): return a + b def tru(a, b): return a - b def nhan(a, b): return a * b

Sau đó, tạo một file có tên myexample.py , trong cùng thư mục với file mymath.py vừa tạo ở trên, có nội dung như sau:

Sau khi thực hiện sẽ hiển thị lên màn hình là:

Xử lý tập tin

Tập tin là một đơn vị chứa thông tin hoặc dữ liệu được lưu trữ trên thiết bị của máy tính Python cung cấp các phương pháp để quản lý các loại tập tin như âm nhạc, video và văn bản Bài viết này sẽ tập trung vào hai loại tập tin chính: tập tin văn bản và tập tin nhị phân.

Trước khi muốn đọc hoặc ghi file, cần có thao tác mở file theo cú pháp:

Với hàm này sẽ có hai tham số được truyền vào đó là đường dẫn và chế độ mở Các chế độ như sau:

 r : mở để đọc nội dung (mặc định) import mymath num1

Tong hai so la: 3 fh = open(filepath, mode)

 w : mở để ghi nội dung

 a : mở để ghi thêm nội dung vào cuối file.

 r+ : mở để đọc và ghi Con trỏ nằm ở đầu file.

 w+ : mở để đọc và ghi Ghi đè nếu file đã tồn tại, nếu chưa tồn tại thì tạo file mới để ghi.

 a+ : mở để đọc và thêm vào cuối file Con trỏ nằm ởcuối file Nếu file chưa tồn tại thì tạo file mới để ghi.

Mặc định là mở file text, nếu muốn mở file nhị phân(binary) thì thêm b , ví dụ: rb , wb , ab , rb+ , wb+ , ab+

Sau khi file đã mở ở chế độ đọc thì gọi phương thức read([count]) để trả về toàn bộ nội dung của file Ví dụ:

Hàm read() có nhận một tham số là số lượng byte muốn đọc Nếu không truyền vào thì sẽ đọc hết nội dung của file.

Nếu file được mở ở chế độ có thể ghi thì có thể dùng phương thức write() để ghi một nội dung vào file Ví dụ:

At the end of the program, it is essential to use the close() function to close a file when no further operations are needed For example, after reading from 'test.txt' and writing 'Attack detected' to 'access_log', both files should be properly closed using f1.close() and f2.close().

Sử dụng phương thức os.rename(old, new) để đổi tênmột file Ví dụ:

Sử dụng phương thức os.remove(file) để xóa một filekhỏi hệ thống Ví dụ:

GIỚI THIỆU VỀ PYOPENGL

Tìm hiểu về OpenGl

OpenGL (Open Graphics Library) là một tiêu chuẩn kỹ thuật đồ họa, cung cấp giao diện lập trình ứng dụng (API) cho đồ họa 3 chiều Ngoài ra, OpenGL còn hỗ trợ các ứng dụng đồ họa 2 chiều Giao diện này bao gồm khoảng 150 hàm, cho phép vẽ các cảnh phức tạp từ những hàm đơn giản.

Silicon Graphics, nhà sản xuất máy trạm đồ họa hàng đầu thế giới, đã tiên phong trong việc phát triển OpenGL, một tiêu chuẩn đồ họa được sử dụng rộng rãi trong ngành công nghiệp game Bên cạnh đó, OpenGL còn được ứng dụng trong các lĩnh vực như CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông tin và phát triển trò chơi.

OpenGL hỗ trợ các hàm đồ họa làm các việc như sau:

 Xây dựng các đối tượng phức tạp từ các thành phần hình học cơ bản (điểm, đoạn, đa giác, ảnh, bitmap)

In 3D graphics, organizing objects and selecting optimal viewing points are essential for effective visualization To rename a file in Python, you can use the `os.rename` function, while the `os.remove` function allows you to delete a file.

Màu sắc của các đối tượng được xác định bởi nhiều yếu tố, bao gồm điều kiện chiếu sáng, kết cấu (texture) của đối tượng, và mô hình được xây dựng Sự kết hợp của những yếu tố này đóng vai trò quan trọng trong việc tính toán màu sắc chính xác.

 Biến đổi những mô tả toán học của đối tượng và thông tin màu sắc thành các pixel trên màn hình (quá trình này được gọi là resterization).

Cấu trúc tập lệnh

OpenGL sử dụng tiền tố "gl" theo sau là các từ có chữ cái đầu viết hoa để tạo tên lệnh, theo định dạng gl{tên hàm}[{số tham số}{loại tham số}].

Tương tự, OpenGL đặt tên các hằng số bắt đầu bằng GL_ và các từ tiếp sau đều được viết hoa và cách nhau bởi dấu ‘_’

Ví dụ: GL_COLOR_BUFFER_BIT.

Bên cạnh đó, một số lệnh sử dụng hậu tố để chỉ rõ số lượng và kiểu tham số được truyền, như được thể hiện trong bảng dưới đây.

Ví dụ: glVertex2i(1,3) tương ứng với xác định một điểm (x,y) với x, y nguyên (integer) Tuy nhiên có những thứ mà OpenGL không hỗ trợ sẵn như

 Bản thân OpenGL không có sẵn các hàm nhập xuất hay thao tác trên window

OpenGL không cung cấp các hàm cấp cao để tạo ra mô hình đối tượng, buộc người dùng phải tự xây dựng từ các thành phần hình học cơ bản Để khắc phục hạn chế này, thư viện GLUT đã được phát triển với nhiều hàm hỗ trợ hữu ích.

 Nhập xuất (bàn phím, chuột, )

 Vẽ một số đối tượng 3D phức tạp (mặt cầu, khối hộp, )

Tên các hàm của GLUT đều có tiền tố là glut.

Ứng dụng của OpenGL

2.3.1 Vẽ các đối tượng hình học

Trong OpenGL có 2 loại buffer phổ biến nhất, mỗi lần vẽ, chúng ta nên xóa buffer

 Color buffer: buffer chứa màu của các pixel cần được thể hiện

Depth buffer, hay còn gọi là z-buffer, là bộ đệm lưu trữ chiều sâu của từng pixel, được đo bằng khoảng cách từ pixel đến mắt người quan sát Chức năng chính của z-buffer là loại bỏ các phần của đối tượng nằm phía sau các đối tượng khác, giúp cải thiện chất lượng hình ảnh trong đồ họa máy tính.

Khi sử dụng OpenGL để vẽ đối tượng, màu sắc mặc định sẽ được áp dụng Để tùy chỉnh màu sắc theo ý muốn, bạn cần thiết lập lại màu vẽ bằng cách sử dụng các lệnh sau: `glClearColor(0.0, 0.0, 0.0, 0.0)` để xác định màu xóa color buffer (màu đen), `glClearDepth(1.0)` để thiết lập giá trị xóa depth buffer, và `glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)` để xóa cả color buffer và depth buffer Sau đó, bạn có thể thiết lập màu sắc cho đối tượng bằng các lệnh `glColor3f`, ví dụ: `glColor3f(1.0, 0.0, 0.0)` cho màu đỏ, `glColor3f(0.0, 1.0, 0.0)` cho màu xanh lá, `glColor3f(0.0, 0.0, 1.0)` cho màu xanh dương, và các màu khác như vàng, tím, cyan, và trắng.

OpenGL không cung cấp sẵn các hàm để tạo ra các đối tượng hình học phức tạp Thay vào đó, người dùng cần tự xây dựng chúng từ các đối tượng hình học cơ bản mà OpenGL hỗ trợ, bao gồm điểm, đoạn thẳng và đa giác.

Khi khai báo một điểm ta dùng hàm glVertexXY với X là số chiều (2, 3, hoặc 4), Y là kiểu dữ liệu.

Việc xây dựng các đối tượng hình học khác đều có thể được thực hiện như sau mode có thể là một trong những giá trị sau: glBegin(mode);

/* xác định tọa độ và màu sắc của các điểm của hình */ glEnd();

Một số tính chất của điểm và đoạn cần quan tâm có thể được thiết lập qua các hàm:

 Kích thước của một điểm: void glPointSize(GLfloat size)

 Độ rộng của đoạn thẳng: void glLineWidth(GLfloat width)

Trước khi thực hiện các thao tác trên ModelView, chúng ta cần gọi hàm

OpenGL hỗ trợ sẵn các hàm biến đổi affine cơ bản như sau

 Quay quanh trục nối gốc tọa độ với điểm (x,y,z) glMatrixMode(GL_MODELVIEW); void glTranslate{fd}(TYPEx, TYPE y, TYPEz); void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z);

 Tỉ lệ (tâm tỉ lệ tại gốc tọa độ) void glScale{fd}(TYPEx, TYPE y, TYPEz);

Ví dụ: chúng ta thực hiện phép quay quanh trục z một góc α và tịnh tiến đi một đoạn theo vector(trx, try, trz), các bước thực hiện sẽ là:

Giống như chụp hình, thiết lập view trong GLUT là quá trình xác định vị trí, góc và hướng của camera GLUT cung cấp một hàm giúp người dùng thiết lập view một cách nhanh chóng và hiệu quả.

 (eyex, eyey, eyez) là vị trí đặt của view,

 (centerx, centery, centerz) là điểm nằm trên đường thẳng xuất phát từ tâm view hướng rangoài,

 (upx, upy, upz) là vector chỉ hướng lên trên của view

Trước khi thực hiện các thao tác chiếu, chúng ta gọi 2 hàm void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, Gldoublecenterx,

GLdouble centery, GLdouble centerz, GLdouble upx, GLdoubleupy, GLdouble upz) glMatrixMode(GL_PROJECTION); glLoadIdentity();

Perspective projection is characterized by the visual effect where objects appear smaller as they move further away from the viewer To establish this type of projection in OpenGL, the function used is void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far).

Chiếu trực giao (Orthogonal Projection)

Trong phép chiếu ortho, khoảng cách giữa vật thể và camera không làm thay đổi kích thước hiển thị của vật Để thiết lập phép chiếu này trong OpenGL, bạn có thể sử dụng hàm void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far).

OpenGL provides a function to set the viewport using the command `void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);`, where (x, y) specifies the top-left corner of the drawing window, and width and height define the dimensions of the viewport By default, the parameters (x, y, width, height) are set to (0, 0, winWidth, winHeight), which allows the viewport to occupy the entire window.

2.3.5 Thiết lập mô hình shading

OpenGL hỗ trợ hai chế độ màu chính là RGBA và Color-Index Trong chế độ RGBA, ba thành phần RGB đại diện cho màu Đỏ, Xanh lá và Xanh dương, trong khi thành phần A (alpha) không ảnh hưởng trực tiếp đến màu pixel mà được sử dụng để xác định độ trong suốt Để thiết lập màu vẽ hiện tại trong chế độ RGBA, người dùng có thể sử dụng các hàm tương ứng, với các tham số là số thực nằm trong khoảng nhất định cho từng thành phần màu.

[0,1],ngược lại thì sẽ được chuyển đổi như ở bảng sau

Một đoạn thẳng có thể được tô màu đồng nhất (chế độ flat) hoặc nhiều màu sắc khác nhau (chế độ smooth) Để thiết lập chế độ shading phù hợp, bạn có thể sử dụng hàm với tham số mode nhận một trong hai giá trị GL_SMOOTH hoặc GL_FLAT.

2.3.6 Tương tác với người dùng void glColor3{b s i f d ub us ui} (TYPEr, TYPEg, TYPEb); void glColor4{b s i f d ub us ui} (TYPEr, TYPEg, TYPEb, TYPEa); void glColor3{b s i f d ub us ui}v (const TYPE*v); void glColor4{b s i f d ub us ui}v (const TYPE*v); void glShadeModel (GLenum mode);

Việc cho phép người dùng chọn đối tượng bằng cách nhấp chuột trong cửa sổ là yêu cầu thiết yếu cho các ứng dụng tương tác Để thực hiện chức năng này, OpenGL cung cấp chế độ Selection, và chúng ta cần thực hiện hai công đoạn chính.

Công đoạn đầu tiên trong quá trình xử lý đồ họa là chuyển đổi các đối tượng trong không gian thành các pixel để hiển thị trên màn hình Ngược lại, công đoạn thứ hai cho phép chương trình xác định đối tượng mà người dùng tương tác, chẳng hạn như khi nhấn chuột trái Để chuyển đổi giữa hai chế độ này, chúng ta sử dụng hàm với tham số mode là GL_RENDER hoặc GL_SELECT.

Trước tiên chúng ta cần kích hoạt chế độ selection glRenderMode(GL_SELECT)

Việc xác định vùng chọn tương tự như là việc xác định khối nhìn, tức là chúng ta sẽ thao tác trênphép chiếu.

Thao tác tổng quát như sau

GLint glRenderMode(GLenum mode); glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); gluPickMatrix

( ); gluPerspective, glOrtho, gluOrtho2D, or glFrustum

/* */ glPopMatrix();Trong đó, là hàm xác định vùng quan tâm trong viewport (ví dụ như xung quanh vùng click chuột) với:

 (x, y, width, height) là tham số xác định quan tâm trên viewport

 viewport[4] là mảng 4 phần tử chứa 4 tham số của viewport, có thể dùng hàmglGetIntegerv(GL_VIEWPORT, GLint *viewport) để lấy ra.

OpenGL có một stack giúp thao tác trên tên các đối tượng, với các hàm

 void glInitNames(void) khởi tạo stack (stack lúc này rỗng)

 void glPushName(GLuint name) đặt tên của đối tượng cần xét vào trong stack

 void glPopName(void) lấy tên nằm ở đỉnh stack ra khỏi stack

 void glLoadName(GLuint name) thay nội dung của đỉnh stack

Việc sử dụng stack trong OpenGL cho phép xây dựng tên mang tính phân cấp Khi thực hiện glPushName(name) hoặc glLoadName(name), chương trình nhận biết rằng các đối tượng được vẽ sau đó sẽ mang tên là name và là thành phần của đối tượng ở đỉnh stack Để truy vấn đối tượng nào được chọn, OpenGL sử dụng hàm gluPickMatrix với các tham số như tọa độ x, y, kích thước width, height và viewport.

 trước tiên sẽ đánh dấu mọi đối tượng nào có vùng giao với vùng chọn,

 sau đó, với mỗi đối tượng có vùng giao, tên của nó và giá trị z nhỏ nhất, z lớn nhất của

 vùng giao sẽ được lưu trong hit records

Mọi truy vấn liên quan đến đối tượng đã chọn sẽ được thực hiện trên các bản ghi hit Để khởi tạo các bản ghi hit, cần gọi hàm với buffer là mảng chứa các bản ghi này.

Chú ý: thủ thục này phải được gọi trước khi chuyển sang chế độ GL_SELECT.

MỘT SỐ DEMO CƠ BẢN

Vẽ khối lập phương xoay

Example1 void glSelectBuffer(GLsizei size, GLuint *buffer)

Tương tác với chuột và bàn phím

Thao tác với Model View và thư viện Random

Thiết lập mô hình Smooth-Shading cho một tam giác

OpenGL là cầu nối giữa CPU và GPU, cho phép các nhà phát triển chạy ứng dụng trên nhiều ngôn ngữ lập trình Để hoạt động hiệu quả, OpenGL cần được hỗ trợ bởi các nhà sản xuất card đồ họa như NVidia và được cài đặt bởi các đối tác phát triển hệ điều hành như Apple và Microsoft OpenGL cung cấp một API thống nhất, hiện diện trong nhiều trò chơi và ứng dụng 3D, 2D OpenGL ES, phiên bản rút gọn của OpenGL, được sử dụng rộng rãi trên các nền tảng như PlayStation, Android, Nintendo 3DS, Nokia, Samsung, Symbian, cũng như trên các sản phẩm của Apple như MacOS và iOS.

Sử dụng thư viện OpenGL, chúng ta có thể mở rộng các đề tài như vẽ hình 3D và sử dụng để tạo ra các đường cong và mặt cong như Benzier, B-SPLINE Ngoài ra, OpenGL cũng là công cụ hỗ trợ lập trình game điện tử, tương thích với nhiều nền tảng khác nhau, bao gồm PC/Mac, các hệ máy console như PS3, PS4, Xbox 360, Xbox One, và các thiết bị di động Android.

[1] Allen B Downey, “Think Python 2e”, greenteapress.com/thinkpython2/html/index.html.

[2] Dave Shreiner, Graham Sellers, John M Kessenich, “OpenGL Programming Guide: The Official Guide to Learning OpenGL”.

[3] Lê Phong, “Tìm hiểu thư viện đồ họa OpenGL”, Đề tài tốt nghiệp, 2016.

[4] Võ Duy Tuấn, “Python cơ bản”, Nhà xuất bản Đại Học Quốc Gia Hà Nội, 2018.

[5] opengl.org/resources/libraries/glut

[6] pythonprogramming.net/opengl-pyopengl-python-pygame-tutorial

[7] github.com/id-Software/Quake

Source code cho các example: drive.google.com/drive/folders/19phBc1JPGOP0tVR4wj9Z6cBbXGz0v1QS?usp=sharing

ĐỀ XUẤT CÁC ĐỀ TÀI LIÊN QUAN

OpenGL là cầu nối giữa CPU và GPU, yêu cầu sự hỗ trợ từ các nhà sản xuất card đồ họa như NVidia và được cài đặt bởi các đối tác phát triển hệ điều hành như Apple và Microsoft Nó cung cấp một API thống nhất cho các nhà phát triển Hiện nay, logo OpenGL và OpenGL ES xuất hiện trong nhiều trò chơi, ứng dụng 3D, 2D và phần mềm khác, đặc biệt là phần mềm 3D OpenGL ES được sử dụng bởi nhiều nền tảng như PlayStation, Android, Nintendo 3DS, Nokia, Samsung, Symbian, cùng với MacOS và iOS của Apple.

Sử dụng thư viện OpenGL, chúng ta có thể mở rộng các đề tài như vẽ hình trong không gian ba chiều và vẽ các đường cong, mặt cong như Benzier và B-SPLINE Ngoài ra, OpenGL còn là công cụ hỗ trợ lập trình game điện tử, tương thích với nhiều nền tảng khác nhau, bao gồm PC/Mac, các hệ máy console như PS3, PS4, Xbox 360, Xbox One và các thiết bị di động Android.

Ngày đăng: 22/10/2021, 13:28

HÌNH ẢNH LIÊN QUAN

Sau khi thực hiện sẽ hiển thị lên màn hình là: - Tìm hiểu lập trình python và pyopengl
au khi thực hiện sẽ hiển thị lên màn hình là: (Trang 14)
OpenGL không có sẵn các hàm để xây dựng các đối tượng hình học phức tạp, người dùng phải tự xây dựng chúng từ các đối tượng hình học cơ bản mà OpenGL hỗ trợ: điểm, đoạn thẳng, đa giác. - Tìm hiểu lập trình python và pyopengl
pen GL không có sẵn các hàm để xây dựng các đối tượng hình học phức tạp, người dùng phải tự xây dựng chúng từ các đối tượng hình học cơ bản mà OpenGL hỗ trợ: điểm, đoạn thẳng, đa giác (Trang 22)
Giống như chụp hình, thiết lập view là thiết lập vị trí cũng như góc, hướng của camera - Tìm hiểu lập trình python và pyopengl
i ống như chụp hình, thiết lập view là thiết lập vị trí cũng như góc, hướng của camera (Trang 25)
2.3.5. Thiết lập mô hình shading - Tìm hiểu lập trình python và pyopengl
2.3.5. Thiết lập mô hình shading (Trang 27)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w