小编Sim*_*ler的帖子

通过Compute Shader对屏幕Quad进行光线跟踪

我最近通过opengl教程寻找光线追踪.大多数教程都更喜欢计算着色器.我想知道他们为什么不渲染纹理,然后将纹理渲染为四边形.

计算着色器方法在屏幕四边形上的优缺点是什么?

opengl graphics raytracing compute-shader fragment-shader

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

顶点和片段着色器如何在OpenGL中进行通信?

我真的不明白片段着色器是如何工作的.

我知道

  • 顶点着色器每个顶点运行一次
  • 片段着色器每个片段运行一次

由于片段着色器每个顶点不起作用,但每个片段如何将数据发送到片段着色器?顶点数量和碎片数量不相等.

如何确定哪个片段属于哪个顶点?

opengl graphics glsl vertex-shader fragment-shader

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

纹理不适合方形 - OpenGL

我正在尝试创建一个正方形并在其中间放置一个红色圆圈.正如你在简单的vert I中看到的那样,我将map(-1,1)范围扩展到(0,1)范围:

coord = position.xy*0.5 + vec2(0.5,0.5);
Run Code Online (Sandbox Code Playgroud)

如果你看一下simple.frag,就有这一行:

if(abs(length(coord - vec2(0.5,0.5))) < 0.3)
Run Code Online (Sandbox Code Playgroud)

因此,我期待在广场中间的红色圆圈.然而,这发生了:

在此输入图像描述

圆心超过(0.5,0.5).如果我将该行更改为:

if(abs(length(coord - vec2(0.0,0.0))) < 0.3)
Run Code Online (Sandbox Code Playgroud)

输出是:

在此输入图像描述

正如预期的那样,圆圈的中心位于左下角.但是不应该是右上角(1,1)?圆圈也不是完美的圆圈.我错过了什么?

初始化:

Shader simpleShader("simple.vert", "simple.frag");
Shader quadShader("quad.vert", "quad.frag");


GLfloat inVertices[] = {   

    -1.0f, 1.0f, 0.0, 
    -1.0f, -1.0f, 0.0,
     1.0f, -1.0f, 0.0,

    -1.0f, 1.0f, 0.0,
    1.0f, -1.0f, 0.0,
    1.0f,  1.0f, 0.0 };


GLfloat quadVertices[] = {   

    -1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
    -1.0f, -1.0f, 0.0f, 0.0f, 0.0f,
    1.0f, -1.0f, 0.0f, 1.0f, 0.0f,

    -1.0f, 1.0f, 0.0f, 0.0f, 1.0f,
    1.0f, -1.0f, 0.0f, 1.0f, …
Run Code Online (Sandbox Code Playgroud)

opengl shader framebuffer glsl render-to-texture

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