【问题标题】:passing uniform float into vertex shader opengl将统一浮点数传递到顶点着色器opengl
【发布时间】:2015-05-30 02:46:03
【问题描述】:

我在通过使用 uniform 将浮点数从 c++ 传递到我的顶点着色器时遇到问题。这个浮点数只是为了不断增加自己。

在我的标题中,我有

float pauto;
void pautoupdate(int program);

现在在我的 cpp 中

void World::pautoupdate(int program)
{
    pauto += 0.1f;

    glUniform1f(glGetUniformLocation(program, "pauto"), pauto);
}

在我的顶点着色器中,它被声明为,它只是增加 x 值

uniform float pauto;

terrx = Position.x;
terrx += pauto;

从这里开始,我没有得到任何结果,我不确定我是否错误地指向它或其他什么。

【问题讨论】:

  • 不清楚这是否会发生,因为您只显示了一小部分代码。但请记住,glUniform*() 在活动程序上设置值。所以你需要在glUniform*()之前调用glUseProgram()

标签: c++ opengl vertex uniform


【解决方案1】:

尝试以下方法:

  1. 我假设您显示的 GLSL 程序不是整个代码,因为没有 main 或任何东西。
  2. 进入函数时检查是否设置了程序
  3. 存储 glGetUniformLocation 的输出并检查是否正常
  4. 在之前/之后调用 glGetError 以查看 GL 是否检测到问题。

如果您想在各种情况下快速测试和设置着色器,有几种工具可以帮助您。例如,在线上有 ShaderToy (http://www.shadertoy.com)。线下,推荐我自己开发的一款,Tao3D(http://tao3d.sf.net)。

【讨论】:

    【解决方案2】:

    glUniform* 应该在 glUseProgram(program) 和 glUseProgram(0) 之间应用:

    1.使用着色器
    2.设置制服
    3.渲染东西
    4.配置着色器

    之所以如此,是因为 OpenGL 必须知道你将制服发送到的女巫程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多