STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    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.

    Vũ Quang Huy

    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

    Đề xuất

    Cài Đặt Môi Trường Linux trên Windows 10
    Hướng dẫn cài đặt và thiết lập môi trường Linux trên Windows 10 ...
    Cài Đặt Môi Trường Lập Trình Android Studio trên Windows và Tạo Project Đầu Tiên
    Hướng dẫn cài đặt môi trường lập trình Android Studio và tạo project đầu ...
    29/05/2015

    Khám phá

    Cài Đặt Môi Trường Lập Trình C++ Với Visual Studio 20xx Community
    Hướng dẫn cài đặt Visual Studio Community và môi trường lập trình C++ ...
    Khởi Tạo Môi Trường Lập Trình C Trên Linux Với GCC
    Hướng dẫn cách cài đặt trình biên dịch GCC trên Linux và cách viết 1 ...
    Đồ Hoạ trên Cửa Sổ Dòng Lệnh - Console Graphics
    Các thư viện đồ họa đã phát triển rất mạnh mẽ, tận dụng gần như tối đa ...
    02/10/2014
    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản
    Trong đời thường, bạn sẽ gặp các file ảnh có định dạng .PNG, .JPG, .TGA, ...
    Hướng Dẫn Lập Trình C++ và Gỡ Lỗi với Visual Studio Code
    Bài viết hướng dẫn cách cài đặt Visual Studio Code để lập trình với ngôn ...
    17/08/2018
    Struct Trong Lập Trình C Và Tư Duy Trừu Tượng Hoá
    Ứng dụng và tư duy trừa tượng hoá của struct trong lập trình C/C++.
    11/08/2015
    Cài Đặt Và Cấu Hình Microsoft SQL Server 2014 Express
    Cài đặt và cấu hình Microsoft SQL Server 2014 Express, tạo môi trường ...
    Lập Trình Win32 API - Phần 3: Tạo Và Sử Dụng Resource
    Resource - tài nguyên là một sức mạnh lớn trong việc lập trình bao gồm ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm 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 - 2020