首页 > 其他分享 >入门笔记

入门笔记

时间:2022-08-17 14:23:34浏览次数:64  
标签:窗口 入门 渲染 int void 笔记 window GLFW

第一个程序

LearnOpenGL

视口

glViewport函数前两个参数控制窗口左下角的位置。第三个和第四个参数控制渲染窗口的宽度和高度(像素)。也可以将视口的维度设置为比GLFW的维度小,这样以后所有的渲染都会在一个更小的窗口中,周围就可以显示一些其他的元素。
用户改变窗口大小时候,调整:

void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
	glViewport(0, 0, width, height);
}
// 并且还需要“注册”这个函数
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

渲染循环

双缓冲:OpenGL是一部分一部分绘制的,需要让他在缓冲区绘制完了再显示,绘制完了交换当前帧和绘制的那个缓冲区

// 渲染循环
while(!glfwWindowShouldClose(window))
{
    // 输入
    processInput(window);

    // 渲染指令
    ...

    // 检查并调用事件,交换缓冲
    glfwPollEvents();
    glfwSwapBuffers(window);
}

如果要输入的话,需要在渲染循环里加,比如按esc退出窗口,为保持整洁,加在void函数里,渲染循环里调用
整个程序:

#include<glad/glad.h>
#include<GLFW/glfw3.h>
#include<iostream>
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
	glViewport(0, 0, width, height);
}
void processInput(GLFWwindow *window)
{
	if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
		glfwSetWindowShouldClose(window, true);
}
int main()
{
	//实例化GLFW窗口
	glfwInit();
	glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
	glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	//创建窗口对象
	GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
	if (window == NULL)
	{
		std::cout << "Failed to create" << std::endl;
		glfwTerminate();
		return -1;
	}
	glfwMakeContextCurrent(window);
	//初始化GLAD管理指针,加载系统OpenGL函数指针
	if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
	{
		std::cout << "Failed to init GLAD" << std::endl;
		return -1;
	}
	//视口
	glViewport(0, 0, 800, 600);
	glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
	while (!glfwWindowShouldClose(window))
	{
		processInput(window);
		glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT);
		glfwSwapBuffers(window);
		glfwPollEvents();
	}
	//关闭窗口
	glfwTerminate();
	return 0;
}

标签:窗口,入门,渲染,int,void,笔记,window,GLFW
From: https://www.cnblogs.com/IamIron-Man/p/16592395.html

相关文章

  • Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局
    系列目录:本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。本系列第一篇:Taurus.MVCV3.0.3微服务开源框架发布:让.NET架构在大并发的演进......
  • 毫米波雷达-学习笔记
    入门材料自动驾驶毫米波雷达物体检测技术毫米波雷达物体检测技术(硬件&软件)TI:mmWave系列培训3.3mmWave生命体征实验......
  • 【笔记】DDD实战课-人保架构欧创新
    开篇学好DDD,你能做什么?DDD是一种思想,可以指导中台设计和微服务的拆分。应用DDD的前提:1、要吃透DDD的核心设计思想,2、搞清楚DDD、微服务和中台之间的关系。三角关......
  • web入门(信息收集)
    From:https://blog.csdn.net/i_kei/article/details/109605874https://blog.csdn.net/weixin_52805837/article/details/1118272051、web1打开网页源码即可得到flag2......
  • Mysql 简单笔记
    一、保留两位小数1.用于数据的四舍五入,round(x) ,其实就是round(x,0),也就是默认d为0;二、字符串拼接CONCAT()三、判断数量COUNT(IF(stuWorkSta......
  • Airtest笔记
    隐式等待ST.FIND_TIMEOUT=10 滑动swipe([100,1600],[100,100]) 打开指定app:  start_app("packagename")  获取app列表:  dev=device()   ......
  • 香橙派(OrangePi)移植OpenHarmony(OHOS)3.1笔记(未完待续)
    docker镜像编译环境(最大限度做到开箱即用)docker镜像dockerpullswr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:1.0.0挂载镜像也可以挂......
  • zemax光学设计笔记[5]-ZPL或ZOS-API的使用(未完待续)
    zemax的编程功能简介Anapplicationprogramminginterface(ZOS-API)hasbeendevelopedforOpticStudiothatenablesconnectionsto,andcustomizationof,thea......
  • Java 学习笔记4
    面向对象&面向过程面向过程思想步骤清晰简单,一步接一部面向过程适合处理一些简单的问题面向对象思想物以类聚,分类的思维模式,先思考问题会解决哪些问题,然后对问题进......
  • Java笔记第十三弹
    函数式接口有且仅有一个抽象方法的接口适用于Lambda使用的接口@FunctionalInterface//表示函数式接口函数式接口作为方法的参数publicclassMain{publicstati......