【11】使用透视投影建立一个3D空间的测试

news2024/10/5 18:28:46

核心操作:
1.proj view model 这三个矩阵

glm::mat4 mvp = m_Proj * m_View * model;
m_Shader->Bind();
m_Shader->SetUniformMat4f("u_MVP", mvp);

着色器里面就:
在这里插入图片描述

proj:投影矩阵,可以选择正交投影,或者透视投影,为了营造3D透视的感觉,我们使用透视投影,m_Proj(glm::perspective(glm::radians(45.0f), 960.0f / 450.0f, 0.01f,1000.0f))
fov:45,一般标准是这样.
视窗宽高比 960/450.
视锥体前后0.01到1000,也就是说建立一个从人的视角看出去的一个锥体,物体不在这个视锥体范围内将不显示。

m_View(glm::translate(glm::mat4(1.0f), glm::vec3(0, 0, 0))),
		m_TranslationA(0, 0, 0)

view设置个在原点,model设置个不移动的。

这样glm::mat4 mvp = m_Proj * m_View * model;算下来,将是一个相机在原点,看向-z 方向,前后距离(0.01,1000)的情况。

放一个矩形在这:

	float positions[] = {
		-150.0f, -150.0f,-10.0f,   0.0f, 0.0f,    0.1f,0.2f,0.2f,1.0f,// 0  后面的值为颜色
		150.0f,-150.0f,  -10.0f,   1.0f, 0.0f,		0.1f,0.2f,0.2f,1.0f,// 1
		150.0f, 150.0f,  -10.0f,   1.0f, 1.0f,		0.1f,0.2f,0.8f,1.0f,// 2
		-150.0f, 150.0f, -10.0f,   0.0f, 1.0f,		0.1f,0.1f,0.8f,1.0f,// 3
		};

索引数组:

	unsigned int indices[] = {
			0, 1, 2,
			2, 3, 0
		};

一顿绑定,顶点数组,顶点缓冲区,索引缓冲区,着色器。。。

绘制:
在这里插入图片描述
通过调整model,控制物体移动,调整view控制相机移动。
调整model.z 可以看到矩形大小在变化,是个3D透视。

源码见 Test3D.h,Test3D.cpp
见github

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

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

相关文章

JVS低代码表单自定义按钮的使用说明和操作示例

在普通的表单设计中,虽然自带的【提交】、【重置】、【取消】按钮可以满足基本操作需求,但在面对更多复杂的业务场景时,这些按钮的显示控制就显得有些力不从心。为了更好地满足用户在表单操作过程中的个性化需求,JVS低代码推出了表…

关于Web端 —— UI自动化测试

在手工测试阶段,针对项目输出了测试用例,如果这些测试用例需要在版本迭代的过程中,需要进行回归测试,通过手工重复地执行测试用例,将会耗费大量的人力。 为此应运而生就有了自动化测试,通过使用自动化工具…

MyBatis-plus超神用法--一文带你玩转MP

前言 MyBatis-Plus是一个基于MyBatis的增强工具,提供了很多便捷的功能和增强的功能,以下是一些MyBatis-Plus的超神用法: 通用Mapper:MyBatis-Plus提供了通用Mapper的功能,可以通过继承BaseMapper接口,实现…

算法训练营第十三天 | 239. 滑动窗口最大值、347.前 K 个高频元素

文章目录 对应力扣的题目链接思路分析解决方案 问题一 、239. 滑动窗口最大值 题目链接 : 239. 滑动窗口最大值 - 力扣(LeetCode) 思路分析 : 1、可能首先想到的是暴力破解 ,每一个区间,遍历一遍&#xf…

tracert命令

tracert tracert (跟踪路由)使路由跟踪使用程序,用于确定IP数据包访问目标所采用的路径。Tracert命令用IP生存时间(TTL)字段和ICMP错误消息,来确定从一个主机网络上其他主机的路由。 类似与Linux的traceroute 命令 命令格式 t…

PHP 在线学习平台系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线学习平台系统是一套完善的web设计系统mysql数据库 ,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP 在线学习平台系统1 代码 https://download.csdn.net/download/qq_41…

响应式成人高考自考教育机构网站模板源码下载带后台

模板信息: 模板编号:30558 模板编码:UTF8 模板分类:学校、教育、培训、科研 适合行业:教育机构类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVC…

LeetCode----149. 直线上最多的点数

 题目 给你一个数组 points ,其中 points[i] [ x i x_i xi​, y i y_i yi​] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1: 输入:points [[1,1],[2,2],[3,3]] 输出:3 示例 2: 输入…

【通信原理】第三章 随机过程——例题

一、随机过程 1. 数学特征 ① 随机信号(三角函数表达式) ② 随机信号(求和表达式) 2. 功率谱密度 ① 相位确定,求功率谱密度 ② 已知相位分布,求功率谱密度 ③ 信号为两信号之和,求功率谱密度…

闲置电脑做什么副业赚钱?盘点如何利用电脑赚钱的方法

对于很多人来说,手机的强大功能使闲置的电脑被遗忘在角落。虽然现在手机已经取代电脑的很多用途。但是实际上,网络上还是有很多项目是手机不能展开的,而电脑方方面面都可以,所以,只要你愿意花些时间和精力,…

ConcurrentHashMap 源码解析

目录 一. 前言 二. 源码解析 2.1. 类结构 2.2. 基本属性 2.3. 构造方法 2.4. 增加元素 2.4.1. initTable() 2.4.2. helpTransfer() 2.4.3. transfer() 2.4.4. treeifyBin() 2.4.5. addCount() 2.5. 获取元素 2.6. remove() & replace() 2.7. clear() 2.8. s…

研发管理和项目管理有哪些痛点

研发管理和项目管理有哪些痛点 研发管理和项目管理有:1.项目进度把控难;2.绩效考核难;3.部门信息不同步;4.人力资源不均衡;5.需求管理难。项目进度把控难是研发管理和项目管理中的名列前茅痛点,要解决该问题…

引用类型;强引用;软引用;弱引用和虚引用

概述 平时在编写代码的时候内存都是由jvm管理,对象的回收也是jvm在管理; 但是有些时候jvm无法回收对象,最后就会抛出oom异常. 那么那些回收不了的对象肯定有区别于能回收的对象; 先上一波引用类型介绍 强引用 比如平常我们直…

Go进阶之rpc和grpc

文章目录 Go环境安装1)windows2)linux go语言编码规范1.1 包名:package1.2 ⽂件名1.3 结构体命名1.4 接⼝命名1.5 变量命名1.6 常量命名2.1 包注释2.2 结构(接⼝)注释2.3 函数(⽅法)注释2.4 代码…

三维变换与投影-计算机图形学

目录 三维变换与投影 三维变换原理 为什么C语言头文件要专门放在一个.h文件中呢? 斜投影原理 介绍一下什么是UGC 入口 透视投影 透视投影坐标系 三维变换与投影 三维变换原理 如何把三维物体投影到两维物体上 齐次坐标 加上一维,方便运算 …

chatGPT培训老师AIGC培训讲师叶梓:大模型这么火,我们在使用时应该关注些什么?-6

以下为叶老师讲义分享: P25-P29 提示工程的模式 节省计算资源: 在微调过程中,不需要重新训练整个模型,因此可以节省计算资源。 提高特定任务上的性能: 通过微调,模型可以适应特定任务的语言特征和模式…

实时定位与路径优化:跑腿App系统开发中的地理信息技术

本文将介绍如何使用地理信息技术实现实时定位和路径优化功能,以提高跑腿服务的效率。 实时定位 用户位置获取 # 示例:获取用户的实时位置 def get_user_location(user_id):# 使用GPS或网络定位技术获取用户的地理坐标# 返回经度和纬度信息return lon…

随笔记录-springboot_ConfigFileApplicationListener

SimpleApplicationEventMulticaster、 BootstrapApplicationListener、ConfigFileApplicationListener 加载流程 SpringApplication#run(java.lang.Class<?>[], java.lang.String[]) SpringApplication#run(java.lang.String…) SpringApplication#prepareEnvironment…

竞赛选题 深度学习火车票识别系统

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

Pod控制器详解

目录 一、Pod控制器及其功用 二、Deployment控制器 三、StatefulSet控制器 四、DaemonSet控制器 五、Job控制器 六、CronJob 控制器 一、Pod控制器及其功用 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层…