【问题标题】:How do I use multiple textures in an OpenGL SL shader in SceneKit in iOS?如何在 iOS 的 SceneKit 的 OpenGL SL 着色器中使用多个纹理?
【发布时间】:2015-08-29 01:07:53
【问题描述】:

我有一个包含这两个变量的片段文件:

uniform highp sampler2D textureImage1;
uniform highp sampler2D textureImage2;

在我的代码中,我将图像绑定到这些:

[myNode.geometry.firstMaterial handleBindingOfSymbol:@"textureImage1" usingBlock:^(unsigned int programID, unsigned int location, SCNNode *renderedNode, SCNRenderer *renderer) {
    glBindTexture(GL_TEXTURE_2D, texture1.name);
}];

[myNode.geometry.firstMaterial handleBindingOfSymbol:@"textureImage2" usingBlock:^(unsigned int programID, unsigned int location, SCNNode *renderedNode, SCNRenderer *renderer) {
    glBindTexture(GL_TEXTURE_2D, texture2.name);
}];

奇怪的是,两个纹理都出现了第一张图像。

每个片段文件只能使用一个纹理吗?

这是 iOS 8。

【问题讨论】:

    标签: ios opengl-es scenekit


    【解决方案1】:

    如果我这样做,它会起作用:

    [myNode.geometry.firstMaterial handleBindingOfSymbol:@"textureImage1" usingBlock:^(unsigned int programID, unsigned int location, SCNNode *renderedNode, SCNRenderer *renderer) {
        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, texture1.name);
        glUniform1i(location, 0);
    }];
    
    [myNode.geometry.firstMaterial handleBindingOfSymbol:@"textureImage2" usingBlock:^(unsigned int programID, unsigned int location, SCNNode *renderedNode, SCNRenderer *renderer) {
        glActiveTexture(GL_TEXTURE1);
        glBindTexture(GL_TEXTURE_2D, texture2.name);
        glUniform1i(location, 1);
    }];
    

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多