1. Trang chủ
  2. » Công Nghệ Thông Tin

Giới thiệu và tổng quan thư viên OpenGL và GLUT doc

49 1K 17

Đ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 49
Dung lượng 0,95 MB

Nội dung

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 1

OPENGL

Giới thiệu và tổng quan thư viên

OpenGL và GLUT

Trang 2

Giớ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 3

Khô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 4

Cá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 5

cơ 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 6

Các trò chơi được viết với OpenGL

• Hẳn các bạn đều biết game này?

Trang 7

Hình ảnh

Khúc xạ dùng OpenGL

Trang 8

Trò chơi dùng OpenGL

Trang 9

Kết cấu di dộng dùng OpenGL

Trang 10

Tà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 11

Thư 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 12

Cá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 13

OpenGL 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 14

Cài đặt OpenGL

Cài đặt trên Windows

Cài đặt trên Mac OS X Cài đặt trên Linux

Trang 15

Cà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 16

Cà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 20

Tạo Project

Trang 21

Cấu trúc chương trình openGL đơn giản

Trang 22

Khở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 23

glutInitDisplayMode()

• Đ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 26

Tạ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 27

Chứ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 28

Chứ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 29

Vò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 30

Bả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 31

GL_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 32

Cá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 33

Các tiền tố trong OpenGL

Thư viện Bộ hạt nhân Utility Auxiliary WGL Win32 API

tố đặc biệt

Trang 34

Xé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 36

RGBA

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

RGB

• 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 38

Xó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 39

Xó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 42

Tham 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 43

Tham 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 44

Tham 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 45

Bả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 48

Tài liệu tham khảo

http://msdn.microsoft.com/en-us/library/windows/desktop/dd374278%28v=vs 85%29.aspx

Trang 49

Thành Viên Nhóm

1.Đặng Tiến Ngọc

2.Nguyễn Đình Bảo

3.Nguyễn Đình Luật

Ngày đăng: 29/06/2014, 07:20

HÌNH ẢNH LIÊN QUAN

Hình ảnh - Giới thiệu và tổng quan thư viên OpenGL và GLUT doc
nh ảnh (Trang 7)
Bảng dữ liệu, hậu tố trong OpenGL - Giới thiệu và tổng quan thư viên OpenGL và GLUT doc
Bảng d ữ liệu, hậu tố trong OpenGL (Trang 30)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w