libGDX의 기본 10개의 마스크 설정하기

libGDX는 Windows, Linux, Mac, 안드로이드, 아이폰, HTML에 대응하는 크로스플랫폼 게임 라이브러리다.유명한 Ingress에서도 사용됩니다.유럽과 미국은 비교적 주류적인 곳이다.

무엇을 사다라고 하는가


섀도우는 GPU 리소스를 사용하여 그리기 전에 연산을 삽입하는 필터입니다.
이번 샘플은 단편 모드만 변경하여 흰 무늬의 색깔을 강제로 적용합니다α이렇게 처리했습니다.
일반적으로 어떤 문제도 고려하지 않고 흰색 버전의 무늬 파일을 준비하면 무늬를 불러올 때 픽셀 정보를 흰색으로 변환하여 전송해야 하지만, 이것은 동적 그리기 때 변경된 것이다.

출처


libGDX의 기본 2~텍스쳐 표시와 동일한 소스입니다.나는 단지 그 면도기를 설정했을 뿐이다.실행 결과의 차이를 보십시오.

package test.libgdx;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.scenes.scene2d.Action;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
import com.badlogic.gdx.scenes.scene2d.actions.RepeatAction;
import com.badlogic.gdx.scenes.scene2d.actions.SequenceAction;
import com.badlogic.gdx.scenes.scene2d.ui.Image;

public class MainListener9 implements ApplicationListener{

    ShaderProgram shaderProgram;

    SpriteBatch batch;
    Texture texture;

    @Override
    public void create() {
        batch = new SpriteBatch();
        texture = new Texture("enemy.png");

        //シェーダのセットアップ
        {
            String vertex = "attribute vec4 " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
                    + "attribute vec4 " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
                    + "attribute vec2 " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
                    + "uniform mat4 u_projTrans;\n" //
                    + "varying vec4 v_color;\n" //
                    + "varying vec2 v_texCoords;\n" //
                    + "\n" //
                    + "void main()\n" //
                    + "{\n" //
                    + "   v_color = " + ShaderProgram.COLOR_ATTRIBUTE + ";\n" //
                    + "   v_color.a = v_color.a * (256.0/255.0);\n" //
                    + "   v_texCoords = " + ShaderProgram.TEXCOORD_ATTRIBUTE + "0;\n" //
                    + "   gl_Position =  u_projTrans * " + ShaderProgram.POSITION_ATTRIBUTE + ";\n" //
                    + "}\n";

            String fragment = "#ifdef GL_ES\n" //
                    + "#define LOWP lowp\n" //
                    + "precision mediump float;\n" //
                    + "#else\n" //
                    + "#define LOWP \n" //
                    + "#endif\n" //
                    + "varying LOWP vec4 v_color;\n" //
                    + "varying vec2 v_texCoords;\n" //
                    + "uniform sampler2D u_texture;\n" //
                    + "void main()\n"//
                    + "{\n" //
                    + "    vec4 c4 = texture2D(u_texture, v_texCoords);\n"
                    + "    gl_FragColor = v_color * vec4(1, 1, 1, c4.a);\n"
                    + "}";
            shaderProgram = new ShaderProgram(vertex, fragment);
        }
    }

    @Override
    public void resize(int w, int h) {
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(0, 0, 0.2f, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);


        batch.begin();

        batch.setShader(shaderProgram);
        batch.draw(texture, 0, 0);
        batch.setShader(null);//デフォルトシェーダに戻す

        batch.end();
    }


    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }

    @Override
    public void dispose() {
    }

    //起動部分
    public static void main(String[] args) {
        new LwjglApplication(new MainListener9());
    }
}

실행



해설

ShaderProgram류는 음영을 유지한다.구조기에서 스트라이프 음영과 세션 모드의 문자열이나 파일을 지정할 수 있습니다.
OpenGL을 직접 사용할 때 이것beginend 방법을 호출해서 설정합니다.
그럼에도 불구하고 OpenGL은 직접적으로 사용하는 경우가 드물다.앱 개발 때 고급 API 등을 사용했기 때문이다.이 샘플뿐만 아니라 Stage 등 고급 API는 일반적으로 Batch 인터페이스를 사용하여 그림을 관리합니다.
이때 Batch#setShader() 방법으로 제출ShaderProgram 실례를 통해 설정합니다.
아무것도 하지 않았다면, 변형 모드를 설정했다.전달null을 통해 변형 모드로 돌아갈 수 있습니다.
면도기를 전환할 수 있지만, 이 간단한 면도기를 사용하려면 파라미터가 일치해야 합니다.SpriteBatch를 사용할 때 변형기는 SpriteBatch#createDefaultShader ()에서 생성된다.PolygonSpriteBatch도 이 방법을 호출했기 때문에 이곳의 차폐물 코드를 복제할 수 있다.
이 샘플의 면도기와 라텍스 면도기도 원형을 유지하고 파열발생기도 변형기를 살짝 만졌을 뿐이다.
이 매개 변수를 전달하는 것은 SpriteBatch#setupMatrices() 이다.일단 보는 게 낫지 않을까요?이제 버전의 원본을 넣을게요.
private void setupMatrices () {
    combinedMatrix.set(projectionMatrix).mul(transformMatrix);
    if (customShader != null) {
        customShader.setUniformMatrix("u_projTrans", combinedMatrix);
        customShader.setUniformi("u_texture", 0);
    } else {
        shader.setUniformMatrix("u_projTrans", combinedMatrix);
        shader.setUniformi("u_texture", 0);
    }
}
이 일대를 사용하면 소스가 짧다setShader()도 보기 좋다.여기 있는 거 알아요. setupMatrices()
@Override
public void setShader (ShaderProgram shader) {
    if (drawing) {
        flush();
        if (customShader != null)
            customShader.end();
        else
            this.shader.end();
    }
    customShader = shader;
    if (drawing) {
        if (customShader != null)
            customShader.begin();
        else
            this.shader.begin();
        setupMatrices();
    }
}
언제 불렀는지 사용 시 가볍게 파악하세요.
따라서 면도기를 삐걱삐걱 사용해야 하는 용도 중Batch#setShader은 사용하지 않는 것이 좋다(바꿀 수 없다).필드 변수shaderprivate로 사용자 정의할 수 없습니다.
가급적 직접 사용SpriteBatch하는 경우 소스를 통째로 복사해 다른 반으로 만드는 것이 좋다.Scen2D에서 사용하려면 Stage의 구조기에서 Batch를 지정할 수 있습니다. 설정하십시오.

좋은 웹페이지 즐겨찾기