Professional Documents
Culture Documents
sử dụng OpenGL
Mô hình lập trình ứng dụng của hệ thống đồ họa
Computer Graphics 2
Nội dung
Computer Graphics 3
1. Tổng quan về OpenGL và GLUT
OpenGL:
• OpenGL là bộ thư viện đồ họa để xây dựng các đối tượng và thao tác cần thiết
trong các ứng dụng đồ họa 2D, 3D.
• API đồ họa:
• Sử dụng nhanh chóng, đơn giản
• Linh động
• Không phụ thuộc thiết bị hiển thị
• Không phụ thuộc cửa sổ: Không có chức năng cho các hoạt động cửa sổ, chẳng
hạn như tạo, thay đổi kích thước, xử lý sự kiện,…
• Không phụ thuộc vào Hệ điều hành: linh động trên các nền tảng khác nhau
• Có sẵn nhiều nền tảng hình học và xử lý pixel
• Tạo hình ảnh chất lượng cao từ hình học và hình ảnh cơ sở
Computer Graphics 4
1. Tổng quan về OpenGL và GLUT
OpenGL:
• Có một vấn đề khi làm việc với OpenGL !!!
• Đó là OpenGL không hoạt động một mình mà phải liên kết với các thư viện
khác. Chẳng hạn như Glut, Glew, …
• Bởi vì: Giao diện người dùng đồ họa (Graphics User Interfaces –GUI)
• Tạo cửa sổ, thanh trượt, menu, nút…
• Thay đổi kích thước cửa sổ
• Xử lý click chuột, bàn phím….
Computer Graphics 5
1. Tổng quan về OpenGL và GLUT
Glut:
• Bộ công cụ tiện ích OpenGL (OpenGL Utility Toolkit)
• GLUT cung cấp các chức năng cơ bản để làm việc các cửa sổ.
• Thư viện GLX: làm việc hệ thống cửa sổ X (gọi là X window system) của
Hệ điều hành Unix, Linux
• Thư viện AGL: làm việc hệ thống cửa sổ trong Hệ điều hành Mac OS của
máy Apple
• Thư viện WGL: làm việc hệ thống cửa sổ của Hệ điều hành Microsoft
Windows
Computer Graphics 6
1. Tổng quan về OpenGL và GLUT
Computer Graphics 7
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 8
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 9
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
• Chuyển đổi các đỉnh thành các hình học nguyên thủy Vùng
Danh sách • Loại bỏ những điểm nằm ngoài không gian vẽ Phân mảnh đệm
hiển thị • Bổ sung màu sắc, tọa độ kết cấu hình khung
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 10
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 11
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
• Tạo bề mặt cho đối tượng hình ảnh giống thật Vùng
Danh sách Phân mảnh đệm
hiển thị hơn (tự nhiên)
khung
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 12
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 13
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 14
1. Tổng quan về OpenGL và GLUT
Quy trình kết xuất hình ảnh (Pipeline rendering) trong OpenGL 1.x
Vùng
Danh sách Phân mảnh đệm
hiển thị khung
Dữ liệu
các pixel Toán tử pixel Tạo kết cấu
Computer Graphics 15
1. Tổng quan về OpenGL và GLUT
OpenGL GLUT
widget
GLX, AGL
GLU
hoặc WGL
Computer Graphics 16
1. Tổng quan về OpenGL và GLUT
Computer Graphics 17
1. Tổng quan về OpenGL và GLUT
Ví dụ Sử dụng OpenGL và Glut trong chương trình
Thiết lập cấu hình: Chế độ hiển thị: RGB (GLUT)
#include <GL/glut.h>
void main(int argc, char **argv)
{
int mode=GLUT_RGB; Khởi tạo cửa sổ có độ phân giải 800*800
glutInit(&argc, argv); Khởi tạo vị trí cửa sổ (0,0)
glutInitDisplayMode(mode); Tạo cửa sổ với tiêu đề: Hello Graphics World
(GLUT)
glutInitWindowSize(800, 800);
glutInitWindowPosition(0, 0); Thiết lập cấu hình tọa độ vẽ (OpenGL)
glutCreateWindow(“Hello Graphics World”);
Computer Graphics 19
1. Tổng quan về OpenGL và GLUT
Computer Graphics 20
2. Cấu trúc chương trình
#include <GL/glut.h> #include <GL/glut.h>
void initGL() { Định nghĩa hàm thiết lập cấu hình OpenGL {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Thiết lập màu nền
glOrtho(-1,1,-1,1,-1,1); Thiết lập tọa độ vẽ
} }
void mydisplay() { Định nghĩa hàm hiển thị đối tượng vẽ {
glClear(GL_COLOR_BUFFER_BIT); Xóa màu trong buffer (Vùng đệm khung)
glColor3f(1.0f, 0.0f, 0.0f); Thiết lập màu vẽ
glViewport(0,0,600,600) Thiết lập khung nhìn
glBegin(GL_POLYGON); Bắt đầu vẽ (đoạn thẳng, đa giác, ….)
glVertex2f(-0.5f, -0.5f); Sử dụng thuật toán vẽ
glVertex2f( 0.5f, -0.5f); câu lệnh
glVertex2f( 0.5f, 0.5f); câu lệnh
glVertex2f(-0.5f, 0.5f); câu lệnh …
glEnd(); Kết thúc vẽ
glFlush(); Sinh ảnh đưa ra Vùng đệm khung
} }
int main(int argc, char** argv){ Hàm main(){
glutInit(&argc, argv); Khởi tạo GLUT
glutInitDisplayMode(GLUT_RGB); Thiết lập cấu hình (chế độ) vẽ
glutInitWindowSize(600, 600); Thiết kích thước cửa sổ
glutInitWindowPosition(0, 0); Thiết lập vị trí cửa sổ
glutCreateWindow("My OpenGL program"); Tạo cửa sổ
glutDisplayFunc(mydisplay); Xử lý sự kiện
initGL() Gọi hàm để thiết lập cấu hình OpenGL
glutMainLoop(); Lặp đợi xử lý sự kiện
} }
Computer Graphics 21
2. Một số lệnh cơ bản OpenGL
• Tọa độ vẽ ảnh hưởng đến sự hiển thị của đối tượng vẽ
Giả sử vẽ hình tam giác A(1,1) B(1,3) C(2,1)
C(4,1) C(4,1)
1 1
A(1,1) A(1,1)
1 4 X X 4 1
Computer Graphics
2. Một số lệnh cơ bản OpenGL
• Thiết lập hệ tọa độ vẽ:
• Cú pháp: glOrtho(left, right, bottom, top, near, far);
• Công dụng: Thiết lập tọa độ vẽ (khung nhìn) các đối tượng hiển thị trên màn hình cho
đối tượng nhìn
Top
A B
ABCD: Top
Left EFGH: Botton
ABFF: left
D
C DCGH: Right
ADHE: Near
Đối BCGF: Far
Điểm Hướng đến điểm nhìn
nhìn tượng Far
E hiển thị
F
Near
H Right G
bottom 23
Computer Graphics
2. Một số lệnh cơ bản OpenGL
• Thiết lập hệ tọa độ vẽ 2 chiều: glOrtho(left, right, bottom, top, near, far);
near, far để mặt định -1, 1 y
(-0.5, 0.5) 0.5 ( 0.5, 0.5); Nếu không sử dụng hàm
glVertex2f(-0.5f, -0.5f);
glVertex2f( 0.5f, -0.5f); glOrtho() thì OpenGL mặc định:
glVertex2f( 0.5f, 0.5f); top = 1; bottom = -1
-x -0.5 O 0.5 x right = 1; left = -1
glVertex2f(-0.5f, 0.5f);
near = -1; far = 1
(-0.5, -0.5) -0.5 (0.5, -0.5)
top = 1
bottom = -1 top
top -y 1
right = 1 1
left = -1 0.5
0.5
top = 1
bottom = 0 0 1
-1 1 0.5
0.5 right = 1 left right
left -0.5 right
left = 0
-0.5
-1 bottom bottom
Computer Graphics 24
• Thiết lập khung nhìn:
2. Một số lệnh cơ bản OpenGL
• Khung nhìn là vùng trên cửa sổ để chứa tọa độ vẽ và các đối tượng vẽ
• Khi sử dụng khung nhìn thì tọa độ vẽ và đối tượng vẽ sẽ dãn ra hoặc co lại cho vừa với
khung nhìn
• glViewport(x, y, chiều rộng, chiều cao); với x, y là gốc tọa độ và đơn vị tính bằng pixel
• Nếu không thiết lập khung nhìn thì khung nhìn mặc định là toàn bộ cửa sổ ứng
dụng
Y
top = 1
bottom = -1 top Chiều
right = 1 1
cao
left = -1
0.5
glVertex2f(-0.5f, -0.5f); -1 1
0.5 (x,y) Chiều rộng
glVertex2f( 0.5f, -0.5f); left -0.5 right
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f); -0.5
-1 bottom (0,0) X
Computer Graphics 25
2. Một số lệnh cơ bản OpenGL
Computer Graphics 26
2. Một số lệnh cơ bản OpenGL
Computer Graphics 27
2. Một số lệnh cơ bản OpenGL
• Ví dụ:
• (1) glVertex2i(1, 3) : Hàm của OpenGL trả về kiểu số nguyên và có 2 tham số
Vẽ 1 điểm có tọa độ nguyên (1,3)
• (2) glVertex2f(1.0, 3.0): Hàm của OpenGL trả về kiểu số thực và có 2 tham số
Vẽ 1 điểm có tọa độ (1.0, 3.0)
• (3) glColor3f(1.0, 0.0, 0.0): Thiết lập màu vẽ (R,G,B) = (1.0, 0.0, 0.0) : màu Red
• Thay thế (3) bằng
• (4) GLfloat color_array[] = {1.0, 0.0, 0.0};
• (5) glColor3fv(color_array);
• Ký tự hậu tố v cho biết color_array là con trỏ, nó trỏ đến mảng color_array
Computer Graphics 28
2. Một số lệnh cơ bản OpenGL
glUniform3fv(p)
p con trỏ mảng/vector
Computer Graphics 29
2. Một số lệnh cơ bản OpenGL
Computer Graphics 30
3. Các đối tượng cơ sở trong openGL
Vẽ hình vuông:
glBegin(GL_POLYGON);
glVertex2f(-0.5f, -0.5f); GL_POINTS
glVertex2f( 0.5f, -0.5f); GL_LINE_STRIP GL_LINE_LOOP
glVertex2f( 0.5f, 0.5f);
glVertex2f(-0.5f, 0.5f);
glEnd();
GL_LINES
GL_TRIANGLE_FAN GL_QUADS
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_POLYGON GL_QUAD_STRIP
Computer Graphics 31
3. Các đối tượng cơ sở trong openGL
Sphere
Cube
And others…
Teapot
Computer Graphics 32
2. Một số lệnh cơ bản OpenGL
• Vẽ ấm trà: https://www.opengl.org/archives/resources/code/samples/simple/teapot.c
• Vẽ mặt trăng:
• https://www.opengl.org/archives/resources/code/samples/redbook/colormat.c
• Vẽ bánh xe răng cưa:
• https://www.opengl.org/archives/resources/code/samples/glut_examples/mesademos/gears.c
• Vẽ các vòng tròn biểu tượng Olympic:
• https://www.opengl.org/archives/resources/code/samples/glut_examples/examples/olympic.c
• Vẽ nhiều chiếc nhẫn xoay:
• https://www.opengl.org/archives/resources/code/samples/glut_examples/contrib/rings.c
• Vẽ đường nhòe hình cánh quạt bằng rê chuột:
• https://www.opengl.org/archives/resources/code/samples/glut_examples/contrib/lineblend.c
Computer Graphics 33
Lập trình đồ họa sử dụng OpenGL
Computer Graphics 34