Bên trên là sơ bộ về OpenGL nói chung và OpenGL ES nói riêng, tiếp theo chúng ta sẽ tìm hiểu 1 số khái niệm cơ bản về 3D trong OpenGL.
Hệ tọa độ 3D
Có 2 loại hệ tọa độ 3D là left hand và right hand như hình.Hai loại hệ tọa độ này cơ bản giống nhau chỉ khác chiều trục z hướng ra ở right hand và ngược lại ở left hand. Trong OpenGL sử dụng hệ tọa độ right hand còn DirectX sử dụng hệ tọa độ left hand.
Trong OpenGL, 1 điểm 3D được xác định trong 1 vùng không gian lập phương NDC(Normal Device Coordination) được giới hạn từ [-1, -1, -1] tới [1, 1, 1], tất cả mọi thứ nằm ngoài giới hạn này sẽ không được hiển thị và tính toán. NDC sử dụng hệ tọa độ left hand để xác định vị trí của 1 điểm 3D như dưới hình:
Vertex
Vertex là 1 điểm trong không gian 3D, nó chứa Position, Normal, Color và Texture coord. Position là tọa độ vị trí của vertex trong không gian 3D, Normal sẽ tìm hiểu sau, Color là màu của điểm và texture coord là tọa độ texture. Các vertex sẽ được nạp vào GPU và từ đó vẽ ra màng hình, kích thước vertex phải tối ưu đến nhỏ nhất có thể để khi dữ liệu vertex từ RAM đẩy ra GPU được nhanh chóng. Hình bên dưới thể hiện 3 vertex được khoanh tròn màu xanh tạo thành 1 tam giác.Edge là 1 đường được tạo ra từ 2 vertex, như hình bên dưới là đường màu đỏ.
Triangle
Là nền tảng cơ bản để vẽ các vật thể phức tạp trong OpenGL, 1 triangle được vẽ từ 3 vertex. Mọi hình khác như đa giác, lập phương,...đến nhà cửa, cây cối đều được vẽ từ hai hay nhiều triangles. Ví dụ để vẽ 1 hình chữ nhật ta sử dụng 1 tam giác(triangle)...sử dụng các triangle để ghép nối tạo ra các hình phức tạp hơn từ nó.Normal vector
Là vector vuông góc với mặt phẳng face. Chiều của vector được xác định theo quy tắt bàn tay phải: chiều nắm tay là thứ tự các đỉnh(hoặc là chiều ngón trỏ), chiều của ngón cái là chiều vector normal.Với thứ tự các đỉnh theo chiều kim đồng hồ thì vector normal sẽ là màu xanh như hình bên dưới.
Normal thường sử dụng trong việc tính toán ánh sáng của vật thể.
Pixel
Đơn giản nó là 1 điểm trên màng hình, màu của nó được xác định bằng cách phối 3 kênh màu là Red, Green và Blue.Texel
Là các pixel trong texture.Fragment
Là các phần trung gian giữa vertex và pixel. Để phân biệt rỏ hơn về vertex, fragment và pixel ta có ví dụ như sau: 2 hình tam giác màu xanh và màu đỏ như bên dưới.Các vertex là các điểm màu xanh lá cây của 2 tam giác(6 đỉnh). Các fragment là vùng màu xanh và màu đỏ(2 tam giác). Các pixel là màu xanh, đỏ và hồng(phần giao giữa 2 tam giác).
Phép chiếu song song và phép chiếu phối cảnh
Phép chiếu song song thường sử dụng trong hiển thị 2D, không thể hiện được chiều sâu cũng như tính chất 3D của vật thể.Phép chiếu phối cảnh sử dụng để thể hiện các vật thể 3D, càng xa thì các kích thước càng giảm và tỉ lệ kích thước trên hình của các vật thể như nhau sẽ khác nhau nếu khoản cách đến mắt khác nhau.
Bên dưới là ví dụ về 2 phép chiếu:
Kênh màu
Mỗi pixel được tạo ra bằng cách kết hợp các màu cơ bản được gọi là các kênh màu gồm Red, Green bà Blue đối với 24bit color và có thêm kênh Alpha nếu là 32bit color.Mỗi kênh màu có 1 giá trị từ 0 đến 255(1 byte), trong GLSL thì giá trị của nó là 1 số float nằm từ 0.0f đến 1.0f(sẽ gặp trong lập trình các shader).
0 nhận xét :
Post a Comment