PyQtGraph: пользовательский шейдер не отображает GLMeshItemPython

Программы на Python
Ответить
Anonymous
 PyQtGraph: пользовательский шейдер не отображает GLMeshItem

Сообщение Anonymous »

При импорте шейдеровпрограммы, вершины и фрагмента, я не могу заставить их отображать мой glmeshitem.

Я подключаю свой шейдер с 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
)
Это не удается, но то же самое с shaper='edgeHilight' (встроенным шейдером pyqtgraph) — нет. Почему? Даже если «hilight» является точной копией «edgeHilight», визуального элемента все равно нет.

Я убедился, что он был добавлен в список шейдеров, вызвав
< 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...
С Shader='hilight':

Код: Выделить всё

Position: 2
Normal: 0
Color: 1
но когда shaper='edgeHilight':

Код: Выделить всё

Position: -1
Normal: -1
Color: -1
Это противоречит здравому смыслу, поскольку последний шейдер работает.

Подробнее здесь: https://stackoverflow.com/questions/793 ... glmeshitem
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»