OpenGL3.3_C++_Windows(5)

变换 && 3D空间的2D图形 

  • /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
  • GLM库从0.9.9版本起,默认会将矩阵类型初始化为一个零矩阵(所有元素均为0),而不是单位矩阵(对角元素为1,其它元素为0)。glm::mat4 mat = glm::mat4(1.0f)
  • glm:常用头文件:#include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtc/type_ptr.hpp>
  • 新建uniform变量,将mat4变换矩阵传入
	gl_Position =  transform * vec4(a_Position, 1.0);	
  • /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
  • 在顶点着色器中的坐标转换:
  1. 局部空间(相对于局部原点的坐标)(顶点数据初始为标准化坐标)
  2. 世界空间(*模型 / 变换 矩阵,相对于世界的全局原点,对物体进行位移、缩放、旋转)
  3. 观察空间(*视图矩阵,变换到摄像机的前方)
  4. 裁剪空间(*投影矩阵:)
    1. (设定摄像机范围:)
    2. (OpenGL将会自动进行裁剪掉超出摄像机范围的部分)
    3. 透视除法:/w齐次坐标:将4D裁剪空间坐标变换为---3D标准化设备坐标NDC(-1——1)-的过程
  5. 屏幕空间(映射到glviewport的窗口大小),
  6. 坐标传入光栅器,将其转化为片段
  • /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
  • 正射投影矩阵:……(w分量等于1.0)
  • 左右坐标,底部和顶部,近平面和远平面
glm::ortho(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
  • 透视投影矩阵:……
  • 视野,宽高比,近平面和远平面
glm::mat4 proj = glm::perspective(glm::radians(45.0f), (float)width/(float)height, 0.1f, 100.0f);
  • /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
  • 理解透视除法:
  • w分量可以理解为:摄像机到顶点的距离
  • 目的:将坐标变化为近大远小
  • 例子:想象,有两个相同大小的(x,y,z)物体,一个距离近,w小,一个距离远,w大,那么xyz同时除以更大的w分量,值越小(越远越小)
  • w的值:
  1. ===1时:应用于正交矩阵,无变化
  2. >0 && < 1 ,转为分数(分子<分母),w越大,1/w越小,*1/w,透视除法值会越小
  3. >1,w越大,/w透视除法值会更小
  4. <1,一切都会颠倒过来,从后到前翻转
  5. =0 ,分母不能为负数,程序会崩溃
  • w==1,物体大小不变,>1物体会放大,<1物体会缩小
  • 顺序模型矩阵*观察矩阵*投影矩阵(矩阵运算从右到左)

3D立方体 && 多个3D立方体

  • /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
  • 实际应用:
  • 观察矩阵实质是变化矩阵,注意:因为摄像机其实不动,所以顶点位移要取反
  • /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/
  • 3D立方体可以看作6个平面
float cube_Vertices[] = {//后,前,左,右,下,上(左下,右下,右上,右上,左上,左下)
-0.5f, -0.5f, -0.5f,  0.0f, 0.0f,0.5f, -0.5f, -0.5f,  1.0f, 0.0f,
0.5f,  0.5f, -0.5f,  1.0f, 1.0f,-0.5f,  0.5f, -0.5f,  0.0f, 1.0f,-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,0.5f, -0.5f,  0.5f,  1.0f, 0.0f,
0.5f,  0.5f,  0.5f,  1.0f, 1.0f,-0.5f,  0.5f,  0.5f,  0.0f, 1.0f,-0.5f,  0.5f,  0.5f,  1.0f, 0.0f,-0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,0.5f,  0.5f,  0.5f,  1.0f, 0.0f,0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
0.5f, -0.5f, -0.5f,  0.0f, 1.0f,0.5f, -0.5f,  0.5f,  0.0f, 0.0f,-0.5f, -0.5f, -0.5f,  0.0f, 1.0f,0.5f, -0.5f, -0.5f,  1.0f, 1.0f,
0.5f, -0.5f,  0.5f,  1.0f, 0.0f,-0.5f, -0.5f,  0.5f,  0.0f, 0.0f,-0.5f,  0.5f, -0.5f,  0.0f, 1.0f,0.5f,  0.5f, -0.5f,  1.0f, 1.0f,
0.5f,  0.5f,  0.5f,  1.0f, 0.0f,-0.5f,  0.5f,  0.5f,  0.0f, 0.0f,
};
unsigned int cube_Indices[36] = { 0, 1, 2, 2, 3, 0 ,4, 5, 6, 6, 7, 4 ,8, 9, 10, 10, 11, 8,12, 13, 14, 14, 15, 12,16, 17, 18, 18, 19, 16,20, 21, 22, 22, 23, 20
};
  • 绘制多个,只需要改每个的变换矩阵就可以了(位置—)

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

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

相关文章

从踢足球到数字孪生

前言 贵州“村超”的火热现象是一个多方面因素共同作用的结果,它不仅是一场体育赛事,更是一个文化现象,反映了时代的精神和人民的情感诉求,同时也推动了乡村振兴和地区发展。足球的魅力是多方面的,它不仅仅是一项运动,更是一种全球性的文化现象。 简单规则下的无限变化:…

Java注解Annotation机制说明和基础使用(为什么Annotation直接促进了框架的繁荣发展?)

一、注解解决的问题【可忽略】 软件开发过程中&#xff0c;如何配置一直是一个重要的问题&#xff0c;对于一个框架&#xff0c;如果你不为它提供初始结构&#xff0c;它就无法理解你要做什么&#xff0c;自然无法工作。 1.问题&#xff1a;紧密贴合的代码和配置 在很久之前…

分布式微服务: springboot底层机制实现

springboot底层机制实现 搭建SpringBoot底层机制开发环境ConfigurationBean会发生什么,并分析机制提出问题: SpringBoot 是怎么启动Tomcat, 并可以支持访问Controller源码分析: SpringApplication.run()SpringBoot的debug流程 实现SpringBoot底层机制[Tomcat启动分析 Spring容…

【数据分析】推断统计学及Python实现

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

数列求和、统计输入正数个数 题目

题目 JAVA9 数列求和分析&#xff1a;代码&#xff1a;大佬代码&#xff1a; JAVA10 统计输入正数个数分析&#xff1a;代码&#xff1a; JAVA9 数列求和 描述 有数列为&#xff1a;9&#xff0c;99&#xff0c;999&#xff0c;…&#xff0c;9999999999。要求使用程序计算此数…

【SpringBoot】SpringBoot:实现文件上传和下载功能

文章目录 引言项目初始化添加依赖 配置文件存储位置实现文件上传功能创建文件上传控制器创建上传页面 实现文件下载功能创建文件下载控制器 安全性和最佳实践文件大小限制文件类型验证文件名和路径验证文件下载时的安全性 测试与部署示例&#xff1a;编写单元测试 部署结论 引言…

墨香戏韵,重塑经典

创意名称 墨香戏韵&#xff0c;重塑经典|基于AIGC对戏剧创新 创意概述 京剧作为中国传统戏曲之一&#xff0c;源远流长&#xff0c;承载了丰富的文化内涵和艺术特色。水墨画则是中国传统绘画的瑰宝&#xff0c;以其独特的墨色表达和极简的形式赢得了广泛的赞誉。我们的项目将…

Nacos入门与实践

将 Nacos 集成到 Spring Cloud 项目中&#xff0c;可以实现服务发现和配置管理。以下是一个详细的入门指南&#xff0c;包括如何设置 Nacos 服务器&#xff0c;创建 Spring Cloud 项目&#xff0c;进行服务发现和配置管理。 1. 环境准备 首先&#xff0c;确保你已经安装了以下…

docker-compose部署FastDFS分布式文件系统

文章目录 一、技术选型二、fastDFS组成部分三、docker-compose文件四、客户端nginx配置五、存储器spring Boot集成参考文献 一、技术选型 还有一个更好的google FS&#xff08;但是他不开源&#xff0c;我也没找到社区版一类的可以不要钱使用的&#xff09;。 最后考虑到我们存…

MySQL每日备份

每天备份一次mysql数据库,备份最近7天的. 要在Linux中编写脚本来每天备份MySQL数据库并只保留最近7天的备份&#xff0c;你可以按照以下步骤操作&#xff1a; 第一步&#xff1a;创建备份脚本 打开终端 并使用你喜欢的文本编辑器创建一个新脚本文件&#xff0c;例如使用 : vim…

【字符串函数2】

5. strncpy 函数的使用和模拟实现 选择性拷贝 char * strncpy ( char * destination, const char * source, size_t num ); 1.拷贝num个字符从源字符串到目标空间。 2.如果源字符串的⻓度⼩于num&#xff0c;则拷⻉完源字符串之后&#xff0c;在⽬标的后边 追加0 &#…

MatLab中无穷量和非数值量

文章目录 MatLab中无穷量和非数值量 MatLab中无穷量和非数值量 MatLab中使用Inf和-Inf表示正无穷量与负无穷量。NaN表示非数值量。Inf与-Inf一般由于运算溢出导致超出双精度浮点数类型能够表示数值范围产生。NaN则是由于非正常运算而产生的。如0/0或者Inf/Inf。

语法04 C++ 标准输入语句

标准输入 使用格式&#xff1a;cin >> 输入的意思就是把一个值放到变量里面去&#xff0c;也就是变量的赋值&#xff0c;这个值是由我们自己输入的。 (注意:输入变量前要先定义&#xff0c;输入完之后要按Enter键。) 输入多个变量&#xff0c;与输出类似&#xff0c;…

C++中的转义字符问题

C中的转义字符问题 有些字符不能直接通过键盘输入到程序中。例如&#xff0c;按回车键并不能使字符串包含一个换行符;相反&#xff0c;程序编辑器将把这种键击解释为在源代码中开始新的一行。其他一些字符也无法从键盘输入&#xff0c;因为 C语言赋予了它们特殊的含义。例如&a…

unity数独游戏

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class MainMenuPanel : MonoBehaviour {public Button btnPlay; // 开始按钮public Slider sldDifficulty; // 难度滑动条private void Awake(){/…

springer 在线投稿编译踩坑

springer投稿&#xff0c;在线编译踩坑总结 注意&#xff1a; 有的期刊需要双栏&#xff0c;而预定义的模板中可能为单栏&#xff0c;需要增加iicol选项。 例如&#xff1a; \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…

Matlab的Simulink系统仿真(simulink调用m函数)

这几天要用Simulink做一个小东西&#xff0c;所以在网上现学现卖&#xff0c;加油&#xff01; 起初的入门是看这篇文章MATLAB 之 Simulink 操作基础和系统仿真模型的建立_matlab仿真模型搭建-CSDN博客 写的很不错 后面我想在simulink中调用m文件 在 Simulink 中调用 MATLA…

远程问诊软件哪款好?选欣九康诊疗系统

近几年国家相继推出了支持发展“互联网医疗”的政策&#xff0c;如今随着相关政策的不断落实推进&#xff0c;市场上涌现出了一大批在线咨询、电子处方和远程问诊的医疗平台&#xff0c;而在面对种类如此繁多的医疗平台究竟选择哪款更好便成了医疗机构非常头疼的事情&#xff0…

【分形技术在神经网络建模中的应用】

分形技术在神经网络建模中的应用 随着大数据时代的到来&#xff0c;神经网络的应用越来越广泛。神经网络的优势在于其能通过学习的方式将任务的模式记忆下来并预测未知的数据。然而&#xff0c;神经网络的主要缺点是需要大量的训练数据和计算资源&#xff0c;这使得它难以解决…

Dubbo 3.x源码(22)—Dubbo服务引用源码(5)服务引用bean的获取以及懒加载原理

基于Dubbo 3.1&#xff0c;详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的服务引入的总体流程&#xff0c;当然真正的服务远程引入、以及配置迁移啥的都还没讲&#xff0c;但是本次我们先不接着讲MigrationRuleListener#onRefer方法&#xff0c;而是先…