OpenGL入门demo

开发环境visual studio 2022 preview版本,x64版本

安装OpenGL

首先OpenGL是windows系统里面自带的,我们可以不用去下载最新版。直接在此基础上配置OpenGL的三个扩展库glew,glfw,flut就可以了。

下载OpenGL的开发依赖类库:

官方glew下载地址:https://sourceforge.net/projects/glew/

官方glfw下载地址:https://www.glfw.org/download.html

官方glut下载地址:https://www.opengl.org/resources/libraries/glut/glut_downloads.php#3.6

如果不是专业搞 openGL ,只是学习一下,我这里已经给大家打包好了。按照接下来的操作步骤走保准没问题。

链接:https://pan.baidu.com/s/1izkpW-vdzIpgV0qVt5KK9Q

提取码:8uqf

第一步:创建一个c++的控制台应用程序

平台选为x64平台

第二步:将百度网盘里面下载的文件,放到项目的根目录。

第三步:配置vs开发环境

1.将glew,glfw,glut的头文件添加进来,操作流程,点击常规,附加包含目录,添加include文件。

2.点击左边的 “链接器”,再点击 “附加库目录” ,把 glew、glfw、glut 的库目录添加进去。操作过程如图所示:

3.点击左边的 “链接器”,再点击 “输入” ,把 glew、glfw、glut的 库目录链接 手敲进去。

【注意:一定要保证“glut32.lib” 在前,“glut.lib”在后。

opengl32.lib

glew32s.lib

glfw3.lib

glut32.lib

glut.lib

最后保存应用,visual studio 里面的环境就配置完毕了。

4.打开项目文件后,点开 “OpenGLDll”,在里面找到 “glew32.dll、glew32.dll、glut.dll、glut32.dll”,并分别复制它们四个, 粘贴位置 要求和 源码 在同一个目录下! 如图所示:

【注意:glfw 的 .dll文件 要选相应的版本才行,因为我用的VS2022,所以选的是lib-vc2022文件夹里面的 .dll文件】

环境到这里就搭建完毕了,写一个demo试试环境是否正确吧。

#include <iostream>        
using namespace std;
#define GLEW_STATIC     
#include <GL/glew.h>    
#include <GLFW/glfw3.h> 
const GLint WIDTH = 800, HEIGHT = 600;        // 先设置窗口以及其大小                                
int main()
{    
    glfwInit();                                //初始化,使用glfw来打开一个窗口
    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);    
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);                        // 缩放窗口的关闭
    GLFWwindow* window_1 = glfwCreateWindow(WIDTH, HEIGHT, "Hello, friend! I'm a openGL window!", nullptr, nullptr);  
    int screenWidth, screenHeight;
    glfwGetFramebufferSize(window_1, &screenWidth, &screenHeight);  // 获得实际占用的帧缓存大小
    if (nullptr == window_1)            //判断窗口输出是否成功
    {
        cout << "Failed to create GLFW window" << endl;
        glfwTerminate();    
        return -1;          
    }
    glfwMakeContextCurrent(window_1);   // 捕获当前窗口,准备对当前窗口进行画图
    glewExperimental = GL_TRUE;            
    if (glewInit() != GLEW_OK)            // 判断glew初始化是否成功
    {
        cout << "Failed to initialise GLEW" << endl;
        glfwTerminate();            
        return -1;
    }
    glViewport(0, 0, screenWidth, screenHeight);    // 设置视口的大小
    while (!glfwWindowShouldClose(window_1))        
    {
        glfwPollEvents();                        
        glClearColor(0.1f, 0.8f, 0.7f, 1.0f);        // 分别是红、绿、蓝、透明度的四个参数。RGB三原色+透明度
        glClear(GL_COLOR_BUFFER_BIT);            
        glfwSwapBuffers(window_1);                    // 双缓存模式
    }
    glfwTerminate();                                // 如果循环结束:glfw关闭
    return 0;
}

这是一个运行出来的效果。

补充一个便于学习的 详细注释版代码:【功能和简易版相同】

#include <iostream>        // C++的标准输入输出头文件
using namespace std;

#define GLEW_STATIC     // 预定义:把 glew 这个库放到系统文件夹里面(STATIC:能找到静态库就优先使用静态库)
                        // 由静态库导出或从静态库导入的函数的签名用关键字 export .从动态库导入的功能必须用 extern __declspec(dllimport).GLEW_STATIC是激活第一种情况的预处理器定义.

#include <GL/glew.h>    // 包含“GL”文件夹里面的“glew.h”的头文件
                        // 程序运行到这一段后,先找到“GL”文件,打开后找到“glew.h”头文件,然后
                        // 会在“编译”的时候把里面的整段代码复制到下面,只是没有显示出来

#include <GLFW/glfw3.h> // 我们需要和不同的操作系统进行交互,则需要“glfw.h”的头文件
                        // 先创建一个窗口,然后在窗口里面创建一个“视口”

const GLint WIDTH = 800, HEIGHT = 600;        // 先设置窗口以及其大小
                                            // 在openGL里面,数据类型名字前面都有个大写的“GL”,所以“GLint”其实内涵就是“整型int”的意思
                                            // 而openGL里面的函数都以小写的“gl”开头
int main()
{    

    /*
        说明:
            glfw 提供的是环境(变量名或函数名以“glfw”或“GLFW”开头的都是)
            glew 用来绘图(变量名或函数名以“glew”或“GLFW”开头的都是)
    */ 

    glfwInit();   //初始化,使用glfw来打开一个窗口

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);        // 设置窗口版本,“MAJOR”代表主版本号

    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);        // 设置窗口版本,“MAJOR”代表副版本号
                                                        
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);    // GLFW_OPENGL_PROFILE用告诉窗口,这个版本是为了openGL 做准备的。
                                                                    // openGL用的版本用“CORE_PROFILE”来表示,指的是3.1以后的版本 新版的

    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);    // 苹果系统需要加这条语句(Windows可加可不加)。函数作用:向前面的版本兼容

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);                //缩放窗口的关闭

    GLFWwindow* window_1 = glfwCreateWindow(WIDTH, HEIGHT, "Hello, friend! I'm a openGL window!", nullptr, nullptr);  
    // 新建一个窗口,"一支王同学再在此出没!"(第三个参数):设置窗口名字

    //  开始为高清屏做设置
    int screenWidth, screenHeight;
    glfwGetFramebufferSize(window_1, &screenWidth, &screenHeight);  // 获得实际占用的帧缓存大小。帧的宽传给screenWidth;帧的高传给screenHeight。
    
    if (nullptr == window_1)    //判断窗口输出是否成功,失败则给出一段提示
    {
        cout << "Failed to create GLFW window" << endl;
        glfwTerminate();        // glfw关闭
        return -1;                // 进程结束
    }

    glfwMakeContextCurrent(window_1);   // 捕获当前窗口,准备对当前窗口进行画图

    glewExperimental = GL_TRUE;            // 如果程序编译的时候说有问题的时候,再打开这条语句(以前解决问题的一条语句)

    if (glewInit() != GLEW_OK)            // 判断glew初始化是否成功,看返回值是否成功 失败则给出一段提示
    {
        cout << "Failed to initialise GLEW" << endl;
        glfwTerminate();                // 关闭glfw
        return -1;
    }

    glViewport(0, 0, screenWidth, screenHeight);    // 设置视口的大小(帧缓存的大小传进去)
                                                    // 原函数声明: glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
                                                    // (x ,y)代表视口(正方形)的左下角的坐标。width、height分别代表视口的宽和高

    while (!glfwWindowShouldClose(window_1))        // 只要当前窗口不关闭,一直执行这个循环
    {
        glfwPollEvents();                            // 事件相应的命令,作用:捕获所有的事件。

        glClearColor(0.1f, 0.8f, 0.7f, 1.0f);        // 分别是红、绿、蓝、透明度的四个参数。RGB三原色+透明度(1.0表示不透明,0.1表示完全透明)
                                                    // 一般电脑的RGB显示的都是8位,能表示256*256*256=16777216色

        glClear(GL_COLOR_BUFFER_BIT);                // glClear():使用 glClearColor 中指定的值设定颜色缓存区的值,即将窗口中的每一个像素设置为背景色GL_COLOR_BUFFER_BIT
        
        glfwSwapBuffers(window_1);                    // 打开双缓存模式(进阶知识),相当于拿出两块“画板”(一块画好的展示在你面前,另一块接着画,反正画好才给你看)
    }

    glfwTerminate();   // 如果循环结束:glfw关闭

    return 0;
}

程序源代码的demo

链接:https://pan.baidu.com/s/1bSHA7pir3Ycvx3bgweBjqg

提取码:wack

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值