OpenGL – C++ Bài 4: Tìm Hiểu Về Model View và Phép Chiếu trong OpenGL
Hi. Chào mừng các bạn đến chủ đề Học Lập Trình OpenGL tại blog phát triển phần mềm 123az
Trong bài viết tiếp theo này. Chúng ta sẽ cùng bàn luận và tìm hiểu về Model View và phép chiếu trong opengl.
1. View – Model Trong OpenGL
* Model: Hiểu đơn giản chính là đối tượng đồ họa 3d mà chúng ta đang cần mô phỏng, tạo dựng.
Model có thể là một điểm, hoặc một tập hợp các điểm tạo dựng lên một vật.
Và trong bài số 3:
Để dịch một đối tượng, chúng ta có thể sử dụng glTranslate
Để quay một đối tượng, chúng ta có thể sử dụng glRotate.
glTranslate và glRotate sẽ thực hiện việc thay đổi ma trận model để thực hiện quá trình tịnh tiến và quay vật.
* View: Là camera chiếu vào đối tượng, hoặc nó được coi như là mắt của chúng ta nhìn vào đối tượng.
View là một cameral nên nó có các tham số như sau:
+ Vị trí đặt của cameral trong hệ tọa độ.
+ Điểm trên model mà cameral nhìn vào.
+ Hướng để xác định cameral quay xuôi hay quay ngược, gọi là vector chỉ hướng
(Ví dụ các bạn cầm máy ảnh xuôi, tặt đặt vào nút bấm,
thì vector chỉ hướng là hướng từ dưới lên trên, trong hệ toạn độ của opengl nó là vector OY.)
Để thiết lập được các tham số của cameral thì người ta sử dụng câu lệnh:
gluLookat(eye_x, eye_y, eye_z, model_x, model_y, model_z, up_x, up_y, up_z);
Ví dụ: gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
=> Cameral sẽ đặt tại vị trí (0, 0, 10), nhìn thẳng vào điểm có tọa độ O(0, 0, 0) và hướng up cameral là hướng y.
Hãy xem hình minh họa dưới đây.
=> Như vậy điểm nhìn của cameral không nằm trên model thì cameral sẽ ko nhìn thấy vật.
2. Phép Chiếu trong OpenGL.
Là kiểu mà Cameral Chiếu vào đối tượng để thu lại hình ảnh. Và trong openGL có hai phương pháp chiếu.
2.1 Phép Chiếu trực giao:
Là phép chiếu mà khoảng cách của vật tới cameral không ảnh hưởng tới độ lớn của vật.
Nghĩa là vật dù ở xa hay ở gần thì kích thước của chúng vẫn là như vậy.
Và phép chiếu này thì vùng chiếu thể hiện bởi một hình hộp chữ nhật với 6 chiều như sau:
[Left – Right] [Bottom – Top] [Near- Far]
Hãy nhìn hình vẽ dưới đây và chúng ta cùng phân tích.
=> Vùng chiếu thể hiện bởi hình hộp chữ nhật và hình hộp đơn vị sẽ có kích thước là 1 ứng với giá trị âm dương cho 6 hương như câu lệnh glOrthor ở trên.
=> Tham số near và Far chỉ có tác dụng tăng phạm vi vùng chiếu để nhìn được các vật ở gần hơn, hoặc xa hơn chứ ko làm thay đổi kích thước vât.
=> Vật di chuyển vào gần quá hoặc xa quá, hoặc ra khỏi vùng chiếu thì sẽ ko được nhìn thấy trên cameral
=> Vật sẽ bé lại hoặc to hơn phụ thuộc vào kích thước của giá trị tham số trong hàm glOrthor.
Ví dụ muốn nhìn vật nhỏ hơn. Chỉ việc tăng kích thước giá trị lớn hơn 1.
Và điều đó đồng nghĩa vùng chiếu sẽ mở rộng hợn và nhìn được nhiều vật hơn.
Để sử dụng được phép chiếu này dùng câu lệnh như sau:
1 2 3 4 5 6 7 8 9 |
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrthor(-valuleX, valueX, -valueY, valueY, near, far ); |
2.2 Phép Chiếu Phối Cảnh.
Vùng chiếu được thể hiện bởi một hình chóp cụt.
=> Vật càng gần cameral thì trông sẽ càng to hơn và càng xa cameral thì càng nhỏ hơn,
=> Giá trị càng tăng thì vùng chiếu càng mở rộng và vật cũng nhỏ dần
=> Near Far quyết định đến việc các vật ở xa được trông thấy hoặc các vật ở gần bị mất đi khi nó thay đổi giá trị.
Sử dụng một trong 2 câu lệnh như sau để thực hiện phép chiếu này
1 2 3 4 5 6 7 8 9 |
glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-0.5, 0.5, -0.5, 0.5, 1, 8); |
Hoặc
1 2 3 4 5 6 7 8 |
GLfloat aspect = (GLfloat)width / (GLfloat)height; glMatrixMode(GL_PROJECT) glLoadIdentity(); glPerspective(45.0f, aspect, 0, 100); |
Bài này sao ko có video phía dưới a ơi
bài này ko có video sao a!