细分着色器

2024-05-04 17:58
文章标签 着色器 细分

本文主要是介绍细分着色器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

细分控制

  • 作用:
    • 对input patch进行修改,输出output patch到TES
    • 为TPG提供细分参数
  • TCS函数会为每一个output patch中的每一个顶点执行一次,同一个patch中对应的函数共享同一个gl_ in和gl_out

    #version 430
    layout(vertices = 4) out;   //output patch大小/*---------------------内置输入变量---------------------
    in int gl_PatchVerticesIn;  //input patch中顶点数量
    in int gl_PrimitiveID;      //当前patch的索引
    in int gl_InvocationID;     //当前patch中对应函数的索引
    in gl_PerVertex
    {vec4 gl_Position;float gl_PointSize;float gl_ClipDistance[];
    } gl_in [gl_MaxPatchVertices];
    -----------------------------------------------------*//*---------------------内置输出变量---------------------
    patch out float gl_TessLevelOuter[4];
    patch out float gl_TessLevelInner[2];
    out gl_PerVertex
    {vec4 gl_Position;float gl_PointSize;float gl_ClipDistance[];
    } gl_out[];
    -----------------------------------------------------*///自定义输入
    in vec2 uvInTCS[];//自定义输出
    patch out vec2 uvInTES[];void main()
    {...
    }
    

细分计算

  • 作用:接收从TCS传来的为细分面片顶点和从TPG传来的归一化细分坐标,生成细分后的顶点
  • TES函数为细分后的每一个顶点执行一次,同一个patch中对应的函数共享一个gl_in
  • TES只能输出线段或三角形

    #version 430
    layout(triangles,equal_spacing,ccw)
    /*---------------------内置输入变量---------------------
    in vec3 gl_TessCoord;
    in int gl_PatchVerticesIn;      //上一阶段output patch中的顶点数
    in int gl_PrimitiveID;          //对应patch的索引
    in gl_PerVertex
    {vec4 gl_Position;float gl_PointSize;float gl_ClipDistance[];
    } gl_in[gl_MaxPatchVertices];
    -----------------------------------------------------*//*---------------------内置输出变量---------------------
    out gl_PerVertex 
    {vec4 gl_Position;float gl_PointSize;float gl_ClipDistance[];
    };
    -----------------------------------------------------*///自定义输入
    patch in vec2 uvInTES[];//自定义输出
    out vec2 uvInGS;void main()
    {...
    }
    

细分流程

这里写图片描述

这篇关于细分着色器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959778

相关文章

OpenGL——着色器画一个点

一、 绘制 在窗口中间画一个像素点: #include <GL/glew.h>#include <GLFW/glfw3.h>#include <iostream>using namespace std;#define numVAOs 1GLuint renderingProgram;GLuint vao[numVAOs];GLuintcreateShaderProgram (){c

学习使用RenderDoc查看着色器代码

0. 准备 首先,我想要一个相对简单的程序来学习。因此,我选择了 DX11官方范例(包含在DirectX11官方SDK中)里的【Tutorial 07: Texture Mapping and Constant 】 需要安装工程,编译出exe,然后将着色器文件(Tutorial07.fx)和贴图文件(seafloor.dds)放到exe的同级目录。随后应该可以打开exe: 1. 截一帧

glsl着色器学习(九)屏幕像素空间和设置颜色

在上一篇文章中,使用的是裁剪空间进行绘制,这篇文章使用屏幕像素空间的坐标进行绘制。 上一篇的顶点着色器大概是这样子的 回归一下顶点着色的主要任务:  通常情况下,顶点着色器会进行一系列的矩阵变换操作,将输入的顶点坐标从模型空间依次经过世界空间,视图空间,最终转换到裁剪空间。 将顶点着色器改成下面这样: <script id="vertex-shader-2d" type="x-sh

glsl着色器学习(十)缩放

对二维图形进行缩放,需要用到顶点着色器,顶点着色器经过矩阵变换,会将模型空间最终转换成裁剪空间。下面就来操作矩阵 这里需要用到一个库glMatrix。 首先修改顶点着色器 <script id="vertex-shader-2d" type="x-shader/x-vertex">attribute vec4 a_position;uniform mat4 u_matrix;void m

glsl着色器学习(六点五)顶点和片元的处理顺序

在WebGL中,顶点和片元的处理顺序遵循着图形渲染管线的流程。 顶点处理阶段 顶点处理阶段是图形渲染管线的起点,在这一阶段,所有与顶点相关的操作都会被执行。 顶点着色器(Vertex Shader) 顶点着色器接收每个顶点的数据,例如顶点坐标,法线,纹理坐标等。将顶点数据上传到图形硬件的缓冲区。在顶点着色器中,对这些顶点数据进行变换和运算,例如将顶点从模型空间转换到世界空间、视图空间和

我如何选择自己的AI细分方向和第一个入门项目

思维导图 下图展示了我的思考和分析过程 目录 思维导图大纲1. **确定兴趣和技能方向**2. **寻找合适的开源项目**3. **评估项目的活跃度**4. **开始贡献**5. **展示你的贡献**6. **推荐开源项目**总结 选择一个细分领域1. **了解各个领域的基本概念**2. **考虑你的兴趣和背景**3. **评估市场需求**4. **尝试小项目和实践**5. *

聊聊2相步进电机的细分算法与细分步进角

2 相步进电机是一种常见的电机类型,广泛应用于各种自动化设备中。细分算法是提高步进电机精度和运行平稳性的重要手段。 一、细分算法的原理 细分算法的基本思想是将一个整步分成若干个微步,通过控制电机绕组中的电流大小和方向,使电机的转子在每个微步中转动一个微小的角度。这样可以大大提高电机的分辨率和精度,同时也可以降低电机的振动和噪声。 细分算法通常采用正弦波电流控制方式,即通过控制电机绕组中的电流

three.js 编辑器,动画,着色器, cesium 热力图,聚合点位,大量点线面, 图层,主题,文字

对于大多数的开发者来言,看了很多文档可能遇见不到什么有用的,就算有用从文档上看,把代码复制到自己的本地大多数也是不能用的,非常浪费时间和学习成本, 尤其是three.js , cesium.js 这种难度较高, 想要实现一个功能可能会查阅很多博客 ,进行很多错误尝试,费时费力。 所以,话不多说为了给各位造福利,我搭建了在线查看代码且可的调试系统,所有案例可直接访问,让你欣赏 什么叫做 - 优雅永

setfacl 细分文件权限

setfacl设置对文件权限,chmod命令可以把文件权限分为u,g,o三个组。 setfacl能够对每个文件或目录设置更精确的权限。 setfacl -m u:sxf:rwx  file 设置用户user1对文件file的rwx [sxf@node2 test]$ ll total 44 -rwxrwxr-x  1 sxf sxf 6479 Apr 24 08:52 candshell -

Vulkan教程 - 08 着色器及编译SPIR-V

着色器模块 不像是之前的API,Vulkan着色器代码一定要用字节码格式,而不是人类可读的语法如GLSL和HLSL。这个字节码就是SPIR-V,设计用于Vulkan和OpenCL。这是一个可以用于编写图形和计算着色器的格式,但是我们主要关注的是Vulkan的图形管线。使用字节码格式的优点之一是GPU厂商写的编译器将着色器代码转化为原生代码会非常简单。过去的经验表明,人类易读的语法如GLSL,某些