iphone - 将自己的结构传递到 opengl es 2.0 着色器中

标签 iphone opengl-es shader opengl-es-lighting

我想尝试《OpenGL ES 2.0 编程指南》一书中的照明示例。在着色器中他们制作了两种结构。

struct directional_light   
{  

    vec3 direction; // normalized light direction in eye space  
    vec3 halfplane; // normalized half-plane vector  

    vec4 ambient_color;
    vec4 diffuse_color;
    vec4 specular_color;
};

struct material_properties 
{ 
    vec4 ambient_color; 
    vec4 diffuse_color; 
    vec4 specular_color; 
    float specular_exponent;
};

他们还根据这些结构制作了两套制服。

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;

问题是,我不知道如何将自己的结构传递到实际的着色器中。

我想在我的主代码中创建相同的结构并将对象传递到着色器中。这怎么可能?

问候 尼古拉斯

最佳答案

你不能,OpenGL ES 没有该功能,要上传,你必须获取每个嵌套变量的位置并对每个变量调用 glUniform*。

例如:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);

关于iphone - 将自己的结构传递到 opengl es 2.0 着色器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4110123/

相关文章:

java - LibGDX FreeType 字体模糊

c++ - 为什么在使用 OpenGL 编译顶点着色器时会出现着色器编译器错误 #143、#160 和 #216?

java - 用于在着色器 OpenGL ES 2.0/3.0 中存储常量值的统一值

android - 将自定义属性传递给自定义 fragment 着色器

iphone - 如何处理 UILabel 上的触摸事件作为 UITableViewCell 的 subview ?

iphone - 删除/隐藏 UIDatePicker 的最小/最大日期范围之外的行?

javascript - Html/javascript 页面在 iPhone 上抛出 404,但在 PC 上运行良好

iPhone 应用程序被杀死后无法在设备上启动 - 在模拟器上工作正常

ios - 即使在解除分配后,GPUImageFilters 中的某些内容仍保留在内存中

c++ - 将 OpenGL 基元转换为 OpenGLES