UV Coordinates & Uniforms -- OpenGL UV坐标和Uniform变量

Task

A shader is a set of instructions that are executed simultaneously for each pixel on the screen. It can produce different color result depending on the pixel data such as position on the screen.
Use the x component of the pixel's normalized coordinates as the red and the y component as the green when writing pixel's color. As a result, you should notice that the intensity of the red color increases from left to right, and the intensity of the green color increases from bottom to top. In the upper right corner we get yellow color as a result of mixing green and red.
着色器是一组针对屏幕上每个像素同时执行的指令。它可以根据像素数据(例如屏幕上不同的位置)产生不同的颜色效果。
在写入像素颜色时,使用x像素标准化坐标的分量作为红色,使用y分量作为绿色。因此,你可以注意到红色的强度从左到右增加,而绿色的强度从下到上增加。在右上角,我们得到了黄色,这是绿色和红色混合的结果。

Theory

着色器程序用于创建 2D 图像或纹理。为了避免处理生成的纹理的具体尺寸,我们将使用UV坐标。这是纹理坐标的规范化,其中纹理的左下角为(0, 0),右上角为(1.0, 1.0)

规范化像素坐标

要获取当前像素的标准化坐标,请将其位置除以纹理的分辨率:

ini 复制代码
vec2 uv = gl_FragCoord.xy / iResolution.xy;

gl_FragCoord

gl_FragCoord是着色器程序中的一个内置变量,用于表示正在处理的片段的像素坐标。它是一个四维向量,包含片段位置的 X、Y、Z 和 W 分量:

  • X 和 Y:片段的屏幕空间坐标。
  • Z:深度值。
  • W:分别为透视除法值。

gl_FragCoord变量通常用于根据片段的位置执行各种计算。

iResolution

iResolution是一个用于保存纹理分辨率的Uniform变量。Uniform用于将CPU的一些输入发送到所有着色器程序。每个程序接收相同的数据,它们可以读取但无法更改。Uniform的目的是为应用程序提供一种方法来控制着色器的行为,而无需修改着色器代码本身。这使得渲染更加灵活,因为同一个着色器可以使用不同的数据输入来产生不同的效果。

Answer

glsl 复制代码
uniform vec2 iResolution;

void main() {
  vec2 uv = gl_FragCoord.xy / iResolution.xy;
  gl_FragColor = vec4(uv, 0.0, 1.0);
}

练习

UV Coordinates & Uniforms

相关推荐
恋猫de小郭14 小时前
AGENTS.md 真的对 AI Coding 有用吗?或许在此之前你没用对?
前端·人工智能·ai编程
sunny_16 小时前
构建工具的第三次革命:从 Rollup 到 Rust Bundler,我是如何设计 robuild 的
前端·rust·前端工程化
rfidunion17 小时前
springboot+VUE+部署(12。Nginx和前端配置遇到的问题)
前端·vue.js·spring boot
珹洺17 小时前
Java-servlet(五)手把手教你利用Servlet配置HTML请求与相应
java·运维·服务器·前端·servlet·html·maven
QQ243919717 小时前
语言在线考试与学习交流网页平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·spring boot·sql·学习·java-ee
范特西.i18 小时前
QT聊天项目(6)
前端
a11177618 小时前
水体渲染系统(html开源)
前端·开源·threejs·水体渲染
程序员小李白18 小时前
CSS 盒子模型
前端·css·html
Zzz不能停18 小时前
单行 / 多行文本显示省略号(CSS 实现)
前端·css
xiaoxue..18 小时前
TailwindCSS:从“样式民工”到“UI乐高大师”的逆袭
前端·css·ui