OpenGL ES 2.0: Thiết lập Chiếu 2D


15

Bài viết này mô tả chung, cách vẽ đồ họa OpenGL 2D sắc nét, sử dụng đường ống chức năng cố định.

Vì OpenGL ES 2.0 không có sẵn một số chức năng ES 1.x (chẳng hạn như: glOrtho ()), chức năng của chúng phải được thay thế trong các trình tạo bóng Fragment / Vertex.

Câu hỏi của tôi là, làm thế nào để thiết lập phép chiếu 2D sau trong đường ống chức năng lập trình?

const XSize = 640, YSize = 480
glMatrixMode (GL_PROJECTION)
glLoadIdentity ();
glOrtho (0, XSize, YSize, 0, 0, 1)
glMatrixMode (GL_MODELVIEW)

Làm thế nào các shader Fragment và Vertex phải được cấu hình để thay thế hoàn toàn thiết lập trình chiếu 2D chức năng cố định đã đề cập ở trên?

Câu trả lời:


12

Trong công cụ OpenGL ES 2.X của tôi, tôi tính toán ma trận MVP (Phép chiếu chế độ xem mô hình) ở phía CPU và đưa nó vào trình tạo bóng đỉnh.

Phép chiếu trực giao là ma trận 4 * 4 . Khi tôi có MVP, tôi tiêm nó vào shader đỉnh với:

 mMvpLoc = getUniformLocation("uMvp");
 glUniformMatrix4fv(mMvpLoc, 1, false, mMvp.pointer());

MMvp là ma trận 4 * 4 của tôi ở phía CPU. GetUniformLocation chỉ có thể được thực hiện một lần sau khi bạn đã tải trình đổ bóng chương trình.

Một ví dụ về shader đỉnh:

uniform mat4    uMvp;
attribute vec3 aPosition;
varying vec4 vColor;

void main() {
   vec4 position = vec4(aPosition.xyz, 1.);
   gl_Position = uMvp * position;
}

Gl_Pocation là một biến đặc biệt được xác định trước. Nó phải chứa vị trí của đỉnh.

Một ví dụ về shader mảnh. Đối với mỗi điểm cần vẽ, màu cuối cùng "gl_FragColor" phải được tính:

#ifdef GL_ES
precision highp float;
#endif

void main(void)
{
   gl_FragColor = vColor;
}

Chương trình này vẽ một hình tam giác với sự làm mịn các màu được xác định cho mỗi đỉnh.

Để có một hướng dẫn tốt hơn, hãy xem tài liệu tuyệt vời này.


Xin chào Ellis, đây là câu trả lời tuyệt vời và đầy đủ. Cảm ơn rât nhiều. Trân trọng.
Bunkai.Satori

9

Từ tài liệu glOrtho, với các giá trị được thay thế:

         2
    ------------       0              0             -1
       XSize
                       2
        0         ------------        0              1
                   - Ysize
        0              0              -2            -1
        0              0              0              1

Lưu trữ ma trận này trong một bộ đồng phục và sau đó bạn có thể áp dụng nó (nghĩa là sản phẩm M. V) cho các vị trí đỉnh đến của bạn.


Bahbar thân mến, Cảm ơn bạn đã trả lời. Về cơ bản, ES2.0 không có gì khác, chỉ cần tạo thủ công thay thế ma trận glOrtho ().
Bunkai.Satori

@ Bunkai.Satori: Vâng, có một chút nữa trong đó, GL tải lên một tổng hợp mô hình và chiếu lên đồng phục.
Bahbar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.