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.mzph.cn/pingmian/28992.shtml

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

相关文章

【设计模式-12】代理模式的代码实现及使用场景

&emsp&#xff1b;代理模式是一种应用很广发的结构性设计模式&#xff0c;它的设计初衷就是通过引入新的代理对象&#xff0c;在客户端和目标对象之间起到中介的作用&#xff0c;从而实现控制客户端对目标对象的访问&#xff0c;比如增强或者阉割某些能力。 1. 概述 代理模…

《优化接口设计的思路》系列:第1篇—什么是接口缓存

一、缓存的定义&#xff1a; 缓存是一种存储数据的技术&#xff0c;用于提高数据访问的速度和效率。缓存通常存储在内存中&#xff0c;因为内存访问速度远快于磁盘和网络。数据接口通常会使用缓存技术&#xff0c;以降低对后端数据存储和处理的压力&#xff0c;提高系统性能。…

⭐ ▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch3 贝尔曼最优公式 【压缩映射定理】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 学堂在线 习题 2、过 电子书&#xff0c;补充 【下载&#xff1a;本章 PDF 电子书 GitHub 界面链接】 [又看了一遍视频] 3、总体 MOOC 过一遍 习题 学堂在线 课程页面链接 中国大学MOOC 课程页面链接 B 站 视频链…

c++qt合并两张灰度图像

需求&#xff1a;将两张尺寸相同的灰度图像进行合并&#xff0c;合并后的图像&#xff0c;每个像素点灰度值为两张原图对应像素点灰度值之和。若超过255&#xff0c;则最大为255。 方法一&#xff1a; 将图像读取为cv::Mat&#xff0c;再调用opencv的cv::add方法&#xff0c;进…

【ai】初识pytorch

初识PyTorch 大神的例子运行: 【ai】openai-quickstart 配置pycharm工程 简单例子初识一下Pytorch 好像直接点击下载比较慢? 大神的代码 在这个例子中,首先定义一个线性模型,该模型有一个输入特征和一个输出特征。然后定义一个损失函数和一个优化器,接着生成一些简单的线性…

Golang内存模型与分配机制

简述 mheap为堆&#xff0c;堆和进程是一对一的&#xff1b;mcentral&#xff08;小mheadp&#xff09;&#xff0c;mcahe&#xff08;GMP的P私有&#xff09;&#xff0c;分配内存顺序由后向前。 在解决这个问题&#xff0c;Golang 在堆 mheap 之上&#xff0c;依次细化粒度&a…

前端构建工具用得好,构建速度提升 10 倍

今天来盘点一下前端构建工具。 Turbopack Turbopack&#xff0c;由Vercel开源&#xff0c;是下一代高性能的JavaScript应用构建工具&#xff0c;目前用于 Next.js 中。Turbopack旨在通过革新JavaScript应用的打包流程来显著提升应用性能&#xff0c;它专注于缩短加载时间&…

Python工具箱系列(五十三)

​​水印 水印是一种常见的图片处理需求。当既需要展示&#xff0c;又需要保护知识产权时&#xff0c;就需要使用文字或者图片来打水印。下面的代码展示了文字水印与图片水印的过程。 ​--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown from pat…

游戏找不到steam_api64.dll无法继续执行代码的解决方法

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“steam_api64.dll丢失”。那么&#xff0c;steam_api64.dll到底是干嘛的&#xff1f;为什么会丢失&#xff1f;对电脑有什么具体影响&#xff1f;如何解决这个问题&#xff1f;本文将为您详细…

Python基础教程(九):Lambda 函数

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

vivado NODE、PACKAGE_PIN

节点是Xilinx部件上用于路由连接或网络的设备对象。它是一个 WIRE集合&#xff0c;跨越多个瓦片&#xff0c;物理和电气 连接在一起。节点可以连接到单个SITE_&#xff0c; 而是简单地将NETs携带进、携带出或携带穿过站点。节点可以连接到 任何数量的PIP&#xff0c;并且也可以…

基于QT5.12.7的VTK8.2下的VS2015 X64源码编译以及测试

有一段时间没更新博客了&#xff0c;最近在考虑使用VTK作为软件的后处理显示&#xff0c;相比于OSG&#xff0c;VTK在后处理上集成了很多优秀的算法&#xff0c;使用起来比较方便&#xff0c;而且后处理一般不需要太多的交互&#xff0c;所以VTK是一个不错的选择。 之前对VTK了…

【多视图感知】BEVFormer: Learning Bird’s-Eye-View Representation

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers 论文链接:http://arxiv.org/abs/2203.17270 代码链接:https://github.com/fundamentalvision/BEVFormer 一、摘要 本文提出了一种名为BEVFormer的新框架&am…

智慧班牌系统源码,智慧校园云平台系统,基于小程序原生开发的智慧校园小程序源码

智慧班牌系统&#xff0c;也被称为电子班牌系统&#xff0c;是一款专为学校打造的信息化产品&#xff0c;用于加强学校班级文化建设和班级风采展示。该系统通过整合学校对外宣传、日常互动交流、教师教学办公、课外学习延伸、智能硬件接入等各种服务&#xff0c;为老师、家长、…

数据库原理(数据库设计)——(3)

一、数据库设计概述 1.数据库设计的基本任务和目标 基本任务 根据用户的信息需求、数据库操作需求&#xff0c;设计一个结构合理、使用方便、效率高的数据库。 设计目标 满足用户的应用要求&#xff1b;准确模拟现实世界&#xff1b;能背某个DBMS&#xff08;数据库管理系统…

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态&#xff0c;并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势&#xff0c;包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…

PV180R1K1T1NMMC派克通轴传动结构柱塞泵

PV180R1K1T1NMMC派克通轴传动结构柱塞泵 派克柱塞泵的结构组成部分&#xff1a;柱塞、手把、斜盘、压盘、滑履、泵体、配油盘、传送轴。其优点如下&#xff1a; 1、结构紧凑耐用&#xff0c;具有灵活的安装接口 2、安静的工作 3、效率高 4、降低功耗和减少发热 5、具有“…

最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)

Monaco Monaco 字体是一款专为编程和代码编辑设计的等宽字体&#xff0c;以其简洁明了的无衬线设计风格、高可读性和清晰的字符区分度&#xff0c;受到开发者们的青睐&#xff0c;Mac 自带 Monaco 字体。 Consolas Consolas 是一款等宽无衬线字体&#xff0c;专为编程和代码编…

ElementPlus国际化(将组件的默认语言改为中文)

文章目录 1. Element-plus的默认语言2. 编辑 main.js 文件3. 效果&#xff08;以分页条组件为例&#xff09; 1. Element-plus的默认语言 Element-plus的默认语言是英语&#xff0c;可修改为其它语言 2. 编辑 main.js 文件 import {createApp} from vue import ElementPlus …

高等数学笔记(一):映射与函数

一、映射 1.1 映射的概念 存在一个法则 f &#xff0c;使得对 X 中每个元素 x &#xff0c;在 Y 中有唯一确定的元素 y 与之对应&#xff08;X、Y 非空集&#xff09; 称 f 为从 X 到 Y 的映射&#xff0c;如图所示 其中 y 称为元素 x&#xff08;在映射 f 下&#xff09;的…