繁体   English   中英

如何在iOS的SceneKit中的OpenGL SL着色器中使用多个纹理?

[英]How do I use multiple textures in an OpenGL SL shader in SceneKit in iOS?

我有一个包含以下两个变量的文件:

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。

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

[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);
}];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM