计算机图形学:实验环境配置
由于OpenGL是一个图形API,并不是一个独立的平台,它需要一个编程语言来工作,在这里我们使用的是C++。
在使用c++时需要配置相关的环境,c++相比于python需要自己手动查找对应的库下载,这里推荐使用Visual Studio进行相关配置。
我具体介绍两个主要库的配置,glfw和glew
添加OpenGL依赖项
打开vs, 工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 程序包
1.glfw的下载
在浏览中找到glfw
如果出现外部符号或者无法链接的情况,可以打开解决方案管理器,右键,点击属性,找到链接器中的输入:
在附加依赖项中添加 opengl32.lib,确定并应用后,重新运行
2.glew的下载
同上,在工具包中找到glew库
选择glew -> 右边项目打勾 -> 安装
可以使用下列代码检查是否成功安装
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include <cmath>
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
glfwSetWindowShouldClose(window, GLFW_TRUE);
}
}
int main() {
// 初始化GLFW
if (!glfwInit()) {
std::cerr << "Failed to initialize GLFW" << std::endl;
return -1;
}
// 创建窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "GLEW Test", NULL, NULL);
if (!window) {
std::cerr << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
// 设置当前窗口的上下文为活动上下文
glfwMakeContextCurrent(window);
// 初始化GLEW
glewExperimental = GL_TRUE; // 启用GLEW的实验性功能
if (glewInit() != GLEW_OK) {
std::cerr << "Failed to initialize GLEW" << std::endl;
return -1;
}
// 设置视口大小
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);
// 设置清除颜色
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 白色背景
// 启用深度测试
glEnable(GL_DEPTH_TEST);
// 主循环
while (!glfwWindowShouldClose(window)) {
// 清除颜色缓冲区和深度缓冲区
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 绘制绿色的三角形
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (double)width / (double)height, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, // 眼睛位置
0.0, 0.0, 0.0, // 观察点
0.0, 1.0, 0.0); // 上方向
glBegin(GL_TRIANGLES);
glColor3f(0.0f, 1.0f, 0.0f); // 绿色
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f(0.5f, -0.5f, 0.0f);
glVertex3f(0.0f, 0.5f, 0.0f);
glEnd();
// 交换缓冲区
glfwSwapBuffers(window);
// 处理事件
glfwPollEvents();
}
// 清理资源
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
如果发生报错,原因和上述类似,这次缺少的库是 glu32.lib ,同样在属性中加入便可(要用回车在下边加上,不能跟在上个库后面加分号添加),故而自行运行其他代码时,出现类似的报错可寻求相近的解决措施。