GLSL 片段位置

2024-02-14

在我的 .cpp 代码中,我创建了一个四边形列表,其中一些有一个标志,在像素着色器中,我检查是否设置了该标志,如果未设置标志,则四边形将变为红色,例如,如果设置了标志,我想决定每个像素的颜色,所以如果我需要将标记的四边形的一半着色为红色,另一半着色为蓝色,我可以简单地执行以下操作:

if coordinate in quad < something color = red
else colour = blue; 

通过这种方式,我可以将四边形的一半涂成蓝色,另一半涂成红色,或者我可以决定在哪里放置红色或在哪里放置蓝色。

想象一下我有一个 50x50 像素的四边形

[frag]

if(quad.flag == 1)
  {    
    if(Pixel_coordinate.x<25 ) gl_fragColor = vec4(1.0, 0.0, 0.0, 1.0);
    else gl_fragColor = vec4(0.0, 1.0, 0.0, 1.0);
  }
else
  gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);

在这种情况下,我希望设置了标志的四边形每个面将获得两种颜色。 我希望我现在说得更具体了。

thanks.

只是为了添加一些我不能使用任何纹理的东西。

好的,我现在这样做:

每个四边形有 4 个纹理,坐标为 (0,0)、(0,1)、(1,1)、(1,0);

我使用以下命令启用纹理坐标:

glTexCoordPointer(2, GL_SHORT, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 7));

[vert]

varying vec2 texCoord;

main()
{
    texCoord = gl_MultiTexCoord0.xy;
} 

[frag]

varying vec2 texCoord;

main()
{
    float x1 = texCoord.s;
    float x2 = texCoord.t;
    
    gl_FragColor = vec4(x1, x2, 0.0, 1.0);
}

我总是得到黄色,所以 x1 = 1 和 x2 = 1 几乎总是和一些四边形是黄色/绿色。

我希望片段着色器中的纹理坐标会发生变化,所以我应该得到一个渐变,我错了吗?


如果你想知道坐标within四边形,需要你自己计算。为此,您需要创建一个新的插值(将其称为vec2 quadCoord),并为每个顶点适当设置它,这意味着您可能还需要将其添加为属性并通过顶点着色器传递它。例如:

// in the vertex shader
attribute vec2 quadCoordIn;
varying vec2 quadCoord;

main() {
    quadCoord = quadCoordIn;
              :

绘制四边形时,您需要在绘图代码中输入此属性。对于每个四边形,顶点可能有quadCoordIn(0,0)、(0,1)、(1,1) 和 (1,0) 的值——如果您愿意,您可以使用其他坐标系,但这是最简单的。

然后,在您的片段程序中,您可以访问quadCoord.xy以确定您在四方阵中的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GLSL 片段位置 的相关文章

  • 适用于 Android 的 OpenGL ES 2.0 中的纹理

    我是 OpenGL 新手 我正在通过使用 ES 2 0 为 Android 制作 2D 游戏来自学 我首先创建一个 Sprite 类 该类创建一个平面并向其渲染纹理 为了练习 我有两个 Sprite 对象 它们在同一位置交替绘制 我在 ES
  • GLSL、Opengl 中的视差贴图问题

    我的视差贴图给出了错误的结果 我不知道出了什么问题 影子 放错了地方 光线从观察者处射向立方体 Shader程序 基于dhpoware com vert varying vec3 lightDir varying vec3 viewDir
  • Webgl:写入 gl_FragDepth 的替代方法

    在WebGL中 是否可以写入片段的深度值或以其他方式控制片段的深度值 据我所知 gl FragDepth 不存在于 webgl 1 x 中 但我想知道是否有其他方法 扩展 浏览器特定支持等 来做到这一点 我想要归档的是让光线追踪对象与使用通
  • glsl lowp 随机数生成(用于图形)的好算法是什么?

    我需要一个随机数生成器来创建一些图形静态 我不是在寻找噪声算法 我只是想要白噪声 我所需要的只是 glsl 中的随机数生成器 具体来说 随着时间的推移 我将使用它为每个片段创建随机亮度偏移 要求 生成 0 0 到 1 0 之间的数字 不关心
  • 如何将 ShaderToy 移植到独立 OpenGL

    我一直在看着色玩具 https www shadertoy com 我对示例中列出的着色器代码有疑问 那些是片段着色器吗 语法对我来说似乎很陌生 我对如何在没有顶点着色器或初始化代码的情况下渲染示例感到困惑 例如设置纹理等 Shaderto
  • sin(x) 对于 GLSL 片段着色器、Intel HD4000 上的中等大输入仅返回 4 个不同的值

    我有一个用 GLSL 编写的简单 OpenGL 3 3 片段着色器 本质上 我正在评估sin x 对于中等大的 x 10 000 到 2 000 000 之间 如下所示 version 330 out vec4 fColor void ma
  • 尝试制定一种算法,将图像附加到该主题

    我实际上正在尝试制作一种看起来像三次贝塞尔曲线的算法 但我想知道是否有更简单的解决方案 这就是我想要的 该图的长度为 1 高度为 1 红线是我的实际输入 黄点是给定的参数 我们可以称之为 扭曲 介于 0 和 1 之间 绿线就是我想要的结果
  • 了解 dFdX 和 dFdY 的基础知识

    我读过很多关于行为的描述dFdX n and dFdY n 并且相信我仍然能够掌握学校的偏导数 我不明白的是 在最简单的示例中 n 来自哪里 读取glsl内置函数dFdx n and dFdy n 除了数学之外 没有任何背景 我会将它们解释
  • 如何使用 ImageLoad() 访问深度纹理?

    我需要在 OpenGL 计算着色器中读取深度纹理数据 这是纹理初始化代码 glActiveTexture GL TEXTURE4 glGenTextures 1 framebufferDesc gt m DepthTextureId glB
  • GLSL 片段位置

    在我的 cpp 代码中 我创建了一个四边形列表 其中一些有一个标志 在像素着色器中 我检查是否设置了该标志 如果未设置标志 则四边形将变为红色 例如 如果设置了标志 我想决定每个像素的颜色 所以如果我需要将标记的四边形的一半着色为红色 另一
  • 粒子系统的点精灵

    点精灵是构建粒子系统的最佳选择吗 新版本的 OpenGL 和最新显卡的驱动程序中是否存在点精灵 或者我应该使用 vbo 和 glsl 来做到这一点 点精灵确实非常适合粒子系统 但它们与 VBO 和 GLSL 没有任何关系 这意味着它们是完全
  • 使用 texelFetch() 进行纹理化

    当我将非最大值传递到纹理缓冲区时 在渲染时它会绘制具有最大值颜色的几何图形 我在使用 glTexBuffer API 时发现了这个问题 例如 假设我的纹理数据是GLubyte 当我传递任何小于255的值时 那么颜色与用255绘制的颜色相同
  • Phong 照明:单独添加镜面照明还是与环境光和漫反射一起添加?

    我正在尝试实现 Phong 照明 在某些教程中 将镜面光照添加到环境光照和漫射光照中 然后将总光照乘以纹理颜色 我还看到了一个教程 其中在添加环境光和漫射光与纹理颜色相乘之后单独添加镜面照明 这是一个片段着色器 其中包含两个选项和屏幕截图
  • WebGL 中的 AlphaFunctions?

    是否可以实现透明度低于 0 5 的片段被丢弃 而 alpha 高于 0 5 的片段渲染为不透明的效果 从我读到的来看 glEnable GL ALPHA TEST glAlphaFunc GL GREATER 0 5 这将是我正在寻找的 但
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 即使在顶点着色器中使用,glGetUniformLocation()也会返回-1

    我正在尝试用法线渲染一个简单的立方体 我使用以下代码来初始化着色器 void initShader const char vertexShaderPath const char fragmentShaderPath cout lt lt I
  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • 使用未声明的标识符“gl_InstanceID”

    大家好 我一直在IOS平台上尝试在OpenGLES2 0中进行实例化绘制 我的渲染代码 glEnableVertexAttribArray glVertexAttribPointer glDrawElementsInstancedEXT G
  • GLSL NVidia 方形神器

    当 GLSL 着色器在以下 GPU 上生成不正确的图像时 我遇到了问题 GT 430 GT 770 GTX 570显卡760 但在这些上正常工作 英特尔高清显卡 2500英特尔高清4000英特尔4400显卡740MRadeon HD 631
  • OpenGL 3.1 中已弃用 glLineStipple

    glLineStipple在最新的 OpenGL API 中已被弃用 它被替换成什么 如果不更换 怎样才能达到类似的效果呢 我当然不想使用兼容性配置文件 抱歉 它还没有被任何东西取代 我想到的第一个模拟它的想法是几何着色器 您向几何着色器提

随机推荐

  • Spring Session Data Redis - 从 Redis 存储中获取有效会话、当前用户

    我的问题是 在分布式 Web 应用程序中 是否可以使用 Redis Store 获取有效会话RedisOperationSessionRepository 我的意思是我不想编写显式代码将其放入 Redis 存储然后稍后阅读它 我想了解框架或
  • 如何在Java中使用输出参数? [复制]

    这个问题在这里已经有答案了 有人可以给我一些在函数中使用输出参数的示例代码吗 我尝试用谷歌搜索它 但只是在函数中找到了它 我想在另一个函数中使用这个输出值 我正在开发的代码旨在在 Android 中运行 Java 按值传递 没有out类似于
  • 如何在一段时间后取消 RXJS 订阅

    如果用户的网速很慢并且订阅时间太长 超过30秒 我想取消它 const k this firebase user subscribe data gt some instructions error gt alert error gt con
  • Windbg 设置取决于调用堆栈的条件断点

    问题 我需要制作一个脚本或表达式 如果调用堆栈上的某处是具有特定名称的函数 则该脚本或表达式不会中断 具体问题 如何将调用堆栈上的函数获取到字符串列表 Example Module MyFunctionWithConditionalBrea
  • Leaflet.js:是否可以按属性过滤geoJSON特征?

    我环顾四周 看到很多有关如何显示 隐藏图层的信息 这很酷 但由于我可以向 GeoJSON 功能添加任意属性 所以我希望能够相应地过滤它们 例如 如果我的特征 1 2 和 3 具有以下属性 小 红色 甜的 大 绿色 酸的 小 红色 热的 我如
  • docker compose up 工作正常,但浏览器显示无法访问站点

    docker compose up显示这个 Recreating tutorial product service 1 Recreating tutorial product service 1 done Attaching to tuto
  • ant中设置类路径的问题

    我在运行 Java 程序时遇到问题 它使用一些第三方 JAR 我可以很好地编译它 但是当我在 ant 中调用我的运行目标时 它说它找不到我告诉它在类路径中运行的类 我的 build xml 如下所示
  • 为什么解构赋值不知道空值是假值并使用默认值? [复制]

    这个问题在这里已经有答案了 假设我们有一个函数使用参数内部对象中的一些键 const api data name gt My name is name 如果我们通过 data data 0 data NaN or data undefine
  • 无法在 WCF C# 中接收 xml post 请求值

    我正在试验 WCF 并构建了一个带有 id 和 name 参数的标准产品类 我的目标是从休息中接收它 并返回状态 DataContract public partial class Product DataMember public int
  • 如何在网页上嵌入 mjpeg 文件

    我需要将 IP 摄像机的输出显示到网页 以便最终用户可以使用此页面从该摄像机查看实时内容 它有一个为捕获的视频提供 mjpeg 输出的界面 我需要将其嵌入到我的网页上 它至少应该可以在 Firefox Safari 和 IE 上运行 提前致
  • 当选项比屏幕尺寸长时,iOS 7 不会显示多于一行

    iOS 7 在 html 中不显示多于一行options
  • 如何在Unity3D中用C#制作延迟?

    我刚刚开始学习unity c 我遵循了教程 但我想添加一些东西 using UnityEngine using UnityEngine UI using System Collections public class PlayerContr
  • 一条指令清除 PF(奇偶校验标志)——获取结果寄存器中的奇数位

    在x86汇编中 是否可以在一条且只有一条指令中清除奇偶校验标志 在any初始寄存器配置 这相当于创建一个结果寄存器odd位数 以及任何设置标志的操作 明确排除mov 相比之下 设置奇偶校验标志可以在一条指令中完成 cmp bl bl 清除奇
  • Django 反序列化

    我收到以下错误 回溯 最近一次调用最后一次 文件 tests py 第 92 行 位于 test single search 对于serializers deserialize中的return obj json response ensur
  • 无法从资源加载定义

    我有一个 希望 非常基本的问题 我对 Ant 非常不熟悉 我只是尝试使用构建文件 以便为我最近发现的开源应用程序 Rapid Miner 编写一些插件 我一直在尝试使用 Eclipse 来编译它 遵循 Eclipses org 自己的说明
  • 是否有 UTF-16 字符串类型的 Rust 库? (用于编写 Javascript 解释器)

    For most程序 最好内部使用 UTF 8 http utf8everywhere org 并在必要时转换为其他编码 但就我而言 我想编写一个 Javascript 解释器 并且仅存储 UTF 16 字符串 或数组 要简单得多u16 因
  • ARKit根据触摸位置设置ARAnchor变换

    我正在 XCode 9 上使用 AR 入门应用程序 其中在点击场景中创建锚点 override func touchesBegan touches Set
  • 将原始帧转换为 webm 直播流

    我有一个 ASP NET 应用程序 其设置如下 以 656x492 分辨率捕获原始 RGB 帧的相机 这些帧在我的 C 代码中进行处理 带有一些简单的图像 加工 原始图像存储在字节数组中 以及包装在位图容器中 缺少魔法 将原始图像缓冲区转换
  • SVG 检测“fill: none”上的 Onclick 事件

    当我创建一个 svg 矩形时fill black my onclick事件处理程序被调用 当我更换fill black with fill none 当我在矩形内单击时 不会调用我的事件处理程序 而仅在单击border直肠的 我需要更改什么
  • GLSL 片段位置

    在我的 cpp 代码中 我创建了一个四边形列表 其中一些有一个标志 在像素着色器中 我检查是否设置了该标志 如果未设置标志 则四边形将变为红色 例如 如果设置了标志 我想决定每个像素的颜色 所以如果我需要将标记的四边形的一半着色为红色 另一