OpenGl 19高级GLSL

一.GLSL的内建变量

在着色器中,需要当前着色器以外地方的数据的话,必须把数据传进来。之前我们是通过uniform类型和采样器来完成的。之外,GLSL还支持另外几个以gl为前缀的变量,提供更多读写数据的方式,比如说顶点着色器的gl_Position和片段着色器的gl_FragCoord

1.顶点着色器变量

  • gl_PointSize
    当我们选取的一个图元是GL_POINT的话,每一个顶点都是一个图元,都会被渲染为一个点。这时我们可以通过OpenGL的glPointSize函数来设置渲染出来的点的大小,也可以在顶点着色器中修改这个值。

在顶点着色器中修改点大小的功能默认是禁用的,如若使用,则需要启用它

glEnable(GL_PROGRAM_POINT_SIZE);

同时我们可以将点的大小设置为裁剪空间的z值,也就是顶点距观察者的距离,点的大小会随着据观察者顶点距离的变远而增大。最后得到一个类似粒子的效果。
在这里插入图片描述

  • gl_VertexID
    整型变量gl_VertexID储存了正在绘制顶点的当前ID。

2.片段着色器变量

  • gl_FragCoord(输入变量)
    之前我们一直利用这个变量的z分量来获取片段的深度值,然而,我们也可以利用它的x和y分量来实现一些效果。
    gl_FragCoord的x和y分量是窗口空间的坐标,原点为窗口的左下角,我们可以利用对x,y的控制得到一些想要的效果。
    如下:我们可以得到一个两种颜色划分的渲染结果图。
void main()
{             if(gl_FragCoord.x < 400)FragColor = vec4(1.0, 0.0, 0.0, 1.0);elseFragColor = vec4(0.0, 1.0, 0.0, 1.0);        
}

在这里插入图片描述

  • gl_FrontFacing
    在面剔除中,我们可以根据顶点的环绕顺序来决定一个面是正向还是背向面,然后如果我们不使用顶点环绕顺序来判断,使用gl_FrontFacing可以判定当前片段是属于正向面的一部分还是背向面的一部分。如果是正向面的一部分,那么其值为true,如果是背向面的一部分,那么其值为false。这样我们就可以创建一个立方体,在内部和外部使用不同的纹理。
#version 330 core
out vec4 FragColor;in vec2 TexCoords;uniform sampler2D frontTexture;
uniform sampler2D backTexture;void main()
{             if(gl_FrontFacing)FragColor = texture(frontTexture, TexCoords);elseFragColor = texture(backTexture, TexCoords);
}

如下,从箱子内部观察时:
在这里插入图片描述

二.接口块

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

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

相关文章

第一次在RUST官方论坛上留言发布我的Rust板箱

第一次在RUST官方论坛上发帖子&#xff0c;有点紧张~地址在这里&#xff1a; 【My Rust Crate】obtains linux local information - The Rust Programming Language Forum (rust-lang.org)

C++——STL标准模板库——容器详解——list

一、基本概念 &#xff08;一&#xff09;定义 list&#xff1a;双向链表。list是一种分布式存储的线性表&#xff0c;每个节点分为数据域和指针域&#xff0c;其中指针域中包含一个指向前驱节点的指针和一个指向后续节点的指针&#xff0c;基本模型如下&#xff1a; &#…

Python学习从0到1 day2 python注释

那就祝我们 all is well ——24.1.12 一、python中的注释 1.注释的作用 注释代码与非注释代码对比&#xff0c;可以发现&#xff0c;添加了注释的代码更加易于程序的阅读 2.注释的分类及方法 注释在python中有两种形式&#xff1a;单行注释和多行注释。 单行注释只能注释一行…

日常工作中,软件测试人员如何避免“背锅”

作为一名软件测试工程师&#xff0c;日常工作中最常打交道的肯定就是开发和产品经理。有沟通就会问题&#xff0c;有问题难免会有争执。那么你肯定听过这些话&#xff1a; “这么弱智的bug你都测不出来吗&#xff1f;” “为啥这个功能还没测完就上线了&#xff1f;” “研发…

c++类程序设计题1

#include<iostream> #include<string> using namespace std;class cube{public ://设置长void setM(int m){M_l m;}int getl(){return M_l;}//设置宽void setr(int r){M_r r;}int get(){return M_r;}//设置高void setm(int m){M_m m;}int getm(){return M_m;}//…

Pycharm close project 速度缓慢解决办法

解决Pycharm close project缓慢现象 1.问题描述 close project后需要等待很长的时间。 2.解决办法 在Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion 问题解决&#xff01;&#xff01;&#xff01; &#x1f603;&#x1f603;&#x…

spring Security源码讲解-Sevlet过滤器调用springSecurty过滤器的流程

承接上文 上一节 http://t.csdnimg.cn/ueSAl 最后讲到了过滤器收集完成注入容器&#xff0c;这节我们来讲Security的Filter是怎么被Spring调用的。 我们先看webSecurity的performBuild方法(), 也就是说&#xff0c;最终返回的过滤器对象实例有两种情况当我们配置debugEnabl…

便捷特惠的快递寄件快递物流折扣平台 ,通常都有什么常见问题?

首先&#xff0c;最重要的一点是怎么寄快递更便宜&#xff1f; 我们在寄快递时&#xff0c;尽量把包裹压缩空间大一点&#xff0c;这样在体积上面就会减少一部分的费用呢&#xff0c;另外就是选择有优惠的平台下单。例如在闪侠惠递平台下单&#xff0c;单单打折&#xff0c;单…

深入理解 Flink(八)Flink Task 部署初始化和启动详解

JobMaster 部署 Task 核心入口&#xff1a; JobMaster.onStart();部署 Task 链条&#xff1a;JobMaster --> DefaultScheduler --> SchedulingStrategy --> ExecutionVertex --> Execution --> RPC请求 --> TaskExecutor TaskExecutor 处理 JobMaster 的 …

数据库系统概念 第七版 中文答案 第3章 SQL介绍

3.1 将以下查询使用SQL语言编写&#xff0c;使用大学数据库模式。 &#xff08;我们建议您实际在数据库上运行这些查询&#xff0c;使用我们在书籍网站db-book.com上提供的示例数据。有关设置数据库和加载示例数据的说明&#xff0c;请参阅上述网站。&#xff09; a. 查找计算机…

fiddler筛选请求并修改参数

一、筛选请求 使用过滤&#xff0c;需勾选User Filter才会生效&#xff0c;运行当前的过滤规则&#xff0c;需点击Run Filterset now Hosts&#xff1a;主机过滤之局域网过滤 No Zone Filter&#xff1a;默认选项&#xff0c;不设置区域过滤器show only Intranet Hosts&…

Linux上如何一键安装软件?yum源是什么?Linux如何配置yum源?

这几个问题是Linux操作的入门问题&#xff0c;但是确实也会让刚上手Linux小伙伴头疼一阵&#xff0c;故特有此文&#xff0c;希望能对刚入门的小伙伴有一些帮助~ 众所周知 在linux上在线安装软件需要用到yum命令&#xff0c;经常下述命令来安装 yum install [-y] 包名 #-y的…