7-Quan sát – Khung nhìn:
Chương trình trên, khi bạn thay đôi kích cỡ có lúc bạn không nhìn thấy hình vuông mà chúng ta đã vẽ nữa, tại sao lại như vậy?Câu trả lời nằm trong chương trình dưới đây:
/*filename: view.cpp*/
#ifdef unix
#include
#include "aux.h"
#define CALLBACK
#else
#include
#include
#include
#endif
GLvoid CALLBACK draw(void){
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.0,0.0,0.0,0.0);
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();
glViewport(0,0,w,h); /*hàm mới*/
glOrtho(-1.0,1.0,-1.0,1.0,0.0,1.0); /*hàm mới*/
}
int main(int argc, char *argv[])
{
auxInitDisplayMode(AUX_RGBA);
auxInitWindow(argv[0]);
auxReshapeFunc(resize);
auxMainLoop(draw);
return 0;
}
Tôi sẽ giới thiệu với các bạn thế nào là Viewport.Viewport xác định cổng nhìn cho chúng ta, tức là phần không gian trên cửa sổ window ma người quan sát được phép quan sát.Nó chính là một hình chữ nhật.Hai tham số đầu tiên của hàm này xác định toạ độ của đỉnh trên cùng phía tay trái của hình chữ nhật, hai toạ dộ sau xác định chiều rộng và chiều cao của hình chữ nhật ấy.Với các tham số trên ta có thể thấy , chương trình trên cho phép ta quan sát toàn bộ màn hình.
Tiếp theo là kiểu nhìn glOrtho().Quan sát hình vẽ dưới đây:
Như bạn đã thấy trên hình, hàm glOrtho(), xác lập một ma trận cho phép chúng ta nhìn theo kiểu như hình vẽ, đây là hàm tổng quát:
void glOrtho(GLdouble left, GLdouble right, GLdouble bottom,
GLdouble top, GLdouble near, GLdouble far);
Tương ứng với chương trình trên của chúng ta left là –1.0, right là 1.0, bottom là –1.0, top là 1.0, near là 0.0 và far là 1.0.
Trong phần này tôi muốn trình bày thêm một hàm số nữa.Các chương trình trên đều tạo cửa sổ với chiều dài và rộng xác đinh, muốn tạo một cửa sổ có kích cỡ theo ý muốn bạn dùng hàm sau: auxInitPosition(), nó có 4 thông số là toạ độ x, y của đỉnh trên bên tay trái của cửa sổ, chiều rộng và chiều dài của cửa sổ.Dưới đây là mã nguồn:
/*filename : size.cpp*/
#ifdef unix
#include
#include "aux.h"
#define CALLBACK
#else
#include
#include
#include
#endif
GLvoid CALLBACK draw(void){
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.0,0.0,0.0,0.0);
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();
glViewport(0,0,w/2,h/2);
glOrtho(-1.0,1.0,-1.0,1.0,0.0,1.0);
}
int main(int argc, char *argv[])
{
auxInitPosition(200,100,640,480); /*hàm mới*/
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



