gpt4 book ai didi

c++ - 顶点着色器进出?

转载 作者:行者123 更新时间:2023-11-28 02:04:48 26 4
gpt4 key购买 nike

我有两个像这样的着色器:

const char* vertexShaderData =
"#version 450 \n"
"in vec3 vp;"
"in vec3 color;\n"
"out vec3 Color;\n"
"void main(){"
"Color=color;"
"gl_Position = vec4(vp, 1.0);"
"}";

const char* fragShaderData =
"#version 410\n"
"uniform vec4 incolor;\n"
"in vec3 Color;"
"out vec4 outColor;"
"void main(){"
"outColor = vec4(Color, 1.0);"
"}";

我知道每个着色器都会为每个顶点调用。

  1. 我的 vertexShaderData 中的 in 参数在哪里获取它们的值?在代码中我没有指定 vp 是什么或颜色是什么。在第二个着色器中,我得到 in 值来自第一个着色器的 out 值。但是那些初始 in 是从哪里来的呢?
  2. 关于fragShaderDataout 值:这个值是如何使用的?换句话说,OpenGL 如何知道这是一个 RGB 颜色值并知道用这个颜色来绘制三角形?

最佳答案

  1. 对于顶点着色器,

您可以在 C++ 中使用 glGetAttribLocation 来获取驱动程序分配的位置,或者像这样手动设置:layout (location = 0) in vec3 vp; 在 GLSL 中获取属性的位置。然后像这样用 C++ 上传数据:

    // (Vertex buffer must be bound at this point)
glEnableVertexAttribArray( a ); // 'a' would be 0 if you did the latter
glVertexAttribPointer( a, 3, GL_FLOAT, GL_FALSE, sizeof( your vertex ), nullptr );

对于片段着色器,

'in' 变量必须匹配顶点着色器的'out' 变量,就像在您的示例代码中一样 out vec3 Color; -> 在 vec3 颜色中;

  1. gl_Position 控制绘制 outColor 的位置。

关于c++ - 顶点着色器进出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951461/

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