01/10/2018, 09:24

Lập trình đồ họa với OpenGL

Chào các bạn. Mình đã tự học OpenGL được một thời gian rồi. Mục tiêu mình là đi chuyên sâu vào đồ họa nên mình mới học về OpenGL cũng như các môn toán liên quan.
Đây là sản phẩm mình đang phát triển: https://www.youtube.com/watch?v=EOvexANgNAQ&index=5&list=PLGYYiX8Kj9K3RYi7X-zqCyB_tTvg-1ILh

Bởi vì học chán quá nên tìm các bạn đang học hoặc có ý định học kết bạn lập nhóm để trao đổi cho vui. :v

Phương Trọng Lê viết 11:35 ngày 01/10/2018

Dùng forward hay deferred shading vậy em

Thái Nhật Minh viết 11:30 ngày 01/10/2018

Forward Shading a. Deferred Shading e chưa có tìm hiểu. Tại vì e thích Game Architecture hơn. Mà máy e card cái con Intel HD nên OpenGL chỉ được tới 3.1

Phương Trọng Lê viết 11:39 ngày 01/10/2018

Ừa, nếu làm animation thôi thì cũng không cần tới Deferred đâu, với lại cũng không nhiều model nên dùng forward nhẹ hơn. A k biết e dùng Intel HD đời mấy nhưng nhìu dòng Intel HD vẫn render đủ đáp ứng và chơi được kha khá game 3D, nhưng trong clip của e thì khá là giật lag. Có vẻ e chưa tối ưu tốt, e nên chia sẽ bớt những phần tính toán nhất là logic và các phép chia, sin, cos… cho application level thay vì đẩy qua shading level tính hết. Mà e tính ligting bằng công thức gì, Phong hay Blinn-Phong.

Phạm Minh Anh Hữu viết 11:38 ngày 01/10/2018

Anh có thể chia sẻ cho em tài liệu mà anh tự học được không ạ , em cũng muốn học OpenGL lắm.

Bùi Thế Khải viết 11:25 ngày 01/10/2018

anh học ở đâu vậy ? cho em học cùng với

Thái Nhật Minh viết 11:26 ngày 01/10/2018

E toàn để MVP bên shader. Không biết như thế có ổn không.Lighting e tính bằng Phong shading a. E không hiểu sao FPS lại thấp đến như thế. Nếu render Sky không thì được 500FPS. Thêm vào Terrain thì được tầm 200FPS. thêm skeleton model vào thì tụt xuống 30FPS. e đang đã thêm Frustum Culling cho skeleton model thì FPS cải thiện được một ít nhưng không quá nhiều. E đang định thêm Frustum Culling cho Terrain mà không biết làm thế nào.

Thái Nhật Minh viết 11:26 ngày 01/10/2018

Bùi Thế Khải và Phạm Minh Anh Hữu: Mục đích bạn học OpenGL để làm gì ? nếu để cho biết thì khuyên là đừng nên học.

Phương Trọng Lê viết 11:26 ngày 01/10/2018

Không nên để MVP bên shading đâu e, vì nếu vậy e phải stream 3 matrix qua. E nên tính MVP bên application xong rồi stream matrix kết quả qua sẽ tiết kiệm thời gian hơn, bởi vậy e dùng animation nó tuột fps thảm thương là phải rồi. Với lại e nên dùng Blinn-Phong thay vì Phong shading, nó không khác nhiều Phong shading đâu, chỉ khác quá trình tính specular color thôi, nó giúp e lượt bỏ quá trình tính reflect vector, mà dùng 1 mẹo khác để thay thế nhưng màu sắc tính ra k khác gì Phong shading nhưng hiệu năng cải thiện rất đáng kể. Mà hình như e chạy ở chế độ debug đúng không, đổi qua chạy ở chế độ release đi fps sẽ cải thiện nhiều lắm.

Phương Trọng Lê viết 11:40 ngày 01/10/2018

Việc dùng Frustum Culling cho Terrian khá là phúc tạp đó e, có khi còn kéo fps xuống nữa, thay vì Culling thì e thử dùng Tesselation xem sao.

Thái Nhật Minh viết 11:30 ngày 01/10/2018

Máy e chạy OpenGL 3.1 không hỗ trợ Geometry Shader huống gì Tesselation Shader. E thử chuyển sang Release chạy bị lỗi mặc dù ở Debug chạy ngon lành.

Thái Nhật Minh viết 11:40 ngày 01/10/2018

Sau khi e sửa lại hết Shader thì FPS cải thiện đáng kể. Thêm Frustum Culling nữa thì được 100FPS. Hiện tại e cải thiện hiệu suất cho phần cập nhật của skeleton animation.

Phạm Minh Anh Hữu viết 11:33 ngày 01/10/2018

Em không học cho biết, em nghĩ sẽ theo về phần đồ hoạ máy tính, game 3D. Biết là khó nhưng em muốn học và theo nó.

Thái Nhật Minh viết 11:24 ngày 01/10/2018

Nếu e đã nói thế thì đầu tiên e nên học toán 3D. A có thể giới thiệu cuốn 3D Math Primer for Computer Graphic. Cuốn này đề cập đến những kiến thức toán cơ bản nhất cho đồ họa. OpenGL thì e có thể tìm cuốn OpenGL SuperBible hoặc OpenGL Programming Guide tùy theo phiên bản OpenGL trên máy e mà học. Đó là những kiến thức nền cơ bản cùa đồ họa.

Phạm Minh Anh Hữu viết 11:39 ngày 01/10/2018

Cảm ơn anh giới thiệu về 3 cuốn sách, phiên bản OpenGL trên máy em là 4.0

Bùi Thế Khải viết 11:37 ngày 01/10/2018

game, 3d , đồ họa, phim 3d/animation blablabla …

Phạm Minh Anh Hữu viết 11:39 ngày 01/10/2018

Chào anh, em có 1 thắc mắc nhỏ mong anh giải đáp.
Bên Vertex Shader em để là
gl_Position = P * V * M * pos; thì thứ tự thực hiện từ phải qua trái à, hay là do toán tử * của 1 matrix với 1 vector được ưu tiên hơn với 2 matrix.
Còn nếu em để MVP bên app: matResult = M * V * P; cũng bị sai còn sửa ngược lại matResult = P * V * M; thì đúng. Em dùng thư viện glm, thế thứ tự thực hiện phép nhân này sao lại từ phải qua trái ?

Thái Nhật Minh viết 11:24 ngày 01/10/2018

Chào e. Đầu tiên là phép toán gl_Position = P * V * M * pos; Phép toán này đầu tiên được tách ra thành P * V * M sau đó mới nhân cho pos. Trong GLSL thì ma trận theo thứ tự là column-major nên các phép biến đổi sẽ được thực hiện từ phải qua trái. Sau đó kết quả của phép biển đồi này mới được nhân cho pos.

Thứ 2 là phép toán matResult = M * V * P; Trong glm thì ma trận cũng được lưu theo column-major nên phép biến đổi cũng là từ phải qua trái. mat4 của nó chứa 4 cột của ma trận.

Phạm Minh Anh Hữu viết 11:30 ngày 01/10/2018

Dạ em cảm ơn anh, anh cho em hỏi nữa là nếu là ma trận row-major thì sẽ nhân theo trái qua phải đúng không ạ, và column-major khác với row-major như thế nào.
Em thấy có 2 cái Transformation Matrix là:

Cái thứ nhất:
[ 1 0 0 x ]
| 0 1 0 y |
| 0 0 1 z |
[ 0 0 0 1 ]
Cái thứ hai:
[ 1 0 0 0 ]
| 0 1 0 0 |
| 0 0 1 0 |
[ x y z 1 ]

Thì cái matrix đầu là theo column-major còn cái thứ 2 là row-major phải không ạ?
Và với row-major thì nhân pos với matrix là nhân 2 matrix này:

[ pos.x pos.y pos.z 1] * M 

Em nói như trên đã đúng chưa anh.

Bài liên quan
0