Các công cụ ĐHMT Công cụ Phần cứng Thiết bị ra Thiết bị vào Phần mềm Hàm vẽ cơ bản Hàm với qlý cửa sổ Hàm về máy quay... Chương trình hướng sự kiện • Đáp ứng các sự kiệt như cli
Trang 1Giới thiệu OpenGL
Trang 2Các công cụ ĐHMT
Công cụ
Phần cứng
Thiết bị ra Thiết bị
vào
Phần mềm
Hàm vẽ
cơ bản
Hàm với qlý cửa sổ
Hàm về máy quay
Trang 4Đồ họa độc lập thiết bị: OpenGL
• Cho phép cùng chương trình đồ họa chạy trên nhiều máy khác nhau và cho ra kết quả hầu
như hoàn toàn giống nhau
Trang 5Chương trình hướng sự kiện
• Đáp ứng các sự kiệt như click, di chuyển
chuột, bấm phím, thay đổi kích cỡ cửa sổ Hệ thống quản lý sự kiện theo hàng đợi
• Người lập trình cung cấp các hàm “call-back”
để điều khiển mỗi sự kiện
• Hàm call-back phải được đăng kí với OpenGL
để OpenGL biết hàm nào điều khiển sự kiện nào
• Hàm đăng kí không gọi nó!
Trang 6Cài đặt và cấu hình
• Files: h, lib, dll
– Toàn bộ thư mục gl được đặt trong thư mục
Include của Visual C++
– Toàn bộ các tệp lib được đặt trong thư mục lib
của Visual C++
– Toàn bộ các tệp dll được đặt trong
C:\Windows\System32
Trang 8Thư viện thêm vào thư mục include
• GL, câu lệnh bắt đầu với GL;
• GLUT, GL Utility Toolkit, mở cửa sổ, phát triển thực
đơn và quản lý sự kiện
• GLU, GL Utility Library, cung cấp các hàm mức cao để
điều khiển các thao tác vẽ phức tạp
• GLUI, User Interface Library, được tích hợp vào GLUT
Trang 9Sử dụng OpenGL
• Thay đổi project settings: Visual C++ 6.0
– Project /Settings
– Trong Object/library modules: thêm glui32.lib
glut32.lib glu32.lib opengl32.lib (dùng dấu cách
phân cách)
– Trong Project Options: thêm cùng tập các tệp lib
– Đóng thực đơn Project và lưu workspace
Trang 11Lệnh vẽ cơ bản
• setPixel(x, y, color)
– Pixel tại (x, y) có màu color
– Tên khác: putPixel(), SetPixel(), hoặc drawPoint()
• line(x1, y1, x2, y2)
– Đường thằng giữa (x1, y1) và (x2, y2)
– Tên khác: drawLine() or Line()
Trang 12Lệnh vẽ cơ bản (2)
• current position (cp), vị trí hiện tại
• moveTo(x,y) chuyển vị trí hiện tại đến (x, y)
• lineTo(x,y) vẽ đường thẳng từ vị trí hiện tại
đến (x, y) và thay đổi cp thành (x, y)
Trang 14Khung một chương trình
// include OpenGL libraries
void main()
{
glutDisplayFunc(myDisplay); // register the redraw function
glutReshapeFunc(myReshape); // register the reshape function glutMouseFunc(myMouse); // register the mouse action function glutMotionFunc(myMotionFunc); // register the mouse motion
function
glutKeyboardFunc(myKeyboard); // register the keyboard action
function
…perhaps initialize other things…
}
…all of the callback functions are defined here
Trang 15– Khi không có sự kiện gì xảy ra việc vẽ lại chỉ cần sử dụng
void myIdle() {glutPostRedisplay();}
Trang 16Hàm Callback (2)
• glutMouseFunc(myMouse);
– Handles mouse button presses Knows mouse
location and nature of button (up or down and which button)
• glutMotionFunc(myMotionFunc);
– Handles case when the mouse is moved with one
or more mouse buttons pressed
Trang 17– Chạy liên tục và chờ các sự kiện xảy ra Khi có sự kiện xảy
ra, thì tham chiếu đến hàm callback tương ứng
Trang 18GLUT_RGB); // set the display mode
glutInitWindowSize(640,480); // set window size glutInitWindowPosition(100, 150);
// set window upper left corner position on screen glutCreateWindow("my first attempt");
// open the screen window (Title: my first attempt)
Trang 19
• Terminate program by closing window(s) it is using
Trang 21Giải thích (2)
• glutInitWindowPosition (100, 150) vị trí của góc trên bên trái của cửa sổ
• glutCreateWindow (“my first attempt”) Mở cửa sổ có tên “my first attempt”
Trang 22Kết quả của chương trình
Trang 23Vẽ các điểm trong OpenGL
• Hệ trục tọa độ 0 đến 679 cho trục x và 0 đến
479 cho trục y
• OpenGL vẽ dựa trên các đỉnh (vertices hoặc
corners) Để vẽ một đối tượng trong OpenGL, đặt một danh sách các đỉnh trong glBegin và glEnd
– Danh sách bắt đầu với glBegin(arg); và kết thúc với
glEnd();
– Arg xác định đối tượng vẽ
– glEnd() Gửi dữ liệu vẽ vào luồng OpenGL
Trang 25Hiển thị các điểm
Trang 26Hàm OpenGL
Trang 27Ví dụ về hàm OpenGL
• glVertex2i (…) lấy một giá trị nguyên
• glVertex2d (…) lấy một giá trị thực
• OpenGL sử dụng kiểu dữ liệu của OpenGL
Trang 28Kiểu dữ liệu OpenGL
suffix data type C/C++ type OpenGL type name
b 8-bit integer signed char GLbyte
s 16-bit integer Short GLshort
i 32-bit integer int or long GLint, GLsizei
f 32-bit float Float GLfloat, GLclampf
d 64-bit float Double GLdouble,GLclampd
GLuint,Glenum,GLbitfield
Trang 29Màu trong OpenGL
// set drawing color
– glColor3f(1.0, 0.0, 0.0); // red
– glColor3f(0.0, 1.0, 0.0); // green
– glColor3f(0.0, 0.0, 1.0); // blue
– glColor3f(0.0, 0.0, 0.0); // black
– glColor3f(1.0, 1.0, 1.0); // bright white
– glColor3f(1.0, 1.0, 0.0); // bright yellow
– glColor3f(1.0, 0.0, 1.0); // magenta
Trang 30Màu nền trong OpenGL
• glClearColor (red, green, blue, alpha);
Trang 32Vẽ đường thẳng
• glBegin (GL_LINES); //draws one line
– glVertex2i (40, 100); // between 2 vertices
– glVertex2i (202, 96);
• glEnd ();
• glFlush();
• Nếu có hơn 2 đỉnh trong cặp
glBegin(GL_LINES) và glEnd() chúng được
ghép thành cặp và từng đoạn thẳng tách rời sẽ được vẽ nối giữa các cặp này
Trang 33Mối liên hệ giữa các thiết bị
Trang 34Mối liên hệ giữa các thiết bị (2)
x y
x y
spot at (x,y)
geometric position logical
address
at (639, 0)
at (639, 479)
convert pixel value to color
Trang 35Mối liên hệ giữa các thiết bị (3)
• Based on cathode ray tube (CRT)
y x
deflection coils
electron beam guns
red green
pixel
value