OpenGL cũng có thể được dùng trong các ứng dụng đồ họa 2 chiều.. GLUT OpenGL Utility Toolkit là một trong số đó và được sử dụng rộng rãi.. Tài liệu tham khảo • GLSL - Ngôn ngữ chuyển mà
Trang 1OPENGL
Giới thiệu và tổng quan thư viên
OpenGL và GLUT
Trang 2Giới thiệu OpenGL
• OpenGL (Open Graphics Library) là một tiê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 ba 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 được dùng ứng dụng CAD, thực tại ảo, mô phỏng khoa học, mô phỏng thông tin, phát triển trò chơi
• OpenGL còn một đối thủ cạnh tranh là DirectX của
Microsoft
Trang 3Không gian trong OpenGL
• Không gian trong OpenGL được miêu tả qua hình học xạ ảnh Một điểm trong không gian này có tất cả 4 tọa độ Cách thể hiện các điểm trong không gian bằng 4 tọa độ cho phép xử lý các điểm vô tận một cách tổng quát Vì vậy mã nguồn các ứng dụng đã được đơn giản hóa đi nhiều
Trang 4Các thao tác OpenGL cơ bản là 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
Trang 5cơ bản ( điểm, đoạn thẳng, đa giác)
Rất may là một số thư viện cung cấp sẵn một số hàm cấp cao được xây dựng nên từ OpenGL GLUT (OpenGL Utility Toolkit) là một trong số
đó và được sử dụng rộng rãi Trong tài liệu này, chúng ta sẽ sử dụng chủ yếu là OpenGL và GLUT
Trang 6Các trò chơi được viết với OpenGL
• Hẳn các bạn đều biết game này?
Trang 7Hình ảnh
Khúc xạ dùng OpenGL
Trang 8Trò chơi dùng OpenGL
Trang 9Kết cấu di dộng dùng OpenGL
Trang 10Tài liệu tham khảo
• GLSL - Ngôn ngữ chuyển màu OpenGL
• Cg - Ngôn ngữ chuyển màu của hãng nVidia
dùng cho OpenGL
• Java OpenGL - OpenGL cho JavaOpenGL
• ES - OpenGL for embedded systems
• OpenAL - Thư viện âm thanh tự do thiết kế với mục địch dùng chung với OpenGL
• OpenSL ES - Một thư viện âm thanh khác
• Graphics pipeline
Trang 11Thư viện hỗ trợ OpenGL
• GLUT - Thư viện công cụ cho OpenGL
• GLU - Thư viện hàm cho các ứng dụng OpenGL
Trang 12Các giao diện lập trình đồ họa khác
• Mesa 3D - Một thư viện thực thi OpenGL mã nguồn mở
• Direct3D - Thư viện đồ họa của Microsoft
• Light Weight Java Game Library
• VirtualGL
Trang 13OpenGL Utility Toolkit (GLUT)
• Để khắc phục một số nhược điểm của OpenGL, GLUT được tạo ra với với nhiều hàm hỗ trợ
Trang 14Cài đặt OpenGL
Cài đặt trên Windows
Cài đặt trên Mac OS X Cài đặt trên Linux
Trang 15Cài đặt môi trường Linux
• Chuẩn bị thư viện:
– Copy file thư viện của OpenGL vào thư mục
Sudo apt-get install g++
• Tạo file code C++ (.CPP)
• Compile và run
Trang 16Cài đặt trên Windows và Visual Studio
2010/2008
• runtime libraries: opengl32.ddl, glu32.ddl
C:\Windows\System32\
trên win 64 bít thì C:\Windows\SysWOW64
• header files: GL.h, GLU.h
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\GL\
Trên win 64 bit thì là Program Files (x86) VS2008: v6.0A
• linker library: OpenGL32.lib
C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\OpenGL32.Lib Trên win 64 bit thì là Program Files (x86) VS2008: v6.0A
Trang 20Tạo Project
Trang 21Cấu trúc chương trình openGL đơn giản
Trang 22Khởi tạo - glutInit
• Điều đầu tiên chúng ta cần làm là gọi glutInit() làm thủ tục khởi tạo Nó phải được gọi trước khi bất kỳ đối tượng GLUT nào bởi vì nó khởi tạo thư viện GLUT
• argc, argv là 2 đối số dòng lệnh của hàm main
Trang 23glutInitDisplayMode()
• Điều tiếp theo chúng tôi cần làm là gọi
glutInitDisplayMode() làm thủ tục để xác định chế độ hiển thị cho cửa sổ.Bạn phải quyết định xem bạn muốn
sử dụng một RGBA GLUT_RGBA hoặc màu chỉ số
GLUT_INDEX mô hình màu
• Khi thiết lập chế độ hiển thị là liệu bạn muốn sử dụng đệm đơn GLUT_SINGLE hoặc đệm đôi
Trang 26Tạo của sổ - glutCreateWindow()
• Để thực sự tạo ra một cửa sổ, với các thiết lập đặc điểm trước đó (hiển thị chế độ, kích thước, vị trí, vv), sử dụng glutCreateWindow() để khởi tạo Lệnh này có một chuỗi như một tham số mà có thể xuất hiện trong thanh tiêu đề nếu hệ thống cửa
sổ bạn đang sử dụng hỗ trợ nó cửa sổ là không thực sự hiển thị cho đến khi glutMainLoop() được nhập vào
Trang 27Chức năng hiển thị
• Hàm glutDisplayFunc() làm thủ tục là sự kiện quan trọng đầu tiên của hầu hết các chức năng gọi lại và hiển thị Một chức năng gọi lại là một trong những nơi hàm đã được định nghĩa,ứng với mỗi hàm sẽ có một sự kiện phù hợp
Trang 28Chức năng định lại hình
• glutReshapeFunc() hàm này được gọi bất cứ khi nào cửa sổ thay đổi hay di chuyển
Trang 29Vòng lặp chính
• Cuối là gọi glutMainLoop() Tất cả các cửa sổ
đã được tạo ra có thể được hiển thị
• Chương trình sẽ có thể xử lý các sự kiện như chúng xảy ra (click chuột, thay đổi kích thước cửa sổ, vv.) Ngoài ra, gọi lại hiển thị (từ glutDisplayFunc()) được kích hoạt Sau khi vòng lặp này được nhập vào, nó không bao giờ
đã thoát!
Trang 30Bảng dữ liệu, hậu tố trong OpenGL
Hậu tố Kiểu dữ liệu Tương ứng kiểu dữ liệu C Tương ứng kiểu
dữ liệu OpenGL
I 32-bit integer int or long GLint, Glsizei
F 32-bit floating-point Float GLfloat, Glclampf
D 64-bit floating-point Double GLdouble,
GLclampd
Ub 8-bit unsigned integer unsigned char GLubyte,
GLboolean
Us 16-bit unsigned integer unsigned short GLushort
Ui 32-bit unsigned integer unsigned int or unsigned
long
GLuint, GLenum, GLbitfield
Trang 31GL_COLOR_BUFFER_BIT
Thư viện Hàm cơ bản Số lượng đối sô Kiểu dữ liệu
= gl Color 3 f(…)
Trang 32Các kiểu glVertex
• glVertex có đến 24 dạng:
• Chú ý rằng có 12 lệnh có 12 lệnh kết thúc bằng chữ v, cho biết các đối số được cho dưới dạng vecter
glVertex2d() glVertex2f() glVertex3d() glVertex3f() glVertex4d() glVertex4f() glVertex2i() glVertex2s() glVertex3i() glVertex3s() glVertex4i() glVertex4s() glVertex2dv() glVertex2fv() glVertex3dv() glVertex3fv() glVertex4dv() glVertex4fv() glVertex2iv() glVertex2sv() glVertex3iv() glVertex3sv() glVertex4sv() glVertex4iv()
Trang 33Các tiền tố trong OpenGL
Thư viện Bộ hạt nhân Utility Auxiliary WGL Win32 API
tố đặc biệt
Trang 34Xét một chương trình OpenGL tối thiểu
• Xét đoạn mã sử dụng các hàm OpenGL để tạo một đoạn thẳng mầu trắng và nền đen:
Trang 35Đặt mầu xóa
• glClearColor() để thiết lập màu nền ở chế độ
RGBA Bốn đối số của hàm này là các giá trị
có kiểu dữ liệu GLclampf, biểu diễn các thành phần màu: đỏ, xanh lá, xanh dương và alpha
Trang 36RGBA
• RGBA(red, green, blue, alpha) là chế độ màu kết hợp hệ thống RGB với alpha (là thành
phần dùng điều khiển việc trộn màu)
• Giá trị alpha =1 tương ứng độ mờ đục hoàn toàn, giá trị alpha = 0 tương ứng tính trong
suốt hoàn toàn
Trang 37RGB
• RGB(red, green, blue) là chế độ pha trộn hay phương pháp thể hiện màu trên phương tiện dùng nguồn sáng như màn hình màu RGB pha trộn theo tỷ lệ phần trăm các màu cơ bản là đỏ, xanh lá
và xanh dương để tạo nên các màu khác Hệ điều hành windows định nghĩa các tỷ lệ này bằng giá trị 8 bit, gọi là giá trị RGB Giá trị RGB(0,0,0), tức không phần trăm (cường độ thấp nhất) của cả
3 màu cơ bản, cho ra màu đen Giá trị RGB(255,255,255), tức 100 phần trăm (cường độ cao nhất) của cả 3 màu cơ bản, cho ra màu trắng
Trang 38Xóa bộ đệm màu
• glClear() xóa bộ đệm màu với màu xóa hiện hành
• Đối số của nó như một chuỗi các cờ bit cho biết bộ đệm nào cần xóa (hàm không trả về giá trị) Bộ đệm
là vùng bộ nhớ chứa ảnh thực được thể hiện trên màn hình
• OpenGL sử dụng các loại bộ nhớ khác, bao gồm bộ đệm chiều sâu và bộ đệm stencil, để giúp nó xử lý ảnh
Trang 39Xóa bộ đệm màu
• 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
Trang 40Đặt mầu hiện hành
• glColor3f(…) thiết lập mầu vẽ hiện hành
• Mọi đối tượng sẽ được vẽ mầu đã chọn cho đến khi một hàm glColor() khác được gọi
• Có thể tác động một cách sâu sắc đến màu của các đối tượng trên màn hình nhờ vào các thao tác đồ họa như chiếu sáng, tạo bóng, làm mờ
và pha trộn
Trang 41Định nghĩa một hình
• Để tạo một đối tượng hình học từ các vertex, ta bao khối khai báo vertex bằng hai hàm glBegin(param) và glEnd() Tham số param đưa vào cho hàm glBegin()
sẽ giúp OpenGL quyết định vẽ gì từ các vertex khai báo bên trong ví dụ:
Trang 42Tham số cho hàm glBegin()
GL_POINTS Treats each vertex as a single point Vertex n defines point
n N points are drawn
GL_LINES Treats each pair of vertices as an independent line segment
Vertices 2n - 1 and 2n define line n N/2 lines are drawn
GL_LINE_STRIP
Draws a connected group of line segments from the first vertex to the last Vertices n and n+1 define line n N - 1 lines are drawn
GL_LINE_LOOP
Draws a connected group of line segments from the first vertex to the last, then back to the first Vertices n and n + 1 define line n The last line, however, is defined by vertices
N and 1 N lines are drawn
Trang 43Tham số cho hàm glBegin()
GL_TRIANGLE_STRIP
Draws a connected group of triangles One triangle is defined for each vertex presented after the first two vertices For odd n, vertices n, n + 1, and n + 2 define triangle n For even n, vertices n + 1, n, and n + 2 define triangle n N - 2 triangles are drawn
GL_TRIANGLE_FAN
Draws a connected group of triangles one triangle is defined for each vertex presented after the first two vertices Vertices 1, n + 1, n + 2 define triangle n N - 2 triangles are drawn
GL_QUADS
Treats each group of four vertices as an independent quadrilateral Vertices 4n - 3, 4n - 2, 4n - 1, and 4n define quadrilateral n N/4 quadrilaterals are drawn
Trang 44Tham số cho hàm glBegin()
• Giá trị của các vertex trên dựa trên các tọa độ Decarat mặc định thiết lập trong OpenGL Các tọa độ mặc định này tạo nên một khối vuông 2x2x2, với gốc tọa độ (0,0) tại tâm khối vuông
• Hàm glVertex() chỉ là 1 trong 12 hàm có thể
dùng giữa cặp glBegin() và glEnd() Các hàm
đó là : glVertex(), glCallist(), glCallists(),
glColor(), glEdgeFlag(), glEvalCoord(),
glIndex(), glMaterial(), glNormal(),
glTextCoord(),
Trang 45Bảo Đảm Các Thao Tác Vẽ Hoàn Tất
• Chương trình đã thiết lập được mầu xóa, nền xóa, thiết lập được màu vẽ, định nghĩa được các đường thẳng
Trang 48Tài liệu tham khảo
http://msdn.microsoft.com/en-us/library/windows/desktop/dd374278%28v=vs 85%29.aspx
Trang 49Thành Viên Nhóm
1.Đặng Tiến Ngọc
2.Nguyễn Đình Bảo
3.Nguyễn Đình Luật