【问题标题】:How pass a variable ( not uniform) float value from c++ to a vertex shader OpenGL ES 2.0如何将变量(不统一)浮点值从 C++ 传递到顶点着色器 OpenGL ES 2.0
【发布时间】:2014-06-11 08:15:17
【问题描述】:

如何从c++中发送到pour shader的值,我知道我可以使用uniform类型,但这并不有效,因为需要修改每个顶点中的值并且uniform是常量,我有看到有一种“in”和“out”但不支持OpenGL ES 2.0,你给我发一个例子,说明如何将这些值传递给vertex shader float,我发给他们我的部分代码我正在使用。

attribute float cppValue;
varying float valueV;

void main ()
{
valueV= cppValue;
}

exampleValueCpp float = 1;
glVertexAttribPointer (0, 1, GL_FLOAT, GL_FALSE, 0, & exampleValueCpp);

更新

我已经看到有一个函数“glVertexAttrib1f”和“glVertexAttrib1fv”来修改属性,但我认为它只能与 glBegin 和 glEnd 一起使用,并且这些函数在 OpenGLES 2.0 或更高版本中已过时,我是对的吗? , 是不是 Asher 可以向顶点着色器发送一个不恒定的值?

【问题讨论】:

    标签: android c++ ios opengl-es


    【解决方案1】:

    如果您希望每个顶点的每个浮点数都不同,那么您应该有一个数组来收集它们:

    float* exampleValueCpp = new float[numVertex];
    for(int i = 0;i<numVertex;i++){
        //fill values
    }
    glBindBuffer(GL_ARRAY_BUFFER,0);//use application memory
    glVertexAttribPointer (0, 1, GL_FLOAT, GL_FALSE, 0, exampleValueCpp);
    

    但是您也可以将其上传到 VBO 并像这样使用它:

    glGenBuffers(1, &cppBuffer);
    glBindBuffer(GL_ARRAY_BUFFER, cppBuffer);
    
    float* exampleValueCpp = new float[numVertex];
    for(int i = 0;i<numVertex;i++){
        //fill values
    }
    
    glBufferData(GL_ARRAY_BUFFER, numVertex*sizeof(float), exampleValueCpp, GL_STATIC_DRAW);
    delete[] exampleValueCpp;
    glVertexAttribPointer (0, 1, GL_FLOAT, GL_FALSE, 0, 0);//last parameter is offset into the buffer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      相关资源
      最近更新 更多