坐标系、视窗体(裁剪区域),存储着色器

news2024/12/28 23:56:26

坐标系
两种常见的投影/坐标系,正交和透视,实际上只是特定的4x4变换矩阵。啥都不规定默认的就是-1.0~1.0的笛卡尔坐标系。
正交
在opengl的核心框架下,没有提供任何内置渲染管线,所以在提交一个几何图形进行渲染之前,需要先定制一个shader。
在这里插入图片描述
透视
在这里插入图片描述
观察方向是从尖端到宽阔端。常用参数是垂直方向上的视场角度,窗口的宽度w和高度h的比值,到近截面的距离和到远截面的距离。
在这里插入图片描述
使用存储着色器
opengl的核心框架没有内置渲染管线,所以必须事先定制着色器。先学习存储着色器。
属性
每个顶点可以设置16种不同类型的参数,这些参数可以与顶点着色器中的任何制定变量关联。每个变量都使用一致的变量命名规则和相同的attribute slot.
GLShaderManager预定义的标识符
GLT_ATTRIBUTE_VERTEX ~ (x,y,z),three dimension,the position of vertex
GLT_ATTRIBUTE_COLOR ~(r,g,b,a)four dimension, color value
GLT_ATTRIBUTE_NORMAL~(x,y,z),the normal vector of surface
GLT_ATTRIBUTE_TEXTURE0~第一对2分量(s,t)纹理坐标
GLT_ATTRIBUTE_TEXTURE1~第二对2分量(s,t)纹理坐标
Uniform
要对几何图形进行渲染,我们需要为对象递交属性矩阵,但首先要绑定到我们想要使用的着色器程序上,并提供程序的Uniform值。
GLShaderManager::UseStockShader(GLenum shader,……);
……表示函数接受一个可变的参数数量。就这个函数本身而言,它根据我们选择的着色器从堆栈中提取正确的参数,这些参数就是特定着色器要求的Uniform值。(暂时不明白后面那些Uniform的值没关系,之后会学习到)

各种存储着色器

单位(Identity)着色器

默认使用笛卡尔(-1.0-1.0),每个片段应用同一种颜色,几何图形为实心和未渲染的,只使用了一个属性GLT_ATTRIBUTE_VERTEX。vColor参数传的是要求的颜色。
GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY, GLfloatv Color[4]);

平面(FLAT)着色器

将统一着色器进行了扩展,允许为几何图形变换指定一个4×4变换矩阵。典型情况下这是一种左乘模型视图矩阵和投影矩阵,经常被称作“模型视图投影矩阵”。这种着色器只是用GLT——ATTRIBUTE——VERTEX。
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfloat mvp[16], GLfloat vColor[4]);
GLT_SHADER_FLAT表示要使用的内置平面着色器类型。
mvp表示模型视图投影矩阵(Model-View-Projection Matrix),用于将场景中的三维几何形状转换为二维屏幕上的像素。它是一个4x4的浮点型数组。(这是那个uniform)
vColor表示颜色数组,用于设置每个片段的颜色。它是一个长度为4的浮点型数组,每个元素表示RGBA颜色分量的值。

上色(shaded)着色器

使用MVP矩阵(唯一的Uniform),GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_COLOR都会被使用。
GLShaderManager::UseStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
方便地使用内置的上色着色器来绘制一个具有光照和平滑着色的场景。着色器中唯一的Uniform值是变换矩阵,表示场景中三维几何形状的位置、方向和大小等信息。顶点着色器中会使用GLT_ATTRIBUTE_VERTEX属性来传递顶点位置信息,而片段着色器中会使用GLT_ATTRIBUTE_COLOR属性来传递顶点颜色信息,同时颜色值会被平滑地插入顶点之间,从而实现平滑着色效果。

默认光源着色器

使用内置的光照着色器来绘制一个具有光照和阴影效果的场景。该着色器使用观察者位置的单漫射光来模拟光照效果,从而产生对象的阴影和高光效果。Uniform值需要用到MV矩阵(模型视图矩阵),P投影矩阵,作为基本色的颜色值。需要的属性有GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_NORMAL。大多数光照着色器都需要normal矩阵作为Uniform值,但是这个着色器是从MV矩阵推导除了Normal矩阵的值。方便但是低效。
GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vColor[4]);

点光源着色器

该着色器根据点光源的位置和物体表面的法向量计算光照强度和颜色,从而实现漫反射效果。类似默认光源着色器,但是光源位置是特定的。接受四个Uniform值,MV矩阵,P投影矩阵,视点坐标系中的光源位置,对象的基本漫反射颜色。需要用到的属性是GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_NORMAL。
GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vColor[4]);

纹理替换着色器

通过给定的MVP矩阵,方便地使用内置的纹理替换着色器来绘制一个具有纹理贴图的场景。通过给定的MVP矩阵将场景中的三维几何形状进行变换,并使用绑定到nTextureUnit指定的纹理单元的纹理来对几何图形进行纹理贴图。片段的颜色是直接从纹理样本中获取的。需要用到的属性有GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTR_NORMAL。
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvpMatrix[16],GLint nTextureUnit);
nTextureUnit表示要使用的纹理单元的索引,即绑定到该索引上的纹理将会应用到场景中的三维几何形状上。

纹理调整着色器

将一个基本色×一个取自纹理单元nTextureUnit的纹理,方便地绘制一个具有纹理贴图和颜色调整的场景。该着色器将一个基本颜色值(vColor)乘以从nTextureUnit纹理单元中取出的纹理,从而实现基于纹理的颜色调整效果。在着色器程序中,GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_TEXTURE0属性用于传递顶点位置和纹理坐标信息。由于该着色器同时使用了基本颜色和纹理,因此称为纹理调整着色器。所需要用到的基本属性有GLT_ATTRIBUTE_VERTEX和GLT_ATTRIBUTE_TEXTURE0。
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvpMatrix[16], GLfloat vColor, GLint nTextureUnit);

纹理光源着色器

将一个纹理与通过漫反射照明计算进行调整(相乘),光线在view中的位置是给定的,来绘制一个具有纹理贴图和光照效果的场景。这个着色器接受5个Uniform值,MV矩阵,P投影矩阵,视觉空间中的光源位置,几何图形的基本色,将要使用的纹理单元。需要用到的属性有,GLT_ATTRIBUTE_VERTEX、GLT_ATTRIBUTE_NORMAL和GLT_ATTRIBUTE_TEXTURE0属性用于传递顶点位置、法向量和纹理坐标信息。通过对光源位置和几何图形表面法向量的计算,该着色器可以实现基于光照的纹理贴图效果
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix, GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vBaseColor[4], GLint nTextureUnit);

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

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

相关文章

Ubuntu Protobuf 安装(测试有效)

安装流程 下载软件 下载自己要安装的版本:https://github.com/protocolbuffers/protobuf 下载源码编译: 系统环境:Ubuntu16(其它版本亦可),Protobuf-3.6.1 编译源码 cd protobuf# 当使用 git clone 下来的…

【C语言】操作符详解总结(万字)

操作符详解1. 操作符分类2. 算术操作符3. 移位操作符3.1 整数的二进制是怎么形成的3.2 左移操作符3.3 右移操作符4. 位操作符5. 赋值操作符6. 单目操作符6.1 单目操作符介绍6.2 sizeof 和 数组7. 关系操作符8. 逻辑操作符9. 条件操作符9.1 练习19.2 练习210. 逗号表达式11. 下标…

【Vue】vue2导出页面内容为pdf文件,自定义选中页面内容导出为pdf文件,打印选中页面内容,预览打印内容

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、安装html2canvas和jspdf二、导出pdf使用步骤1.在utils文件夹下创建htmlToPdf.js2.在main.js中引入3.在页面中使用三、打印预览1. 引入print-js2.页面中impor…

PG数据库实现高可用方案(包括通用型方案Corosync+pacemaker协作)

实现高可用方案首先了解一下高可用集群高可用:透明切换,故障切换,连接管理器/集群管理器pgpool-Ⅱ:连接池、复制、负载均衡功能PatroniCorosyncpacemaker高可用解决方案Corosyncpacemakercorosyncpacemaker架构协作资源分配&#…

功耗降低99%,Panamorph超清VR光学架构解析

近期,投影仪变形镜头厂商Panamorph获得新型VR显示技术专利(US11493773B2),该专利方案采用了紧凑的结构,结合了Pancake透镜和光波导显示模组,宣称比传统VR方案的功耗、发热减少99%以上,可显著提高…

通讯录(C++实现)

系统需求通讯录是一个可以记录亲人、好友信息的工具。本章主要利用C来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录…

【006】Redis主从/哨兵/分片集群Docker搭建

项目源码合集 https://gitee.com/qiuyusy/small-project-study 搭建过程疯狂踩坑,记录一下希望各位少走弯路 目录主从搭建配置文件redis.conf运行容器测试优化哨兵集群配置文件运行容器测试代码读写分离分片集群mkdir -p /opt/docker/redis_study/redis_0/conf mkdir -p /opt/…

藏经阁(五)温湿度传感器 SHT3x-DIS 手册 解析

文章目录芯片特性芯片内部框图芯片引脚定义芯片温湿度范围芯片寄存器以及时序讲解信号转换公式芯片特性 湿度和温度传感器完全校准,线性化温度补偿数字输出供电电压范围宽,从2.4 V到5.5 VI2C接口通讯速度可达1MHz和两个用户可选地址典型精度 2% RH和 0.…

Python 二分查找:bisect库的使用

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

优先级队列详解

目录优先级队列简介关于堆为什么得用完全二叉树用堆来实现优先级队列插入/删除/获取优先级最高的元素模拟实现使用PriorityQueue的注意事项PriorityQueue常用接口优先级队列的构造方法优先级队列简介 PriorityQueue,即优先级队列。它可以保证每次出出来的数据是队列…

探究:kafka生产者/消费者与多线程安全

目录 1. 多线程安全 1.1. 生产者是多线程安全的么? 1.1. 消费者是多线程安全的么? 2. 消费者规避多线程安全方案 2.1. 每个线程维护一个kafkaConsumer 2.2. [单/多]kafkaConsumer实例 多worker线程 2.3.方案优缺点对比 1. 多线程安全 1.1. 生产…

我的Git stash不小心清空了怎么办,提了代码能反悔吗

文章目录1. 前言2. git stash清空场景2. git stash clear后如何还原3.Git撤销已经推送(push)至远端仓库的信息1. 前言 本文总结的知识很实用哈,虽然是git工具的不常用操作,但是绝对不是冷知识,学会可以从会用git升级到git高手。 主要是两种场…

Centos7 安装Mysql8.0

1、到指定目录下下载安装包[rootVM-0-14-centos ~]# cd /usr/local/src2、下载mysql8[rootVM-0-14-centos src]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz3、解压mysql8, 通过xz命令解压出tar包, 然后通过t…

KDZD耐电压高压击穿强度测试仪

一、技术参数 01、输入电压: 交流 220 V。 02、输出电压: 交流 0--50KV ; 直流 0—50kv 。 03、电器容量:3KVA。 04、高压分级:0—50KV,(全程可调)。 05、升压速率:0.1KV/s-…

c++11 标准模板(STL)(std::unordered_map)(八)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

【C++】你不得不爱的——继承

凡是面向对象的语言&#xff0c;都有三大特性&#xff0c;继承&#xff0c;封装和多态&#xff0c;但并不是只有这三个特性&#xff0c;是因为者三个特性是最重要的特性&#xff0c;那今天我们一起来看继承&#xff01; 目录 1.继承的概念及定义 1.概念 2.继承的定义 2.基类…

Linux进程学习【进程地址】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Perseverance is not a long race; it is many short races one after another…

Dynabook笔记本电脑无法开机怎么重装新系统?

Dynabook笔记本电脑无法开机怎么重装新系统&#xff1f;有用户使用Dynabook笔记本电脑出现了无法正常开机的情况。遇到这样的问题是我们的电脑系统出现了损坏&#xff0c;可以尝试进行系统修复。如果无法修复的话&#xff0c;就需要进行系统重装了。以下为大家带来Dynabook笔记…

SQLMap安装教程

注意&#xff1a;在python3环境下安装sqlmap的时候会提示需要在python2的环境下才能安装&#xff0c;其实在python3.6以后也都支持sqlmap了。 sqlmap安装步骤&#xff1a; 一、下载python&#xff1b; 下载地址 https://www.python.org/downloads/ 下载教程参考&#xff08…

通过反射获取注解的属性值(内含源代码)

通过反射获取注解的属性值&#xff08;内含源代码&#xff09; 源代码下载链接地址&#xff1a;https://download.csdn.net/download/weixin_46411355/87554543 目录通过反射获取注解的属性值&#xff08;内含源代码&#xff09;源代码下载链接地址&#xff1a;[https://downl…