OpenGL3.3_C++_Windows(11)

git submodule项目子模块

  1. Git Submodule
    1. (子模块的代码并不直接存储在父仓库中,而是通过一个指针来维护)
    2. 克隆含有子模块的仓库时,使用git管理
  2. Git Clone
    1. 复制一份完整的Git仓库到本地)
    2. 若仓库包含子模块,普通的克隆命令不会获取子模块内容,
  3. Git Submodule的操作
    1. git submodule update --init --recursive初始化并更新(所有子模块,包括嵌套子模块)
    2. git submodule update <子模块目录>更新指定的子模块
    3. git fetch <子模块 URL>查看子模块远程仓库的最新状态 git reset --hard <子模块版本>更新到指定版本
  4. 添加后,在项目就会出现.gitmodules文件
  5. 其他:#include <GLFW/glfw3.h>为什么要加GLFW,因为这是文件夹名

深度测试

  1. 深度测试glEnable被启用的时候,会模板测试运行之后运行,如果这个测试通过了的话,深度缓冲(0——1)将会更新为新的深度值。如果失败了,片段将会被丢弃
  2. 深度缓冲(向一个窗口的矩形)由窗口系统自动创建的,通常和颜色缓冲有着一样的宽度和高度。会以16、24或32位float的形式精度储存它的深度值(gl_FragCoord的z分量)

  3. glViewport定义的窗口的大小,内建变量gl_FragCoord的x和y分量代表了 片段的 屏幕空间坐标(其中(0, 0)位于左下角),gl_FragCoord的z分量,它包含了片段真正的深度值
  4. 因为每次渲染时深度值有可能更新,每次渲染迭代之前使用GL_DEPTH_BUFFER_BIT来清除深度缓冲,否则你会仍在使用上一次渲染迭代中的写入深度值:
  5. 禁用深度缓冲的写入,使用一个只读的glDepthMask(GL_FALSE);
  6. glDepthFunc()深度测试函数,修改深度测试中使用的比较运算符,来决定是否通过测试:每渲染一个片段,将深度值写进缓冲,将这个片段 的深度值与深度缓冲中深度值比较
  7. 深度值计算的精度(精度越高,深度值变化越明显):
    1. 观察空间中z值(近平面(Near)和远平面(Far)之间的任何值)变换到[0, 1]范围之间
    2. 线性:……
    3. 非线性:z值很小的时候提供非常高的精度,而在z值很远的时候提供更少的精度。根据1/z,随着z的增加,变化越来越慢。因为z越大,1/z越小,所以其余变量,也都变化为倒数
  8. 深度值可视化:
    1. (0——1)(暗——亮)FragColor = vec4(vec3(gl_FragCoord.z), 1.0);因为0,0,0颜色是黑色。
    2. 这时候注意到全都是白色,我们尝试极小心的靠近物体,才会看到一瞬间变为黑色,这是因为深度值是非线性的。
    3. 转化为线性NDC:
float near = 0.1; 
float far  = 100.0;  
float LinearizeDepth(float depth) 
{float z = depth * 2.0 - 1.0; // back to NDC return (2.0 * near * far) / (far + near - z * (far - near));    
}
void main()
{             float depth = (LinearizeDepth(gl_FragCoord.z)-near)/ (far-near); FragColor = vec4(vec3(depth), 1.0);
}
  1. 理解非线性深度转为线性深度的运算过程:
    1. *投影(3D到2D)矩阵的作用:视图坐标——裁剪坐标
    2. 过程1:视口坐标(视锥剔除:裁剪为视锥体)——裁剪坐标——标准化坐标NDC(映射到边长为1的正方形内部)(-1——1)——深度值(非线性变换(0——1))
    3. 注意:视口空间中,坐标是右手坐标系,NDC是左手坐标系,所以z值相反
    4. 理解投影矩阵:
    5. 视口坐标xeyeze(*投影矩阵)——裁剪坐标xcyczc(/w)——NDCxnynzn:
      1. 设视口坐标范围,l,r,b,t,-n,-f,边界、边界、底部顶部边界和边界值
      2. 将某一个坐标xeyeze转为裁剪坐标:
      3. 首先xeye映射到近平面(从视图坐标和相机连线,使用相似三角形的比率计算)
      4. ze映射到-n近平面
      5. 转为裁剪坐标:
      6. 从 [L, R] 到 [-1, 1] 的 x 坐标范围,从 [b, t] 到 [-1, 1] 的 y 坐标范围,
      7. 从 [-n, -f] 到 [-1, 1] 的 z 坐标范围。
      8. 裁剪坐标w和z有关,投影矩阵最后一行为0,0,-1,0,从而w = -z
      9. 转为DNC:
      10. *投影矩阵后,裁剪坐标依旧是齐次坐标,但这时候的坐标的xy分量,已经转化为了近平面上,需要xc/wc, yc/wc,zc/wc,最终成为归一化设备坐标
    6. 我们已经知道了所有的运算,参考包括投影矩阵的所有条目,现在根据过程1,转为线性深度:
    7. 过程2:深度值——标准化坐标NDC——裁剪坐标——视口坐标——深度值(线性深度计算)
  2. 深度冲突:没有足够的精度来决定两个形状哪个在前面
    1. 不要把多个物体摆得太靠近,
    2. 将近平面(Near)设置远一些,将近平面设置太远将会导致近处的物体被裁剪掉

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

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

相关文章

vivado PIN

描述 引脚是基元或层次单元上的逻辑连接点。引脚允许 要抽象掉单元格的内容&#xff0c;并简化逻辑以便于使用。引脚可以 是标量的&#xff0c;包含单个连接&#xff0c;或者可以定义为对多个进行分组的总线引脚 信号在一起。 相关对象 引脚连接到一个单元&#xff0c;并且可以…

韩兴国/姜勇团队在《Trends in Plant Science》发表植物根系氮素再分配的观点文章!

氮素是陆地生态系统中的关键限制性营养元素&#xff0c;通过生物固氮和土壤氮供应通常远低高等植物的氮需求。当土壤氮素供应无法充分满足植物茎叶生长需求时&#xff0c;植物会通过自身营养器官&#xff08;如根或根茎&#xff09;再分配来实现氮的内部循环和再利用。尽管植物…

Docker部署Nginx下载站点服务

1、下载镜像 由于docker官方镜像站点被封了&#xff0c;所以我把镜像上传到阿里云镜像仓库了 docker pull registry.cn-hangzhou.aliyuncs.com/qinzt-tools/file-nginx:1.18.02、运行容器实例 运行变量解释&#xff1a; 变量名称默认值解释USERhyadmin访问下载站点的认证用…

第2章 Rust初体验4/8:提供标准库之外功能的Library Crate:简化包管理和依赖管理:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.4 故事2: 生成点数之和的随机答案 又是新的一天,大家的培训课又开始了哦!现在,我们的学员们开始用三种语言来实现故事2,加油! 2.4.1 Rust版故事2 2.4.1.1 提供标准库之外功能的Library Crate:简化包管理和依赖管理 贾克强:“我们的故事…

中电金信:银行业数据中心何去何从

20多年前&#xff0c;计算机走进国内大众视野&#xff0c;计算机行业迎来在国内的高速发展时代。银行业是最早使用计算机的行业之一&#xff0c;也是计算机技术应用最广泛、最深入的行业之一。近年来&#xff0c;随着银行竞争加剧&#xff0c;科技如何引领业务、金融科技如何发…

26 岁的“天才少年”,带队面壁打通高效大模型之路

每一轮技术浪潮出现时&#xff0c;冲在最前面的都是朝气蓬勃的年轻人。 当大模型代表的人工智能浪潮席卷全球&#xff0c;作为移动互联网“原住民”的年轻开发者&#xff0c;可以说是最活跃的群体。他们的脸庞还有些稚嫩&#xff0c;但在技术和方向上有着自己的想法&#xff0…

一些激活函数

一些激活函数 摘要激活函数分类sigmoidTanhSoftsignSoftmaxReLUSoftplusNoisy ReLULeaky ReLUPReluELUSELUSwishGELUGLUGEGLUMishMaxout 摘要 本篇博客对一些激活函数进行总结&#xff0c;以便加深理解和记忆 激活函数分类 饱和激活函数&#xff1a;sigmoid、tanh… 非饱和激…

Anritsu 安立 MS2720T 手持式频谱分析仪

Anritsu 安立 MS2720T 手持式频谱分析仪 频谱分析仪功能特点 频率范围&#xff1a; 9 kHz ~ 9 GHz、13 GHz 和 20 GHz测量&#xff1a; 占用的带宽、信道功率、ACPR、C/I、发射波罩、杂散发射、场强适用于 LTE(FDD & TDD)、CDMA、W-CDMA、WiMAX、GSM 和 TD-SCDMA 的 3G 和…

代码随想录算法训练营第二十六天|39. 组合总和、 40.组合总和II、 131.分割回文串

39. 组合总和 题目链接&#xff1a;39. 组合总和 文档讲解&#xff1a;代码随想录 状态&#xff1a;卡了一会儿 思路&#xff1a;先排序&#xff0c;方便剪枝。允许数字重复使用&#xff0c;因此递归调用时传入当前索引i。 题解&#xff1a; public class Solution {// 用于存…

深度学习训练——batch_size参数设置过大反而训练更耗时的原因分析

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

长短期记忆神经网络(LSTM)的回归预测(免费完整源代码)【MATLAB】

LSTM&#xff08;Long Short-Term Memory&#xff0c;长短期记忆网络&#xff09;是一种特殊类型的递归神经网络&#xff08;RNN&#xff09;&#xff0c;专门用于处理和预测基于时间序列的数据。与传统RNN相比&#xff0c;LSTM在处理长期依赖问题时具有显著优势。 LSTM的基本…

FFmpeg中内存分配和释放相关的源码:av_malloc函数、av_mallocz函数、av_free函数和av_freep函数分析

一、av_malloc函数分析 &#xff08;一&#xff09;av_malloc函数的声明 av_malloc函数的声明放在在FFmpeg源码&#xff08;本文演示用的FFmpeg源码版本为5.0.3&#xff0c;该ffmpeg在CentOS 7.5上通过10.2.1版本的gcc编译&#xff09;的头文件libavutil/mem.h中&#xff1a;…

Ubuntu网络管理命令:ifconfig

安装Ubuntu桌面系统&#xff08;虚拟机&#xff09;_虚拟机安装ubuntu桌面版-CSDN博客 关于ifconfig命令&#xff0c;在11.1节已经介绍过了。通过该命令可以查看和配置网络接口。ifconfig是一个比较古老的命令&#xff0c;在Ubuntu 22以及其他的许多发行版中&#xff0c;已经不…

【前端项目笔记】2 主页布局

主页布局 element-ui提供的组件名称就是它的类名 ☆☆ CSS选择器&#xff1a; &#xff08;1&#xff09;基本选择器 类型选择器 p/span/div…… 类选择器 (.classname) ID选择器 (#idname) 通配选择器 ( * ) &#xff08;2&#xff09;属性选择器 选择具有特定属性或属性值的…

最新下载:CrossOver 2024【软件附加安装教程】

CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏&#xff0c;而不需虚拟机。它为Windows软件提供所需的资源&#xff0c;以达到在Mac OS X系统上运行Windows程序的目的。 安 装…

【网络安全学习】使用Kali做渗透情报收集-01-<域名信息主机信息>

1.收集开源情报 开源情报(Open Source Intelligence&#xff0c;OSINT)是指从各种公开的渠道中寻找和获取有价值的信息 如&#xff1a;互联网、媒体、社交网络、公共数据库等开源情报具有以下特点&#xff1a; - 丰富性&#xff1a;开源情报涵盖了各种类型和领域的信息 - 可…

linux centos consul1.15.2一键安装部署

consul原理、作用、安装相关内容 一、理论部分二、安装下载版本地址三、安装consul服务 一、理论部分 1、consul的原理 Consul的原理及作用可以归纳为以下几点&#xff1a; ①、基于Gossip协议的通信&#xff1a;Consul使用了基于Gossip协议的Serf实现来进行通信。 Gossip协议…

矩阵乘法的直觉

矩阵乘法是什么意思&#xff1f; 一种常见的观点是矩阵乘法缩放/旋转/倾斜几何平面&#xff1a; NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜…

分数限制下,选好专业还是选好学校?

目录 分数限制下&#xff0c;选好专业还是选好学校&#xff1f; 方向一&#xff1a;专业解析 1. 专业选择的重要性 2. 不同专业的优势与挑战 3. 个人专业选择经验分享 4. 实际场景下的“专业VS学校”选择方案 方向二&#xff1a;名校效应分析 1. 名校声誉与品牌效应 2…

Unity 使用TextMeshPro实现图文混排

最后实现出的效果是这样的 开始实现 准备两张图 选中图片右键->Create->TextMeshPro->Sprite Asset 然后文件夹内就会出现一个同名的这个文件 新建一个Text Inspector面板 点击最底下的Extra Settings 然后把刚刚创建的SpriteAsset拖过来 放到对应的地方 然后…