STDIO
Tìm kiếm gần đây
    Nội dung
    0
    0
    Chia sẻ
    Nội dung
    0
    0
    Chia sẻ

    Khởi Tạo Môi Trường Lập Trình Đồ Họa OpenGL Trên Windows với GLEW và GLFW3

    Hướng dẫn khởi tạo môi trường đồ họa với OpenGL, GLEW và GLFW3.
    28/09/2014 23/09/2020 7 phút đọc
    Khởi Tạo Môi Trường Lập Trình Đồ Họa OpenGL Trên Windows với GLEW và GLFW3

    OpenGL (Open Graphics Library) là một trong những thư viện đồ họa phổ biến nhất trên thế giới, được giới thiệu lần đầu tiên vào năm 1991. OpenGL bao gồm một hệ thống các hàm API tương tác trực tiếp với phần cứng máy tính – mà chủ yếu ở đây là GPU. Nhờ sự hợp tác chặt chẽ với các nhà sản xuất phần cứng đồ họa nổi tiếng như: AMD, Nvidia … cùng với phần mềm: Microsoft, Apple, Google …, hiệu suất của OpenGL ngày càng được cải tiến. Kể từ phiên bản OpenGL 4.0 trở về sau, các kĩ thuật tiên tiến như tessellation, direct state access, flush control … được hỗ trợ đầy đủ.

    OpenGL không những chạy được trên PC mà còn mở rộng sang di động minh chứng bằng việc có rất nhiều ứng dụng và trò chơi đặc sắc ở cả 2D và 3D trên các hệ điều hành như Android, iOS …

    Việc khởi tạo các thư viện đồ họa OpenGL luôn là một vấn đề nan giải do sự khác biệt về hệ điều hành và phần cứng hỗ trợ. Bài viết này giới thiệu một giải pháp để khởi tạo thư viện đồ họa OpenGL trên Windows.

    Tất cả code trong bài viết này sử dụng Visual Studio Community.

    Yêu cầu hệ thống

    Khi làm việc với OpenGL, phải chắc chắn phần cứng có hỗ trợ OpenGL và các extensions của chúng. Việc này được kiểm tra với công cụ OpenGL Extension Viewer.

    ss_1
    OpenGL được hỗ trợ đến bản 4.4

    Ngoài ra, 2 thư viện sau cũng cần được chuẩn bị:

    • GLEW - OpenGL Extension Wrangler Library - version 1.11.0: thư viện hỗ trợ load các extension cần thiết của OpenGL.
    • GLFW - OpenGL Framework - version 3.0.4: thư viện hỗ trợ khởi tạo môi trường OpenGL, xử lý các sự kiện nhập / xuất.

    Cả 2 thư viện này, ngoài mã nguồn cung cấp sẵn còn bao gồm nhiều tài liệu hướng dẫn đi kèm. Với GLFW, cần phải sử dụng CMake để có thể build source code thành thư viện tương ứng.

    Khởi tạo môi trường OpenGL

    Bắt đầu từ một project trống – Empty Project – trong Visual Studio; để khởi tạo mội trường lập trình OpenGL, thực hiện tuần tự các bước sau:

    1. Thêm các chỉ dẫn đến các file thư viện cần thiết trong quá trình biên dịch
    2. Copy các file thư viện liên kết động (*.dll) vào thư mục chứa file thực thi
    3. Viết mã khởi tạo môi trường lập trình OpenGL

    Thêm các chỉ dẫn đến các file thư viện cần thiết trong quá trình biên dịch

    OpenGL là một hệ thống thư viện bao gồm rất nhiều hàm API khác nhau để tương tác với hệ thống đồ họa bên dưới. Trong phạm vi của bài viết này thư viện được cung cấp bao gồm các thành phần sau:

    • Các file header (*.h)
    • Các file thư viện liên kết tĩnh (*.lib)
    • Các file thư viện liên kết động (*.dll)

    Chính vì vậy, để có thể sử dụng được các thư viện này, việc đầu tiên cần khai báo với trình biên dịch chương trình sẽ sử dụng các hàm thư viên thêm ở bên ngoài là GLEW và GLFW.

    Để thêm các file header và thư viện cần thiết ở quá trình biên dịch trong VS, cấu hình chính xác đường dẫn file header và file thư viện cần dùng.

    Song song đó, VS cũng hỗ trợ cho việc thêm các thư viện vào trong project thông qua giao diện đồ hoạ như sau

    Tại giao diện VS, mở hộp thoại Additional Include Directories bằng cách: Project Properties > C++ > General > Additional Include Directories và thêm vào đường dẫn tới folder chứa các header của 2 thư viện GLEW và GLFW

    ss_2
    Cấu hình include directory

    Tương tự, mở hộp thoại Additional Library Directories để thêm đường dẫn tới folder chứa các thư viện bằng cách: Project Properties > Linker > General > Additional Library Directories.

    ss_3
    Cấu hình đường dẫn đến thư viện

    Bước tiếp theo khai báo với VS trong lúc biên dịch sẽ sử dụng các thư viện hỗ trợ việc khởi tạo môi trường OpenGL – glew32.lib / glew32s.lib / glfw3dll.lib / OpenGL32.lib – như sau: Project properties > Linker > Input > Additional Dependencies

    ss_4
    Khai báo các thư viện được sử dụng

    Tới đây, các chỉ dẫn đến các file thư viện cần thiết trong quá trình biên dịch đã hoàn tất.

    Copy các file thư viện liên kết động (*.dll) vào thư mục chứa file thực thi

    Copy 2 file: glew32.dllglfw3.dll vào cùng với nơi mà file thực thi được biên dịch.

    ss_6

    Tiến hành viết mã

    Khai báo include các file header cần dùng::

    #include "GL/glew.h"
    #include "GLFW/glfw3.h"

    Tiếp theo, gọi hàm khởi tạo cho thư viện GLFW – thư viện hỗ trợ tương tác với cửa sổ hệ thống và kiểm tra kết quả của quá trình khởi tạo.

    /* Initialize GLFW Library */
    if (!glfwInit())
    	return -1;

    Sau khi đã khởi tạo thư viện GLFW thành công, khai báo cho hệ thống phiên bản OpenGL được sử dụng. Ví dụ để sử dụng OpenGL 3.3 khai báo như sau:

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    Tạo đối tượng GLFWwindow – quản lý cửa sổ chương trình và OpenGL context thông qua hàm glfwCreateWindow:

    GLFWwindow* window;
    window = glfwCreateWindow(640, 480, "STDIO - Hello OpenGL", NULL, NULL);
    if (!window)
    {
    	glfwTerminate();
    	return -1;
    }

    Tại thời điểm này, một cửa sổ được tích hợp OpenGL đã sẵn sàng làm việc. Việc cuối cùng là đảm bảo cửa sổ này luôn tồn tại trong lúc chương trình đang chạy:

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {	
    
    	/* Swap front and back buffers */
    	glfwSwapBuffers(window);
    
    	/* Poll for and process events */
    	glfwPollEvents();
    }

    Sau khi kết thúc chương trình, giải phóng tài nguyên đã được cấp phát trước đó với hàm:

    glfwTerminate();

    Với môi trường OpenGL được khởi tạo, các API của OpenGL như glClearColor, glClearBufferBit … đều khả dụng.

    Đoạn mã tổng hợp các vấn đề đã trình bày ở trên:

    #include "GL/glew.h"
    #include "GLFW/glfw3.h"
    
    int main(void)
    {
    	/* Initialize GLFW Library */
    	if (!glfwInit())
    		return -1;
    
    	/* We'll tell the system use OpenGL 3.3 */
    	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    
    	/* Create a windowed mode window and OpenGL context */
    	GLFWwindow* window;
    	window = glfwCreateWindow(640, 480, "STDIO - Hello OpenGL", NULL, NULL);
    	if (!window)
    	{
    		glfwTerminate();
    		return -1;
    	}
    
    	/* Make the window's context current */
    	glfwMakeContextCurrent(window);
    
    	/* Set clear color */
    	glClearColor(1.0f, 0.73f, 0.2f, 1.0f);
    
    	/* Loop until the user closes the window */
    	while (!glfwWindowShouldClose(window))
    	{
    		/* Because we don't have any things to render, so we just clean the whole screen */
    		glClear(GL_COLOR_BUFFER_BIT);
    
    		/* Swap front and back buffers */
    		glfwSwapBuffers(window);
    
    		/* Poll for and process events */
    		glfwPollEvents();
    	}
    
    	glfwTerminate();
    	return 0;
    }

    Kết quả khi biên dịch và thực thi:

    Toàn bộ source code cũng như các thư viện cần thiết được download tại: stdio_opengl_sample.zip.

    Lời kết

    Với nhu cầu ngày càng khắt khe của con người về tính nghệ thuật của đồ họa trên máy tính, phần mềm (các thư viện đồ họa) cùng với phần cứng (GPU) có những bước tiến mạnh mẽ - như khoảng cuối những năm 90 việc render vài trăm polygon là một vấn đề gây khó khăn cho các nhà phát triển, nhưng với hiện nay việc render vài triệu polygon chỉ là việc đơn giản. Cả 2 thư viện OpenGL và Direct3D đã làm rất tốt vai trò của mình trong việc làm cầu nối giữa phần cứng và phần mềm máy tính để giúp hiện thực những điều vĩ đại.

    Tham khảo

    • http://en.wikipedia.org/wiki/OpenGL - OpenGL - Wikipedia (27/1/2015)
    • http://www.glfw.org/ - GLFW (27/1/2015)
    • http://glew.sourceforge.net/ - The OpenGL Extension Wrangler Library (27/1/2015)
    • http://www.realtech-vr.com/glview/download.php - GL View (27/1/2015)
    0 Bình luận
    Khi bạn nhấn vào sản phẩm do chúng tôi đề xuất và mua hàng, chúng tôi sẽ nhận được hoa hồng. Điều này hỗ trợ chúng tôi có thêm kinh phí tạo nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO

    Trang chính

    Công ty TNHH STDIO

    • 30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
      +84 28.36205514 - +84 942.111912
      developer@stdio.vn
    • 383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
      Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012
    ©STDIO, 2013 - 2021