6-Giao diện của cửa sổ và quản lý cửa sổ:
Với những chương trình chỉ cần vẽ đơn giản thì bạn có thể dùng các chương trình trên, nhưng với các chương trình phức tạp sau này chúng ta không thể viết như thể được nữa.Dưới đây tôi sẽ trình bày với các bạn cấu trúc của chương trình trong opengl.
Trước hết là từ khoá CALLBACK, đối với các bạn đã lập trinh WIN API thì có thể hiểu rõ được lệnh này, nhưng có thể nói đơn giản là khi sử dụng thư viện AUX thì ta phải dùng từ khoá này để chỉ định nó.Các chương trình bên trên chúng ta viết đều dùng lệnh Sleep(1000) để bắt window dừng lại cho chúng ta theo dõi, sắp tới đây chúng ta sẽ làm một cách chuyên nghiệp hơn là dùng hàm auxMailLoop() trong thân của hàm main() – hàm chính của chương trình.Tham số của hàm này là con trỏ trỏ đến hàm mà chúng ta vẽ , hiện thị những gì chúng ta muốn(trong chương trình này tham số chính là hàm draw()).Điều gì sẽ xảy ra nếu người dùng thay đổi kích cỡ của cửa sổ? Để thực hiên điều này chúng ta cũng dùng một hàm tương tự như hàm auxMainLoop(),đó là hàm auxReshapeFunc(), tham số của nó cũng là con trỏ chỉ đến hàm mà chúng ta có thể thay đôi thông số của cửa sổ, tham số của nó trong chương trình này là hàm resize().Nếu bạn đã học qua về đồ hoạ máy tính thì sẽ dễ dàng hiểu về toạ độ trong đồ hoạ, hàm glLoadIdentity() có nhiệm vụ thiết định ma trận của toạ độ là ma trận đơn vị.
Mã nguồn dưới đây sẽ cho chúng ta rõ hơn:
/*filename: interface.cpp*/
#ifdef unix
#include
#include "aux.h"
#define CALLBACK
#else
#include
#include
#include
#endif
GLvoid CALLBACK draw(void){ /*chú ý bạn có thể không cần chữ void trong */
glClearColor(0.0,0.0,0.0,0.0); /*khi lập trình với VC, Glvoid là kiểu */
glClear(GL_COLOR_BUFFER_BIT);/*hàm trong opengl, nó tương tụ */
glClearColor(0.0,0.0,0.0,0.0); /*như void trong C hay C++*/
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3d(1.0,0.0,0.0);
glVertex2d(0.1,0.1);
glColor3d(0.0,1.0,0.0);
glVertex2d(0.9,0.1);
glColor3d(0.0,0.0,1.0);
glVertex2d(0.9,0.9);
glColor3d(1.0,0.0,1.0);
glVertex2d(0.1,0.9);
glEnd();
glFlush();
}
GLvoid CALLBACK resize(GLsizei w,GLsizei h)
{
glLoadIdentity();
}
int main(int argc, char *argv[])
{
auxInitDisplayMode(AUX_RGBA);
auxInitWindow(argv[0]);
auxReshapeFunc(resize);
auxMainLoop(draw);
return 0;
}
Sách - Truyện Khác
Lựa Chọn Phương Pháp Mã Hoá Ký Tự Unicode
Đặng Minh Tuấn
Khi Máy Tính Của Bạn Bị Tấn Công
Minh Chung
Khái Quát Về Kết Nối Adsl
Không rõ
Khắc Phục Một Số Lỗi Modem
Không rõ
Kể Chuyện Về Kim Loại
X.I. Venetxki
Keepass 0.93B (Kp): “Két Sắt” An Toàn Cho Mọi Mật Khẩu
Lê Nguyễn Bảo Nguyên
Học Thuyết Darwin, Phật Giáo Và Thiên Chúa Giáo
Tiến sĩ Amarasiri Weeraratne
Hố Đen Cực Lớn Làm Các Nhà Thiên Văn Đau Đầu
Thiên văn vũ Trụ
Hệ Mặt Trời Sẽ Sụp Đổ Như Thế Nào?
Thiên văn vũ Trụ
Gió Hạt Tốc Độ Cao Làm Khí Quyển Mặt Trời Nóng Lên
Thiên văn vũ Trụ
Giáo Trình C++
Khuyết Danh
Giai Điệu Giây Và Bản Giao Hưởng Vũ Trụ
Brian Greene
Gis Và Môi Trường
Không rõ
Dùng Telnet Truy Cập Mail Server Pop3
Vũ Huy Bằng
Địa Đàng Ở Phương Đông
Stephen Oppenheimer
Đạo Phật Siêu Khoa Học
Minh Giác Nguyễn Học Tài
Con Tằm
Vô Danh
Chống Spam Với Postfix Và Spamassassin
Trần Quang Hoàng



