Processing에서 GLSL 셰이더를 시작하는 샘플 코드 (Java, Python 모두)

소개



프로그래밍 초보자라도 쉽게 시작할 수 있는 툴 Processing(프로세싱)으로, 프래그먼트 셰이더를 실행할 수 있습니다. Java 또는 Python으로 작성할 수 있습니다.

실행 화면



왼쪽은 Java 코드이고 오른쪽은 Python 코드입니다.


자바로 쓰고 싶을 때



구현



우선은 셰이더의 내용을 쓴 프로그램을 data 폴더 안에 둡니다.

data/FragmentShader.glsl

uniform vec2 resolution;
uniform float time;

void main() {
    vec2 uv = -1. + 2. * gl_FragCoord.xy / resolution.xy;
    gl_FragColor = vec4(
                        abs( sin( cos( time + 3. * uv.y ) * 2. * uv.x + time)),
                        abs( cos( sin( time + 2. * uv.x ) * 3. * uv.y + time)),
                        1.0,
                        1.0);
}

Processing 본체 프로그램에는 다음과 같이 씁니다. FragmentShader.glsl과 파일명을 지정하는 것만으로 data 폴더 안을 찾아 가 줍니다.
PShader sd;

void setup() {
  size(600, 600, P2D);
  sd = loadShader("FragmentShader.glsl");
}

void draw() {
  sd.set("time", millis() / 1000.0);
  sd.set("resolution", (float)width, (float)height);  
  shader(sd);
  rect(0, 0, width, height);
}

파이썬으로 쓰고 싶을 때



파이썬 모드 설치



기본적으로 오른쪽 상단의 언어 설정은 Java 만 선택할 수 있지만,
쉽게 파이썬 모드를 추가할 수 있습니다.

(이쪽의 링크가 이미지 첨부로 알기 ​​쉽습니다)
htps : // py 또는 r에 ゔぁl. 이 m/p 로세신 gpy1/

구현



마찬가지로 data 폴더 안에 자바 때와 정확히 같은 셰이더 파일을 넣어

data/FragmentShader.glsl

uniform vec2 resolution;
uniform float time;

void main() {
    vec2 uv = -1. + 2. * gl_FragCoord.xy / resolution.xy;
    gl_FragColor = vec4(
                        abs( sin( cos( time + 3. * uv.y ) * 2. * uv.x + time)),
                        abs( cos( sin( time + 2. * uv.x ) * 3. * uv.y + time)),
                        1.0,
                        1.0);
}

Processing 본체 프로그램에는 다음과 같이 씁니다.
global sd를 변수를 선언해두면 setup 함수나 draw 함수 모두 같은 셰이더 객체를 참조할 수 있습니다.
def setup():
    global sd
    size(600, 600, P2D)
    sd = loadShader("FragmentShader.glsl")

def draw():
    global sd
    sd.set("time", millis() / 1000.0)
    sd.set("resolution", float(width), float(height))  
    shader(sd)
    rect(0, 0, width, height)

이상, Processing에서 Java에서도 Python에서도 GLSL을 즐기자!

좋은 웹페이지 즐겨찾기