在这里分享两个在 Visual Studio上安装OpenGL环境的方法
方法一:
步骤1:建立好新的项目
步骤二:
建立好一个项目后对着解决方案按着右键会出现一个弹窗
步骤3:
点击里面的 管理NuGet 程序包 然后点击搜索输入opengl
这里建议顺便安装glm、soil2 、glut;
安装glut后#include后就能看到一些头文件了选择里面的glut
步骤4:尝试运行以下代码
#include<gl/glut.h>
void display(void)
{
glClearColor(0, 0, 1.0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glRotatef(45, 1.0f, 1.0f, 1.0f);
glutWireTeapot(0.5f);
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, static_cast<char**>(argv));
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(600, 500);
glutCreateWindow("title");
glutDisplayFunc(&display);
glutMainLoop();
return 0;
}
如果运行成功的话你可以得到一个图形
方法二(比较繁琐):
我们可以通过自己下载库并且链接到 Visual Studio
下面的这个网站是我的OpenGL部分库存放的地方如果你不想一个个下载可以直接拷贝下来再根据我下面的操作进行安装就可以
https://github.com/x089866221631/OpenGL;
https://gitee.com/ren-shanxiang/OpenGL
1、先在Visual Studio里建立一个新项目
2、下载库:
在这里我要强调并不是我们用的电脑是64位的就是要用64位的库,我这里给出的参考意见是用32位的库
GLEW:http://glew.sourceforge.net/
当你进入这个网页的时候你能看见
点击第二个Binaries下载
GLFW:https://www.glfw.org/download
这里我们选择下载32位的
3、将GLEW、GLFW解压后放在项目文件中
我这里是放在Dependencies文件中然后细分(方便我后面找文件路径)
这里个人给出的意见是在里面细分 lib(库文件lib)和include(头文件)和bin(放dll文件)文件
4、开始链接到Visual Studio:
打开解决方案资源管理器
对当前选中处右键然后选择最底下的属性->进入项目属性页
顶部的设置调为:所有配置,平台调整为32位
(1):选择C/C+±>常规
注:此处$(Solution Dir)是指解决方案的位置,如果你不行这样是找你可以点击图片中右边的小箭头下拉后你能看到编辑
点击这个图标然后你新建的行右边会出现一个省略号,你点击后就可以直接在电脑上选择你所要安装的库(如:GLFW、GLEW、GLUT……)所包含的头文件(include);如图所示:
然后确认就完成链接头文件;
(2)、C/C++ ->预处理器
因为GLEW是一个静态库需要设置;
(3)、链接器 ->常规 ->添加库目录
此处的操作和(1)的操作相似,不过此处放的是lib文件
(注:并不是每一个库都需要lib和dll文件,如:GLAD)
(4)、链接器 ->常规 ->输入
这里因为我们链接的是静态库所以用的是glew32s.lib而不是glew32.lib.
在图片处添加你所想要链接的库所包含的lib文件(注:并不是所有的库都有lib文件,原先就包含的内容不需要进行改动,只需要进行添加;此处因为我们的勇的是32位的库所以要格外注意时候正确;因为此处有不确定因素最好添加一个opengl32.lib)。
(5)、如果你运行程序的时候发现缺少OpenGL.dll就到网上下载然后放进在debug里然后在输入中链接就可以了
(6)测试GLFW、GLEW
注: 直接复制使用,不要对内容进行删减,如果出现报错,可以尝试检查头文件路径
#include<iostream>
#include<GL/glew.h>
#include<GLFW/glfw3.h>
constexpr auto numVAOs = 1;
GLint renderingprogram;
GLuint vao[numVAOs];
GLuint createShaderProgram()
{
const char* vshaderSource =
"#version 430 \n"
"void main(void)"
"{gl_Position=vec4(0.0,0.0,0.0,1.0);}";
const char* fshaderSource =
"#version 430 \n"
"out vec4 color; \n"//在顶点着色器中并不是必须要给gl_Position 指定 “out”标签,因为gl_Position是预定义的输出变量
"void main(void) \n"
"{color=vec4(0.0,1.0,0.0,1.0);}";
GLuint vShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);
GLuint vfprogram = glCreateProgram();//储存指向它的整数ID
glShaderSource(vShader, 1, &vshaderSource, NULL);//a、用来存放着色器的着色器对象,b、着色器源代码中的字符串数量,c、包含源代码的字符串指针,d、最后一个没用到的参数
glShaderSource(fShader, 1 ,&fshaderSource, NULL);//注意这两次的glShaderSource调用都指明了着色器的源代码字符串数量为“1”
glCompileShader(vShader);
glCompileShader(fShader);
glAttachShader(vfprogram, vShader);//将着色器加入程序对象,之后用glLinkProgram()请求GLSL编译器确保他们的兼容性
glAttachShader(vfprogram, fShader);
glLinkProgram(vfprogram);
return vfprogram;
}
void init(GLFWwindow* window)
{
renderingprogram = createShaderProgram();
glGenVertexArrays(numVAOs, vao);
glBindVertexArray(vao[0]);
}
void display(GLFWwindow* winodw, double currentTime)
{
glUseProgram(renderingprogram);//此处没有运行着色器,它只是将着色器加载进硬件
glPointSize(30.f);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDrawArrays(GL_POINTS, 0, 1);
}
int main()
{
if (!glfwInit()) { exit(EXIT_FAILURE); }
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
GLFWwindow* window = glfwCreateWindow(600, 600, "vertexshader and fragmentshader", NULL, NULL);
glfwMakeContextCurrent(window);
if(glewInit()!=GLEW_OK){ exit(EXIT_FAILURE); }
glfwSwapInterval(1);
init(window);
while (!glfwWindowShouldClose(window))
{
display(window, glfwGetTime());
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
此处的代码是完全能运行的如果出现问题大多数情况下是复制的时候产生了空白中文字符;
(7)调整字符集
若图片中的选项为使用UNicode字符集,请调为使用多字节字符集;
(8)、查看结果
如果能看见中间的绿色矩形就代表你的GLFW、GLEW安装成功;
留言1:这是我第一次在CSDN上发文章,可能不是很好,但我还是会尽量的写全过程。这里推荐是第二种方法因为这也是一种锻炼,如果你已经有了一定的经验的话可以直接使用第一种方法因为那样比较节省时间。
如果对函数有不明白的朋友可以通过:docs.gl网页进行搜索函数使用
留言2:GLAD库比较特殊,当你下载完后只有include文件和一个src文件;但你要使用GLAD的库的时候记得在代码中常规中链接include和src文件,且代码头文件中要使用src里面的#include<glad.c>
如果有什么疑问或者安装失败的话可以留下评价,我会不定期的上来看看。