Я подключаю свой шейдер с glmeshitem так, как я вижу онлайн на очень старом форуме: < /p >
Код: Выделить всё
gl.shaders.Shaders.append(ShaderProgram('hilight',
[
VertexShader("""
uniform mat4 u_mvp;
attribute vec4 a_position;
attribute vec3 a_normal;
attribute vec4 a_color;
varying vec4 v_color;
varying vec3 normal;
void main() {
// compute here for use in fragment shader
normal = normalize(gl_NormalMatrix * gl_Normal);
v_color = a_color;
gl_Position = u_mvp * a_position;
}
"""),
FragmentShader("""
#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_color;
varying vec3 normal;
void main() {
vec4 color = v_color;
color.x = (normal.x + 1.0) * 0.5;
color.y = (normal.y + 1.0) * 0.5;
color.z = (normal.z + 1.0) * 0.5;
gl_FragColor = color;
}
""")
]))
Код: Выделить всё
self.current_plot = gl.GLMeshItem(
meshdata=mesh_data,
shader='hilight', # Set shader here
smooth=True,
drawFaces=True,
computeNormals=True
)
Я убедился, что он был добавлен в список шейдеров, вызвав
< pre class="lang-py Prettyprint-override">
Код: Выделить всё
print("Shader program ID:", self.shader.program()) # Output 6
< /code>
Что странно, что когда я редактирую функцию краски Glmeshitem так: < /p>
def paint(self):
self.setupGLState()
self.parseMeshData()
if self.opts['drawFaces']:
with self.shader():
# Add debug lines
print("Position: " + str(glGetAttribLocation(self.shader().program(), 'a_position')))
print("Normal: " + str(glGetAttribLocation(self.shader().program(), 'a_normal')))
print("Color: " + str(glGetAttribLocation(self.shader().program(), 'a_color')))
# Rest of code...
Код: Выделить всё
Position: 2
Normal: 0
Color: 1
Код: Выделить всё
Position: -1
Normal: -1
Color: -1
Подробнее здесь: https://stackoverflow.com/questions/793 ... glmeshitem
Мобильная версия