计算机图形学实验
实验准备
GLFW是一个OPENGL的C语言库,提供了基本的渲染接口,我直接下载了64位版本(这个按照你的编译器版本来)的预编译库使用。在解压后得到的lib-mingw-w64文件夹中能获取到需要使用的库文件。之后我们需要添加这个第三方库,我采用的方式是直接将库文件和头文件都放到了项目文件夹下(也许不是最好的做法)
之后下载了 GLAD 库,glad.c和main.cpp放到了同一个目录下
头文件也可以放到标准库目录下或者另外新建一个目录,并在之前的配置中配置好include路径,比如我就将头文件都放到了 D:\software\gcc\mingw64\include 下,库文件则放到了lib目录下。
之后测试是否能够正常进行绘制,新建cpp文件,写入下面的内容:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
void framebuffer_size_callback(GLFWwindow *window, int width, int height)
{
glViewport(0, 0, width, height);
}
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// print version info
int Major, Minor, Rev;
glfwGetVersion(&Major, &Minor, &Rev);
printf("GLFW %d.%d.%d initialized\n", Major, Minor, Rev);
// create glfw window object
GLFWwindow *window = glfwCreateWindow(800, 600, "window", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// init GLAD
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// create viewport
glViewport(0, 0, 800, 600);
// viewport adjust callback
void framebuffer_size_callback(GLFWwindow * window, int width, int height);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// render loop
while (!glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
之后使用 g++ -o .\test .\main.cpp
进行编译,出现了 undefined reference的报错,因为这时我还没有添加库文件
g++ -o .\test .\main.cpp .\glad.c -L.\lib -lglfw3 -lgdi32
(因为我是64位的mingw,所以还得多链接一个gdi32,不然会出错),另外注意这里编译时还加上了glad.c
最后执行 .\test.exe
得到了一个黑窗口…说明一切正常