libgdx의 텍스처를 그레이 스케일 이미지로 변환 할 수있는 방법이 있습니까? 지금까지 나는 그레이 스케일로 만들고자하는 이미지를 복사해서 수동으로 만들었지 만, 게임이 점점 더 많은 이미지를 사용하고 많은 디스크 공간을 사용하기 때문에 이것이 최선의 해결책이 아니라고 생각합니다.libgdx의 텍스처 그레이 스케일
답변
그레이 스케일로 텍스처를 렌더링하는 GLSL 셰이더를 작성할 수 있어야합니다. OpenGL 2.x가 필요하며 텍스처를 실제로 "변환"하지 않고 디스플레이에 그레이 스케일로 렌더링합니다. 그레이 스케일 쉐이더 체크 아웃 포함 쉐이더에 대한 자세한 튜토리얼
: 대부분의 자습서 또는 코드 당신이에 찾을 수 있도록 https://github.com/mattdesl/lwjgl-basics/wiki/ShaderLesson3(Libgdx 정말 GLSL 쉐이더 API를 정의하지 않는, 즉, OpenGL을에서 통과 것 일반 OpenGL 용 웹이 작동해야합니다.)
더 많은 직접적인 해킹을 위해서는 the Libgdx SpriteBatch
shader을 가져 와서 프래그먼트 셰이더를 변경하여 rgb
구성 요소를 평균화하십시오. (당신은 당신의 자신의 ShaderProgram
을 정의하고 사용하기 SpriteBatch
에 제공 할 수 있습니다.) 프래그먼트 쉐이더의 변경 몸과 같이 뭔가 (테스트되지 않은, 그래서 컴파일하지 않을 수 있습니다) :
+ " vec4 c = v_color * texture2D(u_texture, v_texCoords);\n" //
+ " float grey = (c.r + c.g + c.b)/3.0;\n" //
+ " gl_FragColor = vec4(grey, grey, grey, c.a);\n" //
당신은 텍스처를로드 할 수 있습니다 루미넌스 전용, 또는 GLES에서 루미넌스와 알파 (glTexImage2D 참조). libgdx에서 Texture을 인스턴스화 할 때 PixFormat.Intensity (휘도) 또는 LuminanceAlpha (휘도 및 알파)을 지정할 수 있습니다. 이것은 그레이 스케일 텍스처를 생성합니다.
두 개의 텍스처 (하나의 색상, 하나의 회색 명암)를로드해야하지만 동일한 소스를 사용할 수 있으며 휘도는 메모리의 픽셀 당 1 바이트 만 사용합니다. 더 효율적인 솔루션은 P.T.에서 제안한대로 쉐이더를 구현하는 것이지만 GLES 2에서만 사용할 수 있습니다.
생각 나는 일부 복사/붙여 넣기 코드를 사용하고자하는 모든 사람들에게 이것을 알리고 싶습니다.
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
public class GrayscaleShader {
static String vertexShader = "attribute vec4 a_position;\n" +
"attribute vec4 a_color;\n" +
"attribute vec2 a_texCoord0;\n" +
"\n" +
"uniform mat4 u_projTrans;\n" +
"\n" +
"varying vec4 v_color;\n" +
"varying vec2 v_texCoords;\n" +
"\n" +
"void main() {\n" +
" v_color = a_color;\n" +
" v_texCoords = a_texCoord0;\n" +
" gl_Position = u_projTrans * a_position;\n" +
"}";
static String fragmentShader = "#ifdef GL_ES\n" +
" precision mediump float;\n" +
"#endif\n" +
"\n" +
"varying vec4 v_color;\n" +
"varying vec2 v_texCoords;\n" +
"uniform sampler2D u_texture;\n" +
"\n" +
"void main() {\n" +
" vec4 c = v_color * texture2D(u_texture, v_texCoords);\n" +
" float grey = (c.r + c.g + c.b)/3.0;\n" +
" gl_FragColor = vec4(grey, grey, grey, c.a);\n" +
"}";
public static ShaderProgram grayscaleShader = new ShaderProgram(vertexShader,
fragmentShader);
}
는
spriteBatch.setShader(GrayscaleShader.grayscaleShader)
전화 그리고 당신은 그레이 스케일을 완료하면 당신은 정말 별도의 파일에 쉐이더를 넣어 그들을로드해야
spriteBatch.setShader(null);
- 1. OpenGL에서 색상으로 렌더링 된 그레이 스케일 텍스처
- 2. LibGDX의 텍스처 렌더링 순서
- 3. LibGDX의 여러 텍스처 인스턴스?
- 4. 그레이 스케일 이미지 및 세그먼트 화하기 어려운 합성 텍스처
- 5. 그레이 스케일 번역 문제
- 6. 그레이 스케일 (matlab)
- 7. 파이어 폭스 그레이 스케일
- 8. UIImage 그레이 스케일 thresholding
- 9. 그레이 스케일 이미지 나누기
- 10. W3C 그레이 스케일 SVG는
- 11. Google지도 API를 - 그레이 스케일
- 12. 라이브 HTML5는 그레이 스케일
- 13. iOS 그레이 스케일/흑백
- 14. SDL2의 그레이 스케일 이미지
- 15. mouseover.js 그레이 스케일 이미지로드
- 16. Drawable => 그레이 스케일
- 17. 그리기 가능 그레이 스케일
- 18. OpenCV의 자바는 그레이 스케일
- 19. EmguCv : 그레이 스케일 줄이기
- 20. libGDX의 텍스처/스프라이트에 도형을 그리기
- 21. libgdx의 텍스처 패커 사이즈 문제
- 22. Android에서 OpenGL ES의 그레이 스케일 텍스처를 채색하십시오.
- 23. Qt + OpenCV 그레이 스케일 오류
- 24. Silverlight MediaElement 그레이 스케일 재생
- 25. 에러 동안 그레이 스케일 이미지
- 26. 하이 차트의 그레이 스케일 SVG
- 27. 적용 CSS 그레이 스케일 속성은
- 28. OpenCV 그레이 스케일 변환 오류
- 29. matlab에서 그레이 스케일 이미지 읽기
- 30. 그레이 스케일 WPF로 비주얼 인쇄
를 호출하는 것을 잊지 마세요 사용하려면 (그리고 깔끔한 쉐이더 도구를 사용합니다.) 유지 관리 가독성 악몽을 원한다면이 옵션을 선택하십시오. –
@iLoveUnicorns 동의 함. 그러나 그것은 빠른 솔루션을 원하고 테스트하기를 원하는 누군가를위한 복사/붙여 넣기 옵션이 아닙니다. 이것이 그렇게하지 못하게하는 것은 아닙니다. 올바른 방향으로 나아가는 것입니다. –