Thôi được, tôi cũng đính chính lại một chút để thỏa lòng mọi người.
Tôi chỉ đề cập tới vấn đề DRIVER CARD và GPU 1 chút mà đã có chuyện.
Khi bạn chạy Autodesk 3D MAX chẳn hạn. Khi khởi động đầu thiết nó cho phép chúng ta thiết lập các thư viện hỗ trợ như OpenGL, DirectX và một cái nữa là software. Điều đó chứng tỏ cái gì, các tông ty phần mềm này đủ sức để làm một thư viện đồ họa cho riêng mình. Còn việc sử dụng OGL hay DX thì còn tùy thuộc vào nhiều cái nữa nữa.
Tôi chỉ nói xử lý hiệu ứng là làm trên BUFFER. Ví dụ một bức ảnh 5000x2000 thì chỉ cần 1 buffer như sau:
Code:
typedef struct TagRGBA{
BYTE Blue;
BYTE Green;
BYTE Red;
BYTE Alpha;
}RGBACOLOR;
RGBACOLOR *pBuff = new RGBACOLOR[5000 * 2000]
Khi load ảnh bạn phải giãi mã được những thông tin này.
Tất cả các thuật toán sẽ được xử lý trên vùng đệm. Các hiệu ứng chủ yếu là sự thay đổi màu sắc các giá trị R,G,B hoặc hoán đổi các phần tử mà thôi.
Ví dụ hiệu ứng Artistic effects
Code:
procedure sketch( I )
For y <- image(min_row) to image(max_row) do
For x <- image(min_column) to image(max_column) do
If random(10) < extent then
O(x,y)<- buf
else
buf <- I(x,y)
end if
end for
end for
end sketch
Một ký hiệu như:
- O(x,y) -> Out IMG (x,y) Giá trị màu sau hiệu ứng
- I(x,y) -> In IMG (x,y) Giá trị màu của IMG ban đầu
Như vậy tối thiểu phải có 2 Buffer mới có thể xử lý được!
Thuật toán này sẽ hiệu ứng như sau:
Tài liệu tham khảo "Image Processing Algorthms"
Đây là một những thuật toán nâng cao và đòi hỏi phải có sự xử lý của CPU. Giai đoạn chờ khi hiệu chỉnh (mà PS thường loading...)
Còn việc ZOOM như chính tác giả đề cập tại sao chương trình bị chậm!
Hãy test 1 ví dụ: Mở Paint ra và mở 1 file ảnh chừng 800x600.
- Chúng ta chọn công cụ ZOOM và phóng ra. Tức thì hình ảnh sẽ được phóng to và ngược lại rất nhanh. Đây là giai đoạn mà GPU xử lý nó chỉ phóng to (vẽ những khoảng BUFFER cần thiết) mà không tác động điều chỉnh lên nội dung BUFFER.
- Nhưng chúng ta chọn menu Image->Stretch và nhập H:500% V:500%. Nhấn OK. kết quả hiện ra cũng là 1 hình ảnh to như vậy nhưng phải chờ một chút để CPU xử lý
Có lẽ 2 người sẽ hiểu tại sao tôi phải nói đến GPU ở đây!
Khi render 1 img thì chắc chẳn phái đưa qua RAM VGA và nhờ GPU xử lý rồi đưa lên màn hình hoặc tệ lắm cũng phải dùng 2 Buffer để Swap (nhưng ruốt cuộc cũng phải qua VGA RAM) chứ không thể SetPixel được bởi vì lúc này sẽ làm chương trình rất chậm trong giai đoạn vẽ. Ai phủ định không có sự tham gia của GPU thì hãy coi lại dây tín hiệu của Monitor có gắn vào CardMH hay không?
Và đó là con đường duy nhất để hiện thị hình ảnh lên vi tính như ngày nay nhưng bạn có đủ khả năng để viết 1 LIB đẩy trực tiếp BUFFER ra Card đồ họa rồi vẽ hay không? DX và OGL là hai phương pháp hiện thời mà tôi đề cập.
Những thành tựu của công nghệ đồ họa trong những năm 1900 phát triển gần đây mạnh như vũ bão.
Tại sao
- RAM của Card MH càng ngày càng lớn?
- Chip xử lý ngày càng nâng cấp phiên bản?
- Bằng thông giao tiếp với Main càng tăng (AGP8X: 2.14Gb/s nhưng ngày nay PCIEx x16 8B/s).
-> Tất cả là vì đồ họa.
Trong con Chip đồ họa như ATI và NVIDIA đã có những chương trình xử lý ảnh rất cơ bản rồi ví dụ như:
- Xoay
- Tỷ lệ (Phóng ngang, phóng dọc, Đảo nghịch theo trục X, Y)
- Tịnh tiến đi chuyển
- Các kỹ thuật như xử lý răng cưa
- Kỹ thuật Blend (ghép 2 ảnh có độ alpha).
- Các thuật toán vẽ đường thẳng, tô màu...
Và GPU sẽ chạy các chương trình đó!
Tuy nhiên vận dụng những điều này như thế nào?
Chúng ta chỉ cần đưa Buffer này vào RAM của VGA.
Rồi sau đó chạy một số lệnh cho CHIP đồ họa xử lý ví dụ như xoay (glRotation -> Lib OGL)
Nó sẽ Render ra màn hình.
Sau đó chúng ta sẽ copy kết quả ngược lại từ RAM VGA -> BUFFER! Tôi nghĩ đây là phương pháp nhanh.
Và nói đến OGL hay DX đa số thường nghĩ nó là 3D nhưng nó hỗ trợ đầy đủ các phép chiếu 2D, các thuật toán để làm việc trên đồ họa Vector lẫn Pixel. Do đó khi nhắc tới OGL người ta thường nói tới từ "chuẩn".
Hy vọng bạn sẽ hình dung ra những gì tôi nói!
Bookmarks