new: Set up a window

Nehe的教程确实太老了,不过我认为它也能够让我了解OpenGL3.2以前的管线渲染模式,即使它在现在已经不常见了。因为想要了解,所以我还是会看完Nehe的教程。

现在这是一个新的教程 - JoeyDeVries的教程,可以说是网上最好的OpenGL教程,现在一步一步地来学习。我会在每个新的教程标题前面附加new,旧的教程标题前面附加outdated。

glfw的函数都可以在这里找到。

在运行代码前,需要先在项目属性-链接器-输入-附加依赖项中添加glew32s.lib、glfw3.lib、opengl32.lib。

代码如下:

 1 #include <iostream>
 2 
 3 // GLEW
 4 #define GLEW_STATIC
 5 #include <GL/glew.h>
 6 
 7 // GLFW
 8 #include <GLFW/glfw3.h>
 9 
10 // Window dimensions
11 const GLuint WIDTH = 800, HEIGHT = 600;
12 
13 void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
14 {
15     std::cout << key << std::endl;
16     // When a user presses the escape key, we set the WindowSouldlose propert to ture
17     // closing the application
18     if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
19         glfwSetWindowShouldClose(window, GLFW_TRUE);
20 }
21 
22 // The MAIN function, from here we start the application and run the game loop
23 int main()
24 {
25     // Init GLFW
26     glfwInit();
27     // Set all the required options for GLFW
28     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
29     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
30     glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
31     glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
32 
33     // Create a GLFWwindow object that we can use for GLFW's functions
34     GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL", nullptr, nullptr);
35     if (window == nullptr)
36     {
37         std::cout << "Failed to create GLFW window" << std::endl;
38         glfwTerminate();
39         return -1;
40     }
41     glfwMakeContextCurrent(window);
42     // Set the required callback function
43     glfwSetKeyCallback(window, key_callback);
44     // Set this to true so GLEW knows to use a modern approach to retrieving 
45     // function pointers and extensions
46     glewExperimental = GL_TRUE;
47     // Initialize GLEW to setup the OpenGL Function pointers
48     if (glewInit() != GLEW_OK)
49     {
50         std::cout << "Failed to initialize GLEW" << std::endl;
51         return -1;
52     }
53 
54     // Define the viewport dimensions
55     int width, height;
56     glfwGetFramebufferSize(window, &width, &height);
57     glViewport(0, 0, width, height);
58 
59     // Game loop
60     while (!glfwWindowShouldClose(window))
61     {
62         // Check if any events have been activiated (key pressed, mouse moved etc.) 
63         // and call corresponding response functions
64         glfwPollEvents();
65 
66         glClearColor(0.2, 0.3, 0.4, 1.0f);
67         glClear(GL_COLOR_BUFFER_BIT);
68 
69         // Swap the screen buffers
70         glfwSwapBuffers(window);
71     }
72 
73     // Terminate GLFW, clearing any resources allocated by GLFW.
74     glfwTerminate();
75     return 0;
76 }

 

转载于:https://www.cnblogs.com/clairvoyant/p/5575129.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python全栈开发:socket

Socket socket通常也称作"套接字"&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix&#xff0c;而Unix/Linux基本哲学之一就是“一切皆文件”&…

oracle sga pga mysql_修改Oracle数据库SGA和PGA大小

SGA的大小&#xff1a;一般物理内存20%用作操作系统保留&#xff0c;其他80%用于数据库。SGA普通数据库可以分配40%-60%之间&#xff0c;PGA可以分配20%-40%之间。1、以dba身份登录并查看SGA信息&#xff1a;SQL>show parameter sga&#xff1b;查看PGA信息&#xff1a;SQL&…

NetBeans 7.1:创建自定义提示

我已经在帖子中介绍了一些我最喜欢的NetBeans提示 &#xff0c;这些信息是用于使Java代码现代化的七个NetBeans提示和七个不可或缺的NetBeans Java提示 。 这两个帖子中涉及的十四个提示仅占NetBeans支持的“即开即用”提示总数的一小部分。 但是&#xff0c;由于NetBeans 7.1使…

今年暑假不AC

Problem Description “今年暑假不AC&#xff1f;”“是的。”“那你干什么呢&#xff1f;”“看世界杯呀&#xff0c;笨蛋&#xff01;”“#$%^&*%...”确实如此&#xff0c;世界杯来了&#xff0c;球迷的节日也来了&#xff0c;估计很多ACMer也会抛开电脑&#xff0c;奔向…

qregexp括号匹配_转:Qt的正则表达式和QRegExp

考虑一下我们经常遇到的问题&#xff0c;比如gemfield想从青岛之光读书(www.civilnet.cn/book)中找一个关键的电话号码&#xff0c;通常第一步就是将书中所有的电话号码查找出来放在手边。那么怎么拟定查询条件呢&#xff1f;电话的格式有如下几种&#xff1a;01088888888010 8…

具有Tron效果的JavaFX 2 Form

这是一个具有TRON效果的简单JavaFX登录表单。 在此示例中&#xff0c;我使用CSS设置TextField和Button的样式。 这是CSS和Effect代码的片段&#xff1a; .text-field{-fx-background-color: transparent;-fx-border-color: #00CCFF;-fx-text-fill: white; }.password-field{-fx…

Spring注解Annotion详解

概述 注释配置相对于 XML 配置具有很多的优势&#xff1a; 它可以充分利用 Java 的反射机制获取类结构信息&#xff0c;这些信息可以有效减少配置的工作。如使用 JPA 注释配置 ORM 映射时&#xff0c;我们就不需要指定 PO 的属性名、类型等信息&#xff0c;如果关系表字段和 PO…

CopyOnWrite容器

1.简介 1.CopyOnWrite是程序优化的策略,当共享的内容需要修改时,复制出去一份进行修改,然后将原来的引用指向修改完的 2.java并发包(java.util.concurrent)中CopyOnWriteArrayList和CopyOnWriteArraySet实现了这个并发容器 3.好处:因为写时是在复制的一份上操作,所以可以并发的…

Akka的字数统计MapReduce

在我与Akka的日常工作中&#xff0c;我最近写了一个字数映射表简化示例。 本示例实现了Map Reduce模型&#xff0c;该模型非常适合横向扩展设计方法。 流 客户端系统&#xff08;FileReadActor&#xff09;读取文本文件&#xff0c;并将每一行文本作为消息发送给ClientActor。…

mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法

软件安装&#xff1a;装机软件必备包SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集&#xff0c;是一种功能齐全的数据库语言。在使用它时&#xff0c;只需要发出“做什么”的命令&#xff0c;“怎么做”是不用使用者考虑的。SQL功…

python学习笔记 可变参数关键字参数**kw相关学习

在Python中可以定义可变参数&#xff0c;顾名思义&#xff0c;可变参数就是传入参数是可变的。可以是任意个&#xff0c;以一个简单的数学编程为例&#xff0c;计算 sum a * a b * b .....z * z 函数定义可以如下&#xff1a; def getsum(num) :sum 0for n in num :sum su…

Struts2之环境配置

在学习struts2之前&#xff0c;首先我们要明白使用struts2的目的是什么&#xff1f;它能给我们带来什么样的好处&#xff1f; 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计。在这儿MVC模式的好处就不在提了。 技术优势 Struts2有两方面的技术优势&#xff0c;…

mysql数据库备份shell_mysql数据库备份shell脚本分享

#!/bin/bash#2020年04月27日15:56:21#auto backup mysql db#by author www.cnbugs.com########################SQL_DB"$*"SQL_USR"backup"SQL_PWD"123456"SQL_CMD"/usr/bin/mysqldump"SQL_DIR"/data/backup/date %F"if [ $…

懒惰的JSF Primefaces数据表分页–第1部分

今天&#xff0c;我们将使用带有视图范围的托管bean的惰性列表进行JSF数据表分页。 这些单词/表达式是什么意思&#xff1f; 如今&#xff0c;有几个JSF框架为数据表提供现成的分页&#xff0c;列排序器和其他功能。 今天&#xff0c;我们将使用Primefaces数据表。 通常&#…

java 动态增加定时任务

直接上代码 import org.apache.tools.ant.util.DateUtils; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory;import java.util.Calendar; import…

基于JavaFX的SimpleDateFormat演示程序

对于使用Java Date进行格式化的新手甚至对于使用Java Date进行格式化的有经验的Java开发人员而言&#xff0c;可能有些棘手的事情是使用SimpleDateFormat规范日期/时间格式。 SimpleDateFormat的基于类级别的Javadoc的文档非常详尽&#xff0c;涵盖了表示日期/时间的各个组成部…

mysql中预定义常量_PHP预定义常量

这些常量在 PHP 的内核中定义。它包含 PHP、Zend 引擎和 SAPI 模块。PHP_VERSION (string)PHP_OS (string)PHP_EOL (string)自 PHP 4.3.10 和 PHP 5.0.2 起可用PHP_INT_MAX (integer)自 PHP 4.4.0 和 PHP 5.0.5 起可用PHP_INT_SIZE (integer)自 PHP 4.4.0 和 PHP 5.0.5 起可用D…

iOS与H5交互

前提&#xff1a;在iOS控制器中加载UIWebView&#xff0c;设置代理&#xff0c;遵守UIWebViewDelegate协议。 一、iOS调用JS方法 通过iOS调用JS代码实现起来比较方便直接调用UIWebView的方法- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script…

cocos2dx 3.x 蒙板 遮罩 点击圆功能

//注册触摸EventListenerTouchOneByOne *listener EventListenerTouchOneByOne::create();listener->onTouchBegan CC_CALLBACK_2(HelloWorld::onTouchBegan,this);listener->onTouchMoved CC_CALLBACK_2(HelloWorld::onTouchMoved,this);listener->onTouchEnded …

markdownTest

MARKDOWNTEST 11111111111111有一种神奇的语言&#xff0c;它比html还简单&#xff0c;它巧妙地将内容与格式整合在一起——它就是Markdown有一种神奇的语言&#xff0c;它比html还简单&#xff0c;它巧妙地将内容与格式整合在一起——它就是Markdown 111111111111111222222222…