Шейдеры Kivy появляются только в верхней правой части экрана.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Шейдеры Kivy появляются только в верхней правой части экрана.

Сообщение Anonymous »

Я пробую свои первые попытки с шейдерами kivy, потому что хочу иметь градиентный фон для своих виджетов. Как применить шейдер ко всему фону виджета? Почему-то оно появляется только в правом верхнем углу экрана.

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

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import RenderContext, Color, Rectangle
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import NumericProperty

class ShaderWidget(Widget):
mid_point = NumericProperty(0.0)

def __init__(self, **kwargs):
self.canvas = RenderContext()
super(ShaderWidget, self).__init__(**kwargs)

self.canvas.shader.fs = '''
$HEADER$
uniform vec2 resolution;
uniform float u_mid_point;

void main(void) {
vec2 pos = gl_FragCoord.xy / resolution.xy;
float alpha_channel_rate;

if (gl_FragCoord.x < u_mid_point) {
alpha_channel_rate = pow(gl_FragCoord.x / u_mid_point, 2.0);
} else {
alpha_channel_rate = pow((resolution.x - gl_FragCoord.x) / u_mid_point, 2.0);
}

vec4 color = vec4(alpha_channel_rate * 0.5, alpha_channel_rate * 0.5, alpha_channel_rate * 0.5, 1.0);
gl_FragColor = color;
}
'''

with self.canvas:
Color(1, 1, 1, 1)  # White color
self.rect = Rectangle(pos=self.pos, size=self.size)

self.bind(size=self.update_rect, pos=self.update_rect)

def update_rect(self, *args):
self.rect.pos = self.pos
self.rect.size = self.size

self.canvas['resolution'] = [self.width, self.height]
self.canvas['u_mid_point'] = self.width / 2

class GradientApp(App):
def build(self):
layout = BoxLayout()

shader_widget = ShaderWidget()
layout.add_widget(shader_widget)
return layout

if __name__ == '__main__':
GradientApp().run()
Кроме того, если есть кто-то с опытом, я хотел бы знать, как я могу создать шейдер, который плавно переходит от черного к белому, а затем снова исчезает к черному по всему фону виджета. Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/790 ... -of-screen
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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