Opengl 如何将值传递给vispy程序中着色器内部声明的结构?
我的片段着色器包含以下结构变量Opengl 如何将值传递给vispy程序中着色器内部声明的结构?,opengl,glsl,opengl-es-2.0,vispy,Opengl,Glsl,Opengl Es 2.0,Vispy,我的片段着色器包含以下结构变量 struct Material { vec3 ambient; vec3 diffuse; vec3 specular; float shininess; }; uniform Material material; // another uniform uniform float tmp; 在使用过程中 self.program['material.ambient'] = [1,1,1] self.program['materi
struct Material
{
vec3 ambient;
vec3 diffuse;
vec3 specular;
float shininess;
};
uniform Material material;
// another uniform
uniform float tmp;
在使用过程中
self.program['material.ambient'] = [1,1,1]
self.program['material.diffuse'] = [1,0.7,1]
self.program['material.specular'] = [0.5,1,1]
self.program['material.shininess'] = 32
self.program['tmp'] = 10
我得到以下错误
WARNING: Value provided for 'material.diffuse', but this variable was not found in the shader program.
WARNING: Value provided for 'material.ambient', but this variable was not found in the shader program.
WARNING: Value provided for 'material.specular', but this variable was not found in the shader program.
WARNING: Value provided for 'material.shininess', but this variable was not found in the shader program.
INFO: Program has unset variables: { 'material.specular', 'material.shininess', 'material.diffuse', 'material.ambient'}
我正在使用正确的着色器程序,并链接了正确的片段着色器。
我想vispy还不支持struct类型,有什么办法可以传递这些值吗?你确定这些制服在你的着色器中确实是活动的,也就是说,它们真的会影响输出吗?是的,它们是活动的,实际上,vispy还不支持结构,所以我不得不使用OpenGL后端来设置它们。thanks@TusharGupta您是否将功能完全添加到GL后端以支持此功能?你能为它做一个拉取请求吗(如果我错过了,很抱歉)?@djoese实际上不是structs,我用数组来解决这个问题。如果有一个结构,其成员包括灯光、扩散、不透明度。我使用了像灯光[100],不透明度[100]这样的数组。。然后通过索引引用它们。听起来不错。也许将来vispy会更容易支持这一点。如果我没记错的话,需要对着色器解析进行一些重写。你确定这些一致性在着色器中实际处于活动状态吗,即这些一致性是否真的会影响输出?是的,它们处于活动状态,实际上vispy中还不支持结构,因此我必须使用open gl后端进行设置。thanks@TusharGupta您是否将功能完全添加到GL后端以支持此功能?你能为它做一个拉取请求吗(如果我错过了,很抱歉)?@djoese实际上不是structs,我用数组来解决这个问题。如果有一个结构,其成员包括灯光、扩散、不透明度。我使用了像灯光[100],不透明度[100]这样的数组。。然后通过索引引用它们。听起来不错。也许将来vispy会更容易支持这一点。如果我没记错的话,需要重写着色器解析。