OpenGL配置
- 开发环境 : VS2022
- OpenGL库 :
glew freeglut gltools
- 配置项目的工具 : cmake
*动态库库的版本 :win32用32位的 win64的用64位的 对应不是各种报错等着你! - 我只配置64位环境
我的项目基础配置 bin include lib
image.png-
lib文件夹 放 .lib文件
image.png -
bin文件夹 放.dll动态库文件
image.png -
include文件夹 放头文件
image.png
配置freeglut
https://sourceforge.net/projects/freeglut/files/
image.png image.png- cMake 配置 freeglut项目 生成动态库
D:/OpenGl/freeglut-3.4.0/freeglut-3.4.0 (cMakeLists路径)
D:/OpenGl/freeglut-3.4.0/freeglut-3.4.0/build (生成项目路径 手动创建build文件夹)
1.点击Configure 2.成功点击Generate
image.png image.png image.png
- freeglut 设置为启动项目
-
成功
image.png -
拿到freeglut.lib库
image.png
-
bin 文件夹 拿动态库 freeglut.dll文件
image.png
freeglut.lib freeglut.dll
放入项目的lib文件 和 bin文件夹
下面的头文件放入到include/GL 文件夹下面
image.png
.dll可以放入系统路径下面
32位的.dll 放入系统64位文件夹下面 (win32-64版本迁移为了兼容这样做的)
C:\Windows\SysWOW64
64位的.dll放入32位的文件夹下面
C:\Windows\System32
配置glew
image.png image.png image.png image.pngglew32s.lib glew32.dll
放入项目lib 和 bin文件夹
项目只用 glew32s.lib
最后配置gltools (依赖glew)
只有gltools生成静态库文件
利用源码 通过vs2022 生成静态库(可以用cMake配置项目)
gltools.lib为静态库 需要添加 #pragma comment(lib,"Gltools.lib")
网上下载 gltools包 有源码 和 头文件 (后续会放到云盘)
image.png创建gltools空项目 include 文件夹
image.png image.png image.pngglew.h 和 wglew.h
通过之前配置glew文件夹拷贝过来
-
配置项目路径
image.png -
调整编译静态库
image.png -
运行错误1
-
预处理器添加 WIN32
gltools2.png -
错误2 (可能出现)
1>ConsoleApplication8.obj : error LNK2019: 无法解析的外部符号 __imp__glClear@4,该符号在函数 “void __cdecl display(void)” (?display@@YAXXZ) 中被引用
glew.c 添加 #pragma comment(lib,"OpenGL32.lib")
3.png
-
成功生成静态库
image.png
Gltools.lib
放入项目 lib文件夹
配置项目
-
配置include文件路径
image.png -
配置环境bin文件夹路径
image.png -
配置lib文件夹路径
- 配置项目需要的lib库
freeglutd.lib glew32s.lib Gltools.lib
直接配置 freeglutd.dll到 C:\Windows\System32 或者项目 debug目录下
#include <iostream>
#include <stdlib.h>
#include <string.h>
#if defined(_WIN32) || defined(WIN32)
#include <windows.h>
#endif
#include <GLTools.h> // OpenGL toolkit
#include <GLMatrixStack.h>
#include <GLFrame.h>
#include <GLFrustum.h>
#include <GLBatch.h>
#include <GLGeometryTransform.h>
#include <GL\freeglut.h>
//gltools为静态库需要添加
#pragma comment(lib,"Gltools.lib")
//自定义着色管理器
GLShaderManager shaderManager;
//简单的批次容器 是GLTools的一个简单容器
GLBatch triangleBatch;
//改变窗口大小
void ChangeSize(int w, int h) {
glViewport(0, 0, w, h);
}
void SpeacialKeys(int key, int x, int y) {
}
//This function does any needed initialization on the rendering context.
//This is the first opportunity to do any OpenGL related tasks.
void SetupRC() {
//背景颜色
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
//初始化着色器管理
shaderManager.InitializeStockShaders();
//Load up a triangle
//x y z -1 -> 1
//3个点 A x = -0.5 y = 0 z = 0
// B x = 0.5 y = 0 z = 0
// C x = 0 y=0.5 z = 0
GLfloat vVerts[] = {
-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f,
};
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
//Called to draw scene
void RenderScene(void) {
//Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed[] = { 1.0f,0.0f,0.0f,1.0f };
//着色器名字 单元着色器
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
//容器进行绘画
triangleBatch.Draw();
//Perform the buffer swap to display the back buffer
glutSwapBuffers();
}
int main(int argc, char* argv[]) {
//设置当前工作目录
gltSetWorkingDirectory(argv[0]);
//传输命令行参数并初始化GLUT库
glutInit(&argc, argv);
//创建窗口使用哪种类型显示模式,双缓冲串口和RGBA颜色模式
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
//窗口大小
glutInitWindowSize(800, 600);
//窗口标题
glutCreateWindow("Triangle");
//窗口改变大小回调函数,以便能够设置视点
glutReshapeFunc(ChangeSize);
//注册函数包含OpenGL渲染代码
glutDisplayFunc(RenderScene);
//特殊键位
glutSpecialFunc(SpeacialKeys);
//初始化GLEW库,初始化驱动程序中所有丢失的入口点,确保OpenGL API可用
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
//渲染环境,运行中的OpenGL状态机的句柄
SetupRC();
//开启主消息循环并结束main函数
glutMainLoop();
}
image.png
总结耗时久的原因
1.网上下载别人的配置包 然后各种报错 开始怀疑是win32的.lib导致的 然后开始一步步的从官网下载库 vs编译源码生成对应平台的库
- 开始的时候 我把glut的库也配置进项目 也可能会导致各种问题 现在直接用freeglut glut有两个 glut.lib glut32.lib 不懂直接copy进了项目 各种问题随之而来
“glut32.dll” "glut32.lib"用于微软的win32平台,“glut.dll” “glut.lib"用于SGI平台
此处我们的编译环境是x64 和x86环境,所以只需要"glut32.dll” "glut32.lib"这两个文件
- glew32.lib glew32s.lib
lib库要使用glew32s.lib,(不要用glew32.lib)(其中s 是static的意思,glew32.lib需要glew32.dll,glew32s.lib就不需要了)
#define GLEW_STATIC
#include "glew.h"
#pragma comment(lib, "glew32s.lib")
就不用再改project options了。
如果用GLEW就要在属性设置里添加一个库openGL32.lib,否则有很多专有类型识别不出来
- 各种异常百分之99的问题都是库的问题!!!!!!!!!!!!
网友评论