首页 > 其他分享 >OpenGL之HelloWorld

OpenGL之HelloWorld

时间:2023-08-03 13:22:58浏览次数:45  
标签:glfw 窗口 OpenGL HelloWorld GLFW glfwWindowHint glew GL

 1 #include <iostream>                                                   // C++的标准输入输出头文件
 2 using namespace std;                                               
 3                                                                    
 4 #define GLEW_STATIC                                                // 预定义:把 glew 这个库放到系统文件夹里面(STATIC:能找到静态库就优先使用静态库)                                                                 
 5                                                                    
 6                                                                    /* 由静态库导出或从静态库导入的函数的签名用关键字 export.
 7                                                                      从动态库导入的功能必须用 extern __declspec(dllimport).
 8                                                                      GLEW_STATIC是激活第一种情况的预处理器定义.*/
 9                                                                    
10 #include <GL/glew.h>                                               // 包含“GL”文件夹里面的“glew.h”的头文件
11                                                                    // 程序运行到这一段后,先找到“GL”文件,打开后找到“glew.h”头文件,然后
12                                                                    // 会在“编译”的时候把里面的整段代码复制到下面,只是没有显示出来
13                                                                    
14 #include <GLFW/glfw3.h>                                            // 我们需要和不同的操作系统进行交互,则需要“glfw.h”的头文件
15                                                                    // 先创建一个窗口,然后在窗口里面创建一个“视口”
16                                                                    
17 const GLint WIDTH = 800, HEIGHT = 600;                               // 先设置窗口以及其大小
18                                                                    /* 在openGL里面,数据类型名字前面都有个大写的“GL”,
19                                                                       所以“GLint”其实内涵就是“整型int”的意思*/
20 
21 /*
22 说明:
23     glfw 提供的是环境(变量名或函数名以“glfw”或“GLFW”开头的都是)
24     glew 用来绘图(变量名或函数名以“glew”或“GLFW”开头的都是)
25     而openGL里面的函数都以小写的“gl”开头
26 */
27 int main()
28 {
29     glfwInit();                                                        //初始化,使用glfw来打开一个窗口
30                                                                     
31     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);                    // 设置窗口版本,“MAJOR”代表主版本号
32                                                                     
33     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);                    // 设置窗口版本,“MAJOR”代表副版本号
34 
35     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);    // GLFW_OPENGL_PROFILE用告诉窗口,这个版本是为了openGL 做准备的。
36                                                                     // openGL用的版本用“CORE_PROFILE”来表示,指的是3.1以后的版本 新版的
37 
38     //glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);            // 苹果系统需要加这条语句(Windows可加可不加)。函数作用:向前面的版本兼容
39 
40     glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);                        // 缩放窗口的关闭
41 
42     GLFWwindow* window_1 = glfwCreateWindow(WIDTH, HEIGHT, "Hello, friend! I'm a openGL window!", nullptr, nullptr);
43                                                                     // 新建一个窗口,(第三个参数):设置窗口名字
44 
45     //  开始为高清屏做设置
46     int screenWidth, screenHeight;
47     glfwGetFramebufferSize(window_1, &screenWidth, &screenHeight);  // 获得实际占用的帧缓存大小。帧的宽传给screenWidth;帧的高传给screenHeight。
48 
49     if (nullptr == window_1)                                        // 判断窗口输出是否成功,失败则给出一段提示
50     {
51         cout << "Failed to create GLFW window" << endl;
52         glfwTerminate();                                            // glfw关闭
53         return -1;                                                    // 进程结束
54     }
55 
56     glfwMakeContextCurrent(window_1);                               // 捕获当前窗口,准备对当前窗口进行画图
57 
58     glewExperimental = GL_TRUE;                                        // 如果程序编译的时候说有问题的时候,再打开这条语句(以前解决问题的一条语句)
59 
60     if (glewInit() != GLEW_OK)                                        // 判断glew初始化是否成功,看返回值是否成功 失败则给出一段提示
61     {
62         cout << "Failed to initialise GLEW" << endl;
63         glfwTerminate();                                            // 关闭glfw
64         return -1;
65     }
66 
67     glViewport(0, 0, screenWidth, screenHeight);                   // 设置视口的大小(帧缓存的大小传进去)
68                                                                    // 原函数声明: glViewport (GLint x, GLint y, GLsizei width, GLsizei height);
69                                                                    // (x ,y)代表视口(正方形)的左下角的坐标。width、height分别代表视口的宽和高
70                                                                    
71     while (!glfwWindowShouldClose(window_1))                       // 只要当前窗口不关闭,一直执行这个循环
72     {                                                               
73         glfwPollEvents();                                           // 事件相应的命令,作用:捕获所有的事件。
74                                                                    
75         glClearColor(0.5f, 0.7f, 0.5f, 1.0f);                       // 分别是红、绿、蓝、透明度的四个参数。RGB三原色+透明度(1.0表示不透明,0.1表示完全透明)                            
76                                                                    // 一般电脑的RGB显示的都是8位,能表示256*256*256=16777216色
77                                                                    
78         glClear(GL_COLOR_BUFFER_BIT);                               // glClear():使用 glClearColor 中指定的值设定颜色缓存区的值,
79                                                                    // 即将窗口中的每一个像素设置为背景色GL_COLOR_BUFFER_BIT                                     
80                                                                    
81         glfwSwapBuffers(window_1);                                   // 打开双缓存模式(进阶知识),相当于拿出两块“画板”(一块画好的展示在你面前,另一块接着画,反正画好才给你看)
82     }
83 
84 glfwTerminate(); // 如果循环结束:glfw关闭
85
86 return 0;
87 }

 

标签:glfw,窗口,OpenGL,HelloWorld,GLFW,glfwWindowHint,glew,GL
From: https://www.cnblogs.com/sansuiwantong/p/17603062.html

相关文章

  • OpenGL之DrawTriangle
    1/*第一步:引入相应的库*/2#include<iostream>3usingnamespacestd;45#defineGLEW_STATIC6#include<GL/glew.h>7#include<GLFW/glfw3.h>8910/*第二步:编写顶点位置*/11GLfloatvertices_1[]=12{130.0......
  • 【汇编】汇编的helloWorld
    过程汇编源代码->编译->链接->执行exe。编译:将源码翻译成机器代码,生成目标(obj)文件。有x个源码文件就会生成x个目标文件。链接:将目标文件进行链接,生成exe文件。在dos中,shell是一直运行的进程,当执行汇编exe时,shell会将exe加载进内存,shell中断暂停运行,并设置CPU的CS:IP......
  • Linux 下的 OpenGL 之路(九):天空盒、反射和折射
    前言搞定了天空盒,才算是真正完成了场景的搭建,以后再要进行什么样的图形学测试,都可以在这个场景下进行。比如后面的反射、折射就是这样的例子。写完这篇,我决定暂时结束这个系列。主要是因为我太懒了,居然拖拖拉拉拖了两年。其实可以探索的内容还有很多,比如阴影啊、HDR啊、辉光啊、......
  • Ruby实践—HelloWorld
    开发环境OS:WindowsXPRuby:Ruby1.9.1Rails:Rails2.3.5IDE:RubyMine2.0.1 1、创建Rails工程 2、修改/config/database.yml自动创建的工程中默认数据库连接的是sqlite,如果没有安装此数据库,需要修改该配置(本例中使用的是mysql)#MysqlVersion5.1.46development:adapter:mys......
  • docker配置文件输出helloworld
    1.在root下创建dockerfilesudo-itouchDockerfilevimDockerfile2.编写helloworld.gopakagemainimport"fmt"funcmain(){fmt.Println("Hello,World!")} 3.配置DockerfileFROMubuntu:22.04ASv1ENVMYNAME="WANGYIDI"WOR......
  • CGO输出helloworld
    使用CGO输出helloworld本人windows版本goversiongo1.18.3windows/amd64dir目录:D:\cgo\mainModeLastWriteTimeLengthName---------------------------d-----2023/7/1921:59......
  • java HelloWorld
    HelloWorld1新建一个文件夹,存放代码2新建一个java文件-java后缀名为.java-Hello.java-[注意点]系统可能没有显示文件后缀名,我们需要手动打开3编写代码publicclassHello{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!"......
  • OpenGL入门——浅谈OpenGL
    OpenGL入门了很多次,但是一旦踏出一段时间,就又啥也不懂,从头开始。以前只是需要用的时候草草学一下怎么用,会套用就行,没让自己停下来认真思考消化......短时间看效率高,长时间看效率低,因为每次使用都得重新搜索学习。所以想在再次入门的时候记录点东西,整理一下自己的思绪,以后有时间......
  • 搭建opengl环境
    转载自:https://www.cnblogs.com/ls-33/p/6595818.html 开始学习opengl啦,练习用的编辑器是codeblocks。首先当然是要清楚如何使用codeblocks创建一个opengl项目了。首先必须先引用opengl的库glut,网上百度下载一个完整的glut.下载下来的glut包后解压然后进行以下步骤:将glut......
  • OpenGL在QT中的管理
    一、设计思路1.用例图管理 2.困惑点:(1)在程序编写中,为什么主程序的Shader可以关联到model类中的数据。解决:在加载数据方面,利用VBO、VAO等,已经将数据通过处理推到GPU上。二、代码实现GLHeader.h#pragmaonce#include<QOpenGLShaderProgram>#include......