t0.2 VS2015配置OpenGL编程环境

一、配置环境

我们需要做的准备工作:

  • 安装好VS2015
  • 下载OpenGL需要的库:GLUT库

Windows环境下的GLUT下载地址:(大小约为150k)

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

https://www.opengl.org/resources/libraries/glut/

 

网上一般都是介绍下面的配置方法:

  1. lib文件:解压后,将glut.lib和glut32.lib这两个静态函数复制到文件目录的lib文件夹下【VS2015安装目录\Microsoft Visual Studio 14.0\VC\lib】。
  2. dll文件:将glut.dll和glut32.dll这两个动态库文件放到操作系统目录下【C:\Windows\system32文件夹内(32位系统)或‪C:\Windows\SysWOW64(64位系统)】(为了兼容性,最好在这两个目录下都复制)
  3. 头文件:将glut.h头文件复制到如下目录下【VS2015安装目录\Microsoft Visual Studio 14.0\VC\include\GL】。(如果在include目录下没有GL文件夹,则需要自己新建)

虽然上面方法一次配置,永久方便,但是自己更喜欢在Visual Studio工程中配置。假设将glutdlls37beta.zip文件解压到D:\目录下。新建工程后,先配置头文件,如下图:

 

 

然后配置lib文件,包括库文件目录和依赖库文件,具体如下面两个图所示

最后我们配置dlll文件,如下图所示。

 

二、测试配置

按照前面工程方法配置环境后,测试程序代码如下:

#include <glut.h>



void myDisplay(void)

{

     glClear(GL_COLOR_BUFFER_BIT);

     glRectf(-0.5f, -0.5f, 0.5f, 0.5f);

     glFlush();

}



int main(int argc, char *argv[])

{

     glutInit(&argc, argv);

     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

     glutInitWindowPosition(100, 100);

     glutInitWindowSize(400, 400);

     glutCreateWindow("My First OpenGL Program");

     glutDisplayFunc(&myDisplay);

     glutMainLoop();

     return 0;

}

运行结果:

 

 

 

 

### 使用 GLM 库与 OpenGL 进行数学运算 GLM(OpenGL Mathematics)是一个专为基于 OpenGL 的应用程序设计的 C++ 数学库。它提供了向量、矩阵、四元数和其他数学工具的支持,这些功能对于处理图形编程中的几何变换非常有用。 #### 安装 GLM 为了使用 GLM,首先需要将其集成到项目中。可以通过以下方式获取并安装 GLM: 1. **通过包管理器**:如果正在使用像 vcpkg 或 conan 这样的依赖管理工具,则可以直接从中拉取 GLM。 ```bash vcpkg install glm ``` 2. **手动下载**:可以从官方 GitHub 仓库克隆或下载源码[^4]。 ```bash git clone https://github.com/g-truc/glm.git ``` 由于 GLM 是头文件-only 的库,因此无需编译即可直接包含其头文件。 #### 配置项目环境 确保项目的构建环境中已正确配置 GLM 头文件路径。例如,在 CMakeLists.txt 中可以这样设置: ```cmake find_package(glm REQUIRED) include_directories(${glm_INCLUDE_DIRS}) ``` #### 基本用法示例 下面展示如何利用 GLM 执行常见的数学操作并与 OpenGL 结合使用。 ##### 创建窗口和初始化上下文 假设已经有一个基本的 OpenGL 环境准备好了(比如借助 GLFW 和 GLEW),以下是具体实现的一个片段。 ```cpp #include <glad/glad.h> #include <GLFW/glfw3.h> // 包含 GLM 头文件 #include <glm/glm.hpp> // 主要模块 #include <glm/gtc/matrix_transform.hpp> // 提供平移/旋转/缩放函数 #include <glm/gtc/type_ptr.hpp> // 类型指针转换辅助 void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow *window); const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // macOS 特定需求 #endif GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL); if (window == NULL){ std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); gladLoadGLLoader((GLADloadproc)glfwGetProcAddress); glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT); glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); while (!glfwWindowShouldClose(window)){ processInput(window); // 渲染指令... glfwSwapBuffers(window); glfwPollEvents(); } glfwTerminate(); return 0; } void framebuffer_size_callback(GLFWwindow* window, int width, int height){ glViewport(0, 0, width, height); } void processInput(GLFWwindow *window){ if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true); } ``` ##### 利用 GLM 实现模型视图投影矩阵计算 在渲染循环内部,通常会涉及创建 MVP(Model-View-Projection Matrix)。这里展示了如何运用 GLM 来完成此任务。 ```cpp float deltaTime = 0.0f; // 当前帧时间与上一帧的时间差 float lastFrame = 0.0f; while(!glfwWindowShouldClose(window)) { float currentFrame = static_cast<float>(glfwGetTime()); deltaTime = currentFrame - lastFrame; lastFrame = currentFrame; processInput(window); // 设置背景颜色 glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 准备变换数据 glm::mat4 model = glm::mat4(1.0f); // 初始化单位矩阵作为模型矩阵 glm::mat4 view = glm::lookAt( glm::vec3(0.0f, 0.0f, 3.0f), // 摄像机位置 glm::vec3(0.0f, 0.0f, 0.0f), // 注视目标点 glm::vec3(0.0f, 1.0f, 0.0f)); // 上方向矢量 glm::mat4 projection = glm::perspective( glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f); // 投影矩阵定义视角范围 glUniformMatrix4fv(glGetUniformLocation(shaderProgramID, "model"), 1, GL_FALSE, glm::value_ptr(model)); glUniformMatrix4fv(glGetUniformLocation(shaderProgramID, "view"), 1, GL_FALSE, glm::value_ptr(view)); glUniformMatrix4fv(glGetUniformLocation(shaderProgramID, "projection"), 1, GL_FALSE, glm::value_ptr(projection)); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); glfwSwapBuffers(window); glfwPollEvents(); } ``` 以上代码片段演示了如何结合 GLM 计算摄像机的位置以及物体的空间变换,并最终传递给着色器程序用于绘制场景。 #### 更多功能探索 除了基础的矩阵运算外,GLM 还支持更多高级特性,如噪声生成、球面线性插值等。可以根据实际应用深入研究文档资料[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值