当前位置: 首页 > news >正文

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

核心操作:
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,// 1150.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.lryc.cn/news/225076.html

相关文章:

  • 【广州华锐互动】VR影视制片虚拟仿真教学系统
  • 从研发域到量产域的自动驾驶工具链探索与实践
  • 404. 左叶子之和
  • 基于SSM的课程管理系统
  • 【hcie-cloud】【5】华为云Stack规划设计之华为云Stack标准化配置、缩略语【下】
  • 搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)
  • web3案例中解决交易所中 ETH与token都是0问题 并帮助确认展示是否成功
  • unreal engine oculus 在vr场景中fade in , fade out
  • 0. 前言与大纲
  • 家乡特色饮食体验系统的设计与实现-计算机毕设 附源码 27533
  • 本地数据库迁移到云端服务器
  • SpringCloudGateway--Sentinel限流、熔断降级
  • ARMday02(汇编语法、汇编指令)
  • docker容器中运行jar 出现invalid or corrupt jarfile
  • PHP+MySQL人才招聘小程序系统源码 带完整前端+后端搭建教程
  • MongoDB常用的语句
  • MIPSsim模拟器 使用说明
  • javascript用localStorage存储用户搜索词记录,并在搜索框下展显搜索词记录
  • 20231108在Ubuntu22.04下编译安装cmake-3.27.7.tar.gz
  • 如此理解sed会简单
  • 数据库-MySQL之数据库必知必会1-9章
  • Selenium+Python自动化测试环境搭建
  • k8s存储卷 PV和PVC
  • 【架构】后端项目经典分层架构介绍
  • 二叉树的中序遍历
  • 什么是代理IP池?真实测评IP代理商的IP池是否真实?
  • 接收表单数据
  • 串口通信(11)-CRC校验介绍算法
  • 什么是Java虚拟机(JVM),它的作用是什么?
  • 力扣876:链表的中间结点