libGDX의 기본 10개의 마스크 설정하기
무엇을 사다라고 하는가
섀도우는 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을 직접 사용할 때 이것begin
과 end
방법을 호출해서 설정합니다.
그럼에도 불구하고 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
은 사용하지 않는 것이 좋다(바꿀 수 없다).필드 변수shader
는 private
로 사용자 정의할 수 없습니다.
가급적 직접 사용SpriteBatch
하는 경우 소스를 통째로 복사해 다른 반으로 만드는 것이 좋다.Scen2D
에서 사용하려면 Stage
의 구조기에서 Batch를 지정할 수 있습니다. 설정하십시오.
Reference
이 문제에 관하여(libGDX의 기본 10개의 마스크 설정하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinsan68k/items/db51b2b711fd42dbace5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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을 직접 사용할 때 이것begin
과 end
방법을 호출해서 설정합니다.
그럼에도 불구하고 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
은 사용하지 않는 것이 좋다(바꿀 수 없다).필드 변수shader
는 private
로 사용자 정의할 수 없습니다.
가급적 직접 사용SpriteBatch
하는 경우 소스를 통째로 복사해 다른 반으로 만드는 것이 좋다.Scen2D
에서 사용하려면 Stage
의 구조기에서 Batch를 지정할 수 있습니다. 설정하십시오.
Reference
이 문제에 관하여(libGDX의 기본 10개의 마스크 설정하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shinsan68k/items/db51b2b711fd42dbace5
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ShaderProgram
류는 음영을 유지한다.구조기에서 스트라이프 음영과 세션 모드의 문자열이나 파일을 지정할 수 있습니다.OpenGL을 직접 사용할 때 이것
begin
과 end
방법을 호출해서 설정합니다.그럼에도 불구하고 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
은 사용하지 않는 것이 좋다(바꿀 수 없다).필드 변수shader
는 private
로 사용자 정의할 수 없습니다.가급적 직접 사용
SpriteBatch
하는 경우 소스를 통째로 복사해 다른 반으로 만드는 것이 좋다.Scen2D
에서 사용하려면 Stage
의 구조기에서 Batch를 지정할 수 있습니다. 설정하십시오.
Reference
이 문제에 관하여(libGDX의 기본 10개의 마스크 설정하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shinsan68k/items/db51b2b711fd42dbace5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)