在OpenGL中使用统一参数(使用glm)

Posted

技术标签:

【中文标题】在OpenGL中使用统一参数(使用glm)【英文标题】:Using uniform parameters in OpenGL (using glm) 【发布时间】:2013-04-13 21:57:21 【问题描述】:

我必须执行以下操作:“将纹理拆分为多个部分。您有一个纹理,并且应该通过统一参数传递纹理坐标。”

具体来说,我有 15 个立方体,我想应用一个纹理来覆盖它们的上侧(制作一张大图)

问题是,我不知道统一参数是什么,以及如何使用它来解决问题。它可能与这些方法之一有关吗? http://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml

以下是我的代码的相关部分:

struct Vertex

    glm::vec3 p;
    glm::vec3 c;
    glm::vec2 t; // texture coordinates
;

-

    Vertex vert[] =
     

//          x,  y, z             R, G, B
        glm::vec3(0, 0, 0), glm::vec3(1, 1, 1), //0
        glm::vec3(1, 0, 0), glm::vec3(1, 1, 1), //1
        glm::vec3(0, 1, 0), glm::vec3(1, 1, 1), //2

        glm::vec3(1, 1, 0), glm::vec3(1, 1, 1), //3
        glm::vec3(0, 0, 1), glm::vec3(1, 1, 1), //4

        glm::vec3(1, 0, 1), glm::vec3(1, 1, 1), //5

        glm::vec3(0, 1, 1), glm::vec3(1, 1, 1), //6

        glm::vec3(1, 1, 1), glm::vec3(1, 1, 1), //7


    ;

    GLushort indices[]=
           

        6,7,2,
        7,3,2,

        0,1,4,
        1,5,4,

        6,2,4,
        2,0,4,

        7,6,5,
        6,4,5,

        3,7,1,
        7,5,1,

        2,3,0,
        3,1,0,

    ;

-

for(int i=0; i<15; i++)

    m_matWorld[i] = glm::translate<float>( (float)(i%4), (float)(i/4), 0.0f);

-

for(int i=0; i<15; i++)
        
glUniformMatrix4fv( m_loc_world, 1, GL_FALSE, &(m_matWorld[i][0][0]) ); //az elso i azt jelenti, h hanyadik kockarol van szo a 15-bol
            glDrawElements( GL_TRIANGLES, 36, GL_UNSIGNED_SHORT, 0);

        

【问题讨论】:

单个 (OpenGL) 纹理包含多个用于多个对象的较小纹理,称为 纹理图集。您可以搜索该术语以找到很多示例。 这似乎是一个解决方案,但似乎并不完全是他们想要我做的:/ "你有一个纹理,你应该传递纹理坐标 az uniform 参数。" ... 什么?您应该与您的老师重新验证纹理坐标应该是 uniform 而不是“属性”或其他东西。他的意思是纹理坐标,还是纹理sampler 【参考方案1】:

统一是一个着色器变量,对于所有顶点/片段都是恒定的。可以在http://www.opengl.org/wiki/Uniform_(GLSL) 找到更好的解释,并且您在上面链接的页面具有您可以设置的所有方式

【讨论】:

以上是关于在OpenGL中使用统一参数(使用glm)的主要内容,如果未能解决你的问题,请参考以下文章

为 glm 翻译添加统一向量在 OpenGL 中不起作用

使用 GLM 正确旋转 Open GL 相机

在 Opengl 中使用 glm 旋转

OpenGL统一名称指针作为字符串[重复]

如何使用 GLM 在 OpenGL 中正确计算旋转

使用 GLM 在 OpenGL 中绘制 2 个立方体