gpt4 book ai didi

c++ - 在片段着色器中丢失纹理定义

转载 作者:行者123 更新时间:2023-11-30 04:50:38 25 4
gpt4 key购买 nike

我正在尝试使用片段着色器绘制引用网格,我发现在缩小时纹理失去了清晰度,正如您在此处看到的那样。有人知道为什么吗?放大时看起来不错。

外出时四边形上的网格纹理

没有缩放的网格纹理

代码如下:

#version 330 core
uniform int multiplicationFactor;
uniform lowp float threshold;
uniform vec4 gridColor;

in vec2 vUV;

void main() {
// multiplicationFactor scales the number of stripes
vec2 t = vUV * multiplicationFactor;

// the threshold constant defines the with of the lines
if (abs(t.x - round(t.x)) <= threshold || abs(t.y - round(t.y)) < threshold )
gl_FragColor = gridColor;
else
discard;
}

最佳答案

您必须计算与视口(viewport)大小相关的线的距离。

添加一个 vec2 resolution 类型的统一变量,它包含视口(viewport)的宽度和高度,变量 threshold 必须包含以像素为单位的线的粗细(例如1.0):

#version 330 core

uniform int multiplicationFactor;
uniform lowp float threshold; // line width in pixel
uniform vec4 gridColor;
uniform vec2 resolution; // width and height of the viewport

in vec2 vUV;

void main()
{
float m = float(multiplicationFactor);
vec2 t = vUV * m;
vec2 dist = abs(t - round(t)) / m;
vec2 th = threshold / resolution;

if (dist.x > th.x && dist.y > th.y)
discard;

gl_FragColor = gridColor;
}

关于c++ - 在片段着色器中丢失纹理定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54938283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com