Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 30 kết quả

Đề tài: [Computer graphics] Có bạn nào thích lập trình đồ họa không!

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Mặc định [Computer graphics] Có bạn nào thích lập trình đồ họa không!

    Mình rất thích lập trình về computer graphics và xử lý ảnh!
    Không biết có bạn nào thích như mình không ?!
    Nếu có thì mình lập topic thảo luận các vấn đề liên quan nha đến phần này nha!

    Mình đang viết một bộ thư viện đồ họa, tất cả đều dùng thuật toán nên gặp rất nhiều khó khăn + thời gian nửa!
    Nếu có nhiều người cùng tham gia giải quyết các vấn đề thì sẻ tốt hơn nhiều!

    Mong nhận được thông tin từ các bạn!

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Mình đang viết một bộ thư viện đồ họa, tất cả đều dùng thuật toán nên gặp rất nhiều khó khăn + thời gian nửa!
    Nếu có nhiều người cùng tham gia giải quyết các vấn đề thì sẻ tốt hơn nhiều!
    Omg, bạn viết tới cả thư viện thì quá pro rùi T_T, bạn nên chỉ dẫn mọi người thì đúng hơn . Hay bạn post 1 topic chỉ về lập trình với openGL trên Visual C++ đi, mình cũng mới đọc sơ sơ về openGL à T_T ! Và mình cũng thích đồ hoạ 1 tí hì hì !

  3. #3
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Bạn có thể tham gia nhóm CNPM trong forum. Mình sẽ hỗ trợ để bạn nghiên cứu đồ họa máy tính 1 cách tốt nhất.

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Omg, bạn viết tới cả thư viện thì quá pro rùi T_T, bạn nên chỉ dẫn mọi người thì đúng hơn . Hay bạn post 1 topic chỉ về lập trình với openGL trên Visual C++ đi, mình cũng mới đọc sơ sơ về openGL à T_T ! Và mình cũng thích đồ hoạ 1 tí hì hì !
    Cái mình viết là bắt đầu vẻ lại những thứ đơn giản như line,circle rồi đến xử lý ảnh bằng cách tính từng pixel một chứ không dựa trên OpenGL hay DirectX đâu bạn ơi! Nói chung là mình cũng làm được một số thứ rồi, đến phần gradient cho n điểm thì bị "kiệt sức" ^_^!
    Mới làm xong phần gradient ngày hôm qua nhưng chạy vẩn còn chậm lắm!

    Bạn có thể tham gia nhóm CNPM trong forum. Mình sẽ hỗ trợ để bạn nghiên cứu đồ họa máy tính 1 cách tốt nhất.
    Tham gia nhóm cũng tốt nhưng thời gian của mình hạn hẹp lắm, chỉ sợ làm trể tiến độ của mọi người thôi!

  5. #5
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Hiện tại mình đang làm 1 project. Project đúng hơn là 1 FrameWork, có nghĩa là mình muốn xây dựng lại toàn bộ thư viện GUI. Lý do tại sao mình sẽ giải thích sau.

    Cụ thể mình đã xây dựng được lớp WindowGraphics có khả năng vẽ nhưng thực chất nó CALLBACK lại từ GDI. Bên cạnh đó mình cũng xây dựng thêm lớp Image và đã encode được file BMP (dĩ nhiên cần phải thêm PNG, JPG...) thành 1 buffer 32 bit. Và có thể xử lý ảnh bên đó. Đồng thời từ Image có thể vẽ qua WindowGraphics và lên màn hình dựa trên SetStretchDIB của GDI.

    Hiện tại mình tạm dừng Image (Image Processing) ở đây mà và past qua làm phần Draw Text cho WindowGraphics để hoàn thành nốt phần này. Nếu bạn có thể giúp mình thực hiện trên Image với các thuật toán như Xoay, Smooth, AlphaBlend, DrawLine....thì quá tốt

    Mình đang dịnh xây dựng lại các thuật toán vẽ đường thẳng, đường tròn trên đối tượng Image của mình (yêu cầu đặt ra phải có Antialising... ).

    Bạn đang cần một bộ thư viện Đồ Họa, còn mình đang cần 1 GUI. Biết đâu lại 2 ý tưởng gặp nhau.

    Không biết ý kiến của bạn thế nào?
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 09-03-2008 lúc 12:35 PM.

  6. #6
    Ngày gia nhập
    10 2007
    Bài viết
    169

    Mặc định [Computer graphics] Có bạn nào thích lập trình đồ họa không!

    Đồng ý!
    Nhưng yêu cầu của mình về phần code optimize cao lắm à nha (đồ họa thì phải ưu tiên speed chứ ^_^)

    Bạn có thể nói rỏ hơn về GUI của bạn được không (như cấu trúc,...)

    Về phần lib của mình, có những phần sau:

    + GImage :
    thực ra là một cái array chứ thông tin từng pixel trên ảnh
    Có thêm một số hàm liên quan để xử lý đơn giản cho nó (như resize,...)
    + G2D : Chứa thông tin cần thiết để vẻ cái GImage đó ra màng hình
    + GDrawing : Vẻ các hình nói chung
    + GDrawingGradient : Chuyên vẻ gradient (đang làm)

    Tàm thời mình chỉ làm tới đây thôi, vì phần optimize làm mình mất nhiều thời gian quá!

    Với cái lib này bạn có thể sử dụng rất đơn giản như sau :
    Code:
    	// Khởi tạo GImage, GImage giống như một tờ giấy để bạn vẻ lên thôi
    	CGImage32* pGImg32 = new CGImage32();
    
    	CG2D* pG2D = new CG2D(GetWindowDC()->GetSafeHdc(),*pGImg32);
    
    	// Khởi tạo GDrawing để vẻ, GDrawing giống như cây viết thôi
    	// CGDrawing2D(pGImg32) : Cái này là cho biết GDrawing cần vẻ vào đâu
    	CGDrawing2D* pDrawing = new CGDrawing2D(pGImg32);
    	CGDrawingGradient2D* pDrawingGradient = new CGDrawingGradient2D(pGImg32);
    
    	// Phần khởi tạo đến đây là xong, có thể bắt đầu vẻ rồi!
    	// VD : pGDrawing->Line(100,100,200,200,0xff0000ff);
    Cuối cùng là hiển thị hình ảnh ra màng hình!

    Code:
    	// Vẻ tại vị trí 100x100
    	pG2D->Paint(100,100);
    Khi khởi tạo G2D có đoạn code :
    Code:
    	CG2D* pG2D = new CG2D(GetWindowDC()->GetSafeHdc(),*pGImg32);
    Hàm GetWindowDC()->GetSafeHdc() sẻ truyền HDC của window vào G2D để cho G2D biết cần phải vẻ image vào DC nào thôi!

    Khi bạn viết GUI thì dĩ nhiên sẻ có HDC của vùng cần hiện hình ảnh ra, chỉ cần truyền nó vào là được!

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Được rồi.

    Có lẽ mình phải nói về GUI của mình trước. Mình muốn viết GUI này là For LINUX chứ ko hẵn là Windows. Và mình đã quyết định sharecode (open source)

    Mình bắt đầu làm sau tết này, và gần 1 tháng nay thì công việc vẫn tiến triển đều đặn.

    Ý tưởng cụ thể của mình là đưa ra 1 khung FrameWork riêng như vầy nè:

    C++ Code:
    1. // Do mình viet
    2. #include "OpenGUI.h"
    3.  
    4. // Minh dat ten NAMESPACE
    5. using namespace OpenGUI;
    6.  
    7. int WINAPI WinMain(HINSTANCE hInst,HINSTANCE, LPSTR lpCmd, int nShow){
    8.     CMyWindow *pForm = new CMyWindow;
    9.    
    10.     pForm->Create(
    11.         L"OpenGUI TEST",
    12.         10,10,400,400,
    13.         NULL,L"MyApp",hInst);  
    14.  
    15.     pForm->Window_Show();
    16.     pForm->Run();
    17.  
    18.     return true;
    19. }

    OK chứ!

    Tiếp tục:

    C++ Code:
    1. class CMyWindow : public ZForm
    2. {
    3. public:
    4.     CMyWindow(void);
    5.     ~CMyWindow(void);
    6.    
    7.     void Event_Window_OnCreate(){
    8.        
    9.     }
    10.  
    11.     void Event_Mouse_Over( ZMouseEvent m, int x, int y){       
    12.        
    13.     }
    14.    
    15.     void Event_Mouse_LeftButton_Up( ZMouseEvent m, int x, int y){
    16.        
    17.     }
    18.  
    19.     void Event_Window_OnPaint(ZWinPaintGraphics* pG ){     
    20.                
    21.     }
    22. };

    Sơ lược các lớp về OpenGUI:


    Các phương thức về Graphics


    ZIMAGE mình làm vẫn còn sơ sài


    Test thử 1 đoạn CODE nha:
    C++ Code:
    1.     void Event_Window_OnPaint(ZWinPaintGraphics* pG ){             
    2.         ZString MyString;
    3.         ZFont MyFont;
    4.         ZImage Img;
    5.         int w,h;
    6.                
    7.         Img.Load_FromFile( L"BMP/UbuntoLogo.bmp" );
    8.         Img.Draw(pG, 0, 0);
    9.         Img.Get_WH( &w, &h );
    10.  
    11.         this->Window_Set_WH( w, h );
    12.         this->Window_Set_Caption(L"Hello OpenGUI");
    13.  
    14.         MyString = L"Xin chào OpenGUI";
    15.        
    16.         MyFont.Create_Font( 50, L"Tahoma" );
    17.         MyFont.Set_Font_Bold();
    18.         MyFont.Set_Quality_Antialiased();
    19.        
    20.         pG->Set_Text_BkTransparent(true);
    21.         pG->Select_Object( &MyFont );
    22.         pG->Set_Text_Color( ZColor(255,0,0,0) );
    23.         pG->Draw_TextXY( 20, 20, MyString );
    24.     }



    Tất cả những gì liên quan tới HDH như hwnd, hdc mình đã giấu sau các lớp đồng thời định nghĩa lại các #define riêng cho mình.

    Quay lại về ZImage.
    Mình đã ENCODE ra thành 1 buffer 32 bit. Có nghĩa là 1 mảng ARGB dưới dạng BYTE* dĩ nhiên đưa về mảng thì phải ép kiểu. Mình cần những thuật toán riêng trên ZImage như Line, Circle,... các hiệu ứng Fillter để xây dựng lớp ZMemGraphics có khả năng hoán đổi với ZGraphics. Có lẽ bạn hiểu ý mình.

    Bạn cũng đã làm 1 Image riêng. Có lẽ chúng ta sẽ nên trao đổi SOURCE và tiếp tục hoàn thành hoàn thiện hơn. Nhưng có lẽ phải 1 tuần nữa mới đưa SOURCE cho bạn được vì mình cần thời gian để hoàn thiện Graphics2D.

    Hiện tại mình chỉ mới xây dựng phần đồ họa, trước khi hoàn thành OpenGUI mình muốn nó phải là 1 Engine Game trước, có nghĩa là mình phải xây dựng thêm 1 class Graphics3D nữa dựa trên OPENGL.
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 09-03-2008 lúc 03:24 PM.

  8. #8
    Ngày gia nhập
    10 2007
    Bài viết
    169

    - Bạn khỏi lo là chạy trên linux hay windows vì cái lib của mình chỉ sử dụng duy nhất một hàm API của windows là SetDIBToDevice(), còn lại đều là thuật toán!

    Cái lib của mình hơi khác so với cái của bạn! Nó không cần biết bạn chạy trên flatform nào, nó sẻ vẻ mọi thứ vào một array (như cái ZIMAGE của bạn)! Chỉ cần flatform mà nó đang chạy có thể vẻ cái array đó ra màng hình là được!

    Cái khác biệt lớn nhất mình nghĩ là mình không dùng bất cứ một hàm nào có sẳn cả, vì vậy khó có thể gộp chung với lib của bạn! Nhưng mình nghĩ có thể giúp bạn phần vẻ và xử lý ảnh vì mấy cái đó chỉ dùng thuật toán thôi!

    Mình cũng mới vừa thay đổi cấu trúc của lib vì vậy phải mất thời gian gom các hàm lại!

    Cơ bản nó có một số thứ như sau :

    + GImage :


    Mình định thêm một số tính năng nửa nhưng định gom hết các hàm lại rồi mới thêm vô!

    + GDrawing2D


    + GDrawingGradient2D
    Cái này mình đang làm và thật sự tốn rất nhiều thời gian vì phải tính toán mấy cái thuật toán!
    Chì có một số hàm cơ bản thôi! Còn mấy cái gradient khác chưa làm kịp



    Mình làm theo kiểu là làm tới đâu thì test tới đó chứ không liệt kê kết các tính năng ra vì vậy chỉ có một số thứ đang làm để cho bạn xem thôi!









    Chắc thứ 3 mới liên lạc với bạn được, mai bận mất rồi!

    À quên, còn phần image processing,... thì mình chưa gom lại hết nên chắc bạn phải chờ thôi ^_^!
    Đã được chỉnh sửa lần cuối bởi RadicalLight : 09-03-2008 lúc 08:35 PM.

  9. #9
    Ngày gia nhập
    01 2008
    Nơi ở
    Gameloft Studio
    Bài viết
    294

    Khá ấn tượng đó, những thứ mà mình cần thì bạn đã làm sẵn rồi.

    Thật ra thì cái ZGraphics đó hầu hết là GDI. Do đó mình đang tính xây dựng ZMemGraphics với các hàm mà mình viết, ý tưởng giống hệt của bạn đó. Bởi vì mình cần nó để vẽ lại các Control như Button, CheckBox... trên LINUX và custom draw lại các Control trên Common Control của Windows nữa.

    Img Processing mình ko giỏi = bạn nhưng có lẽ cũng ko đến nỗi. Nghệ thuật xử lý ảnh thì mình chỉ 1 chút ít thôi như Blend, Gaussian Blur, Smooth mà thôi.

    Hy vọng sẽ học được nhiều từ bạn. Gặp lại sau!
    Đã được chỉnh sửa lần cuối bởi ZCoder87 : 09-03-2008 lúc 11:32 PM.

  10. #10
    Ngày gia nhập
    10 2007
    Bài viết
    169

    ZCoder87 có biết về MMX và SSE2 không ?!

Các đề tài tương tự

  1. Tài liệu lập trình C The Art of Computer Programming
    Gửi bởi doanlmit trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 15
    Bài viết cuối: 29-07-2016, 05:35 PM
  2. Algorithm Xin sách "Mathematical Tools in Computer Graphics with C# Implementations"
    Gửi bởi Moscow trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 21-11-2013, 10:59 PM
  3. Lập trình C++ liệt kê mọi hoán vị của từ COMPUTER
    Gửi bởi linh_bkan1 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 05-01-2011, 03:35 PM
  4. Đề xuất Có thể thêm box Computer Science ko?
    Gửi bởi chuong01 trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 0
    Bài viết cuối: 04-05-2010, 06:53 AM
  5. [C] Lấy Computer Name
    Gửi bởi HTS trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 22-06-2007, 09:25 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn