OpenGL 2.0을 사용하는 2D iOS 게임에서 작업 중입니다. 이미지가 빛나는 윤곽선을 그리는 셰이더를 작성할 수 있는지 궁금합니다. 모든 이미지는 2D 스프라이트입니다. 윤곽선으로 본 셰이더 예제는 3D 오브젝트 용이므로 2D 이미지가 가능한지 확실하지 않습니다.OpenGL ES Shader로 2D 이미지 개요
답변
가장자리 감지 필터 (예 : Sobel)를 사용하여 the Wikipedia article에 표시된 이미지를 생성 한 다음 그 결과에 가우시안 흐림 효과를 적용하여 가장자리를 부드럽게하고 더 빛나게 한 다음 합성합니다 너의 장면에 그 이미지?
현실적으로 보았던 3D 개요 쉐이더를 재사용 할 수 있습니다. 이론상 깊이 수량을 검사 할 수 있지만 (ES에서 확장 된 노력을 통해), 내가 본 모든 것은 단지 2 차원 효과에 불과합니다. 렌더링 된 이미지
EDIT : Laplacian은 간단한 회선 쉐이더 (장소 : like this에서 설명)로 수행 할 수 있기 때문에 Sobel보다 조금 더 쉽게 적용 할 수 있습니다. 모바일에서 안전하기는하지만 대부분의 경우 3x3 커널을 고수하고 데이터로 수행하는 대신 각 효과에 대해 다른 쉐이더를 작성하려고합니다. 그래서 예. 길이에 기입 거친 가우시안 블러 :
void main()
{
mediump vec4 total = vec4(0.0);
mediump vec4 grabPixel;
total += texture2D(tex2D, texCoordVarying + vec2(-1.0/width, -1.0/height));
total += texture2D(tex2D, texCoordVarying + vec2(1.0/width, -1.0/height));
total += texture2D(tex2D, texCoordVarying + vec2(1.0/width, 1.0/height));
total += texture2D(tex2D, texCoordVarying + vec2(-1.0/width, 1.0/height));
grabPixel = texture2D(tex2D, texCoordVarying + vec2(0.0, -1.0/height));
total += grabPixel * 2.0;
grabPixel = texture2D(tex2D, texCoordVarying + vec2(0.0, 1.0/height));
total += grabPixel * 2.0;
grabPixel = texture2D(tex2D, texCoordVarying + vec2(-1.0/width, 0.0));
total += grabPixel * 2.0;
grabPixel = texture2D(tex2D, texCoordVarying + vec2(1.0/width, 0.0));
total += grabPixel * 2.0;
grabPixel = texture2D(tex2D, texCoordVarying);
total += grabPixel * 4.0;
total *= 1.0/16.0;
gl_FragColor = total;
}
그리고 라플라스 가장자리 감지는 비슷하지만 서로 다른 상수를 찾고 끝납니다.
최적화로, 가변 텍스처에 대한 읽기를 피할 수 있으므로 가변성에 대한 한계를 고려하여 가능한 한 프래그먼트 셰이더가 아닌 버텍스 셰이더에서 상대 샘플링 포인트를 찾아야합니다.
어쩌면 나는 올바른 3D 것들을 보지 않을 것이다. 그러나 내가 보았던 것들은 어느 정도 광원에 작용하는 듯하다. 나는 그것을 2D라고주지 않았다. 저는 쉐이더에 익숙하지 않았기 때문에 아마도 여기서 명백한 것을 간과 할 것입니다. –
많은 Post-Jet Set Radio 셀 쉐이더는 앞쪽 가장자리와 뒤쪽 가장자리 사이의 결합이 될 가장자리를 정의하여 가장자리를 감지하기 위해 카메라 위치를 사용합니다. 당신은 분명히 그것들 중 하나를 사용할 수 없을 것입니다. 그러나 소벨 (Sobel)과 라플라시안 (Laplacian)과 같은 접근법은 2 차원 이미지에서 색상의 불연속성을 찾아 가장자리를 찾아내어 완전히 적합합니다. 아직 회귀 필터를 읽지 않은 경우 회 돌이 필터를 읽는 것이 현명 할 것입니다. 그런 다음 라플라시안 및 가우시안 흐림을 조사하십시오. 후자를 위해 급하게 어셈블 된 샘플 코드를 추가했습니다. – Tommy
- 1. Android OpenGL ES 및 2D
- 2. 이미지로 OpenGL ES 2d 렌더링
- 3. 2D OpenGL ES 장면을 팬하는 방법
- 4. 2D 지오메트리 개요 셰이더
- 5. OpenGL-ES 가변 텍스처 알파 (2D)?
- 6. OpenGL ES - 2D 스프라이트 렌더링시 Z 순서
- 7. Android에서 OpenGL ES 2.0을 사용하는 2D 그래픽
- 8. ios opengl es 2.0 2D + 3D 조합
- 9. OpenGl ES 2D 안드로이드 다시 그리기
- 10. OpenGL ES 용 2D OpenGL 앱을 다시 작성하는 방법은 무엇입니까?
- 11. OpenGL ES 1.1에서 스크롤
- 12. iOS의 OpenGL ES 컨텍스트에서 개요 텍스트를 그리는 방법은 무엇입니까?
- 13. OpenGL ES GL_TEXTURE_RECTANGLE
- 14. OpenGL ES 흔들어서 효과
- 15. OpenGL 또는 OpenGL ES
- 16. OpenGL ES 1.1에서 OpenGL ES 2.0으로 전환
- 17. iOS OpenGL 2D 회전 이미지 (화면이 아님)
- 18. OpenGL ES 2.0에서 텍스처와 이미지 간의 관계
- 19. Android : OpenGL-ES 게임 (HUD) 이미지
- 20. Android OpenGL ES 왜곡 된 이미지
- 21. OpenGL ES iPhone, glClearColor 사용시 손상된 이미지
- 22. OpenGL ES iPhone Textures
- 23. openGL ES 경고
- 24. OpenGL ES 텍스처 메모리
- 25. OpenGL ES - 텍스처의 색조를 변경하십시오.
- 26. OpenGL-ES 로의 OpenGL - glBegin();
- 27. OpenGL ES 2.0의 반투명
- 28. Quartz 2D 또는 OpenGL ES? 장단점, 다른 플랫폼으로의 마이그레이션 가능성
- 29. OpenGL ES 2D Orthographic (Ortho) 모드에서의 드로잉 문제
- 30. 2D 용 OpenGL ES 2.0, 원점을 왼쪽 상단으로 설정하는 방법
그래서 추가하려는 광선이 그림자와 같습니다. –
부드러운 가장자리가있는 이미지 주변의 더 많은 선. –