标签: shader

将 gl_FragCoord 坐标转换为屏幕位置

我严格意义上谈论的是 2d 环境(事实上这是针对 2d 游戏的)。

在片段着色器中,如何将 gl_FragCoord.x 和 gl_FragCoord.y 转换为屏幕坐标,以便左上角像素为 0, 0,右下角为屏幕分辨率(例如 800, 600)?谢谢

opengl shader fragment-shader

1
推荐指数
1
解决办法
4133
查看次数

OpenGL 着色器的 .HLSL 文件

我正在尝试使用它制作一个简单的 OpenGL 应用程序教程制作一个简单的 OpenGL 应用程序。它说我可以为着色器提供我想要的任何文件扩展名。但是,在 VS2013 中,当我单击“添加新项目”,转到 Visual C++ 选项卡并添加像素着色器或顶点着色器时,它无法正确编译并且出现错误。为什么会发生这种情况?为什么我不能将 .hlsl 文件用于我的着色器,而只能编译常规 .txt 文件?

我得到的错误:

  • 错误x3000
  • 错误x1504

c++ opengl shader

1
推荐指数
1
解决办法
2408
查看次数

VR 中的着色器分析

我想创建一个像这样的着色器,它采用世界坐标并创建波浪。我想分析视频并了解所需的步骤。我不是在寻找代码,我只是在寻找如何使用 GLSL 或 HLSL 或任何其他语言来实现它的想法。

这里是低质量和 fps GIF,以防链接中断。

视频

这是片段着色器:

#version 330 core

// Interpolated values from the vertex shaders
in vec2 UV;
in vec3 Position_worldspace;
in vec3 Normal_cameraspace;
in vec3 EyeDirection_cameraspace;
in vec3 LightDirection_cameraspace;

// highlight effect
in float pixel_z;       // fragment z coordinate in [LCS]
uniform float animz;    // highlight animation z coordinate [GCS]

// Ouput data
out vec4 color;
vec3 c;

// Values that stay constant for the whole mesh.
uniform sampler2D myTextureSampler;
uniform mat4 MV;
uniform vec3 …
Run Code Online (Sandbox Code Playgroud)

opengl directx shader augmented-reality

1
推荐指数
1
解决办法
890
查看次数

THREE.js - 如何实现这种效果?

我有这个 Codepen 演示:Codepen 演示链接,我想将其转换为比本网站英雄部分的背景效果:网站链接

以下是可能使这一点更清楚的图像:

这:第一个状态

改成这样:请求的状态

我真的不知道该怎么办!如果有人可以帮助我,甚至创造一支新笔,那就太棒了!

太感谢了。

这是 Codepen 演示的 JavaScript 代码:

/**/ /* ---- CORE ---- */
/**/ const mainColor = '#070707',
/**/       secondaryColor = '#FF7F16',
/**/       bgColor = '#ffae1e';
/**/ let windowWidth = window.innerWidth,
/**/     windowHeight = window.innerHeight;
/**/ class Webgl {
/**/   constructor(w, h) {
/**/     this.meshCount = 0;
/**/     this.meshListeners = [];
/**/     this.renderer = new THREE.WebGLRenderer({ antialias: true });
/**/     this.renderer.setPixelRatio(window.devicePixelRatio);
/**/     this.renderer.setClearColor(new THREE.Color(bgColor));
/**/     this.scene = new THREE.Scene();
          // …
Run Code Online (Sandbox Code Playgroud)

javascript shader canvas webgl three.js

1
推荐指数
1
解决办法
871
查看次数

计算着色器 OpenGL 写入纹理

我想用计算着色器写入纹理。出于测试目的,我只想将蓝色像素写入给定的空纹理。
我只看到黑屏。我将展示我的代码的相关部分

顶点着色器

#version 330 core
layout (location = 0) in vec2 aPos; 
layout (location = 1) in vec2 aTexCoords;

out vec2 TexCoords;

void main()
{
   TexCoords = aTexCoords;
   gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器

#version 330 core
out vec4 FragColor;

in vec2 TexCoords;

uniform sampler2D screenTexture;

void main()
{
    vec3 col = texture(screenTexture, TexCoords).rgb;
    FragColor = vec4(col, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

编译计算着色器(所有使用的变量都是我的类的成员)//按照Rabbid76的建议更新,仍然不起作用

cshader = glCreateShader(GL_COMPUTE_SHADER);
const char *csSrc[] = {
    "#version 440\n",
    "layout (binding = 0, rgba32f) uniform image2D …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader glsl

1
推荐指数
1
解决办法
1834
查看次数

Open GL ES 2.0 绘制正方形

我正在尝试遵循 Android 开发人员“使用 OpenGL ES 显示图形”教程。在第一部分中,我必须画一个三角形,这样就可以了。现在我应该使用 Square 类来绘制一个正方形,该类可以按照教程进行定义。当我尝试绘制时(使用主要从 Triangle 类复制的 draw() 方法),屏幕仅显示一个三角形,它是定义的正方形的一半(显然我已经注释掉了 triangle.draw() 线.. .)。

这是我的代码,有人有任何提示来解决它吗?

Square.java:

public class Square {

    private FloatBuffer vertexBuffer;
    private ShortBuffer drawListBuffer;

    private final int mProgram;

    private final String vertexShaderCode =
            "attribute vec4 vPosition;" +
                    "void main() {" +
                    "  gl_Position = vPosition;" +
                    "}";

    private final String fragmentShaderCode =
            "precision mediump float;" +
                    "uniform vec4 vColor;" +
                    "void main() {" +
                    "  gl_FragColor = vColor;" +
                    "}";

    // number of coordinates per vertex in …
Run Code Online (Sandbox Code Playgroud)

shader opengl-es glsl opengl-es-2.0

1
推荐指数
1
解决办法
2009
查看次数

与直线的距离——Shadertoy

所以我是shadertoy的新手,我一直在玩一些东西,但我不明白的一件事是如何计算点到线的距离。我可以轻松地用铅笔和纸自己完成,但当我实际尝试将其应用于 Shadertoy 时,不知怎的,我总是搞砸一些东西。这是我所拥有的:

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord/iResolution.xy;

    uv.x -= 0.5; //Puts the origin at the center of the screen

    float r; //Red value
    float g; //Green value
    float b; //Blue value

    float lm = 1.1; //slope
    float lb = 0.5; //intercept

    //Slope/intercept declarations manipulate line
    //second line
    float lmp = 0.0-(1.0/lm); //calculates the slope of the perpendicular line
    float lbp = lb + uv.y + lmp*(uv.x); //and the intercept

    //Intersection …
Run Code Online (Sandbox Code Playgroud)

shader glsl

1
推荐指数
1
解决办法
1772
查看次数

1
推荐指数
1
解决办法
4704
查看次数

卡在改变着色器反照率 alpha 平滑度上

我想定制unity的标准着色器,我已经下载了它的源代码,只是想定制它,这样反照率alpha属性的平滑度应该每帧改变x(例如0.1f)。抱歉,如果这是一个糟糕的问题,但我用谷歌搜索了我能找到的一切,但一无所获。提前致谢。

这是让我的问题更清楚的图像,我想在着色器脚本的每一帧上更改此值

在此输入图像描述

shader cg game-development unity-game-engine

1
推荐指数
1
解决办法
849
查看次数

让GLSL 1.5在Mac OS X上运行

我正在尝试在我的程序中创建自己的顶点和片段着色器(这基本上是一个非常简单的程序,用VBO显示一个三角形).但是,当我尝试运行它时,我总是会看到一个没有任何显示的黑屏.我检查了编译日志,它返回没有错误.我还没有使用我自己的自定义着色器运行程序,这让我想知道我在这里做错了什么.我在OpenGL 3.2和GLSL 1.5上运行我的代码

以下是我正在尝试运行的代码


GLuint vbo;

GLfloat data[] = {0.0, 0.0, -5.0,
                  1.0, 0.0, -5.0,
                  1.0, 1.0, -5.0
};

const char *vertexShader = "\n\
#version 150\n\
\n\
layout (location=0) in vec4 position;\n\
void main()\n\
{\n\
gl_Position = position;\n\
}\n\
";

const char *fragmentShader = "\n\
#version 150\n\
\n\
out vec4 outColor;\n\
\n\
void main()\n\
{\n\
    outColor = vec4(1.0, 0.0, 0.0, 1.0);\n\
}";


- (void)drawRect:(NSRect)dirtyRect
{
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);

    glLoadIdentity();

    glUseProgram(programId);

    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

    glEnableClientState(GL_VERTEX_ARRAY);

    glVertexPointer(3, …
Run Code Online (Sandbox Code Playgroud)

opengl macos shader objective-c

0
推荐指数
1
解决办法
1753
查看次数