OpenGL에서 다소 복잡한 멀티 세그먼트 선을 그리려하고 있습니다. 그러나 라인이 두께가 약 3 이상이면 세그먼트 사이의 조인이 매끄럽지 않다는 것을 알게되었습니다. 때로는 그들 사이에 간격이 있습니다. 이러한 조인을 부드럽고 멍청하게 만드는 좋은 방법이 있습니까? Java에서 BasicStroke.JOIN_MITER에 해당하는 것과 비슷한 것을 찾고있다.OpenGL에서 매끄러운 선
답변
OpenGL을 사용하여 생각 라인을 그릴 수있는 가장 일관되고 이식 가능한 방법은 카메라 정렬 (그렇지 않으면 빌보드로 알기) 다각형을 사용하는 것입니다. OpenGL API의 다른 구현은 행의 끝점을 다르게 처리하며 GL_LINE_SMOOTH
은 플랫폼에 따라 크게 다른 결과를 생성합니다. 일부 구현에서는 1보다 큰 두께의 선을 잘못 정의 된 것으로 간주합니다. glLineWidth 맨 페이지에 명시된 바와 같이 : [앤티 앨리어스 라인의 경우] 너비 1 만 지원 될 수 있습니다. 다른 것들은 구현에 의존한다.
즉,이 간단한 문제를 해결하기 위해 간단한 2 패스 해킹을 사용했습니다. 깊이 버퍼 glDepthMask (GL_FALSE)
- 안 쓰기는 원하는 두께의 라인
- 가 라인에서 같은 크기의 모든 라인의 종점에서 평활화 지점 그리기를 평활화 그린다.
- 이 glDepthMask (GL_TRUE)를 작성하기위한 깊이 버퍼를 다시 활성화
또한 깊이 버퍼 설정으로 재생하고 싶을 수도 있습니다. 두 선이 배경과 알파 블렌드 된 픽셀에 대한 심도 테스트를 통과하지 못해서 선들 간의 "갭"이 생길 수 있습니다.
일부 렌더러에서 두꺼운 선은 한 방향으로 만 선을 연장하여 그려집니다. 이 경우 점은 선의 중심에 그려지지 않습니다. OpenGL이 실제로 이것을 잘 처리하지 못하는 것 같습니다. 폴리곤이 결국 가장 좋은 방법이 될 것이라고 생각합니다. – DJClayworth
각 끝의 두께를 반으로 줄입니다. 더 매끄러운 선이 아니라 더 매끄러운 선을 조인 하겠지만 '간격'을 제거해야합니다.
OpenGL 구현의 품질에 따라 결과가 다를 수 있습니다. 서로 다른 구현에서 부드러운 선에 대해 많은 차이점을 발견했습니다.
얇은 다각형을 사용하는 것과 같이 선분을 그리려면 다른 전략을 사용하는 것이 좋습니다.
얇은 폴리곤이 매력적이지만, 앤티 엘리 어싱과 스티 플을 사용할 수 있어야합니다. – DJClayworth
폴리곤에 앤티 앨리어싱을 적용 할 수 있으며 glPolygonStipple이 존재합니다. –
나는 그것을 몰랐다. 도움이 될 수도 있습니다. – DJClayworth
GL_LINE_SMOOTH로 앤티 앨리어싱을 사용하면 선이 약간 그려지는 방식이 변경됩니다. 시도해 볼 수 있습니다. 또한 블렌딩이 작동하도록 활성화해야합니다.
가장 중요한 점은 얇은 직사각형을 사용하여 선을 그리는 방법의 모든 측면을 제어 할 수 없다는 것이므로 더 잘 작동 할 수 있으며 자신 만의 DrawThickLine 함수를 작성한 후에는 더 이상 작업 할 수 없습니다. ..
나는 이미 GL_LINE_SMOOTH를 시도해 보았지만, 불행히도 그다지 좋지는 않은 결과를 준다. – DJClayworth
또 다른 생각 - GL_POINTS와 GL_LINES를 그릴 수 있습니까? GL_POINT_SMOOTH를 사용했다면 점은 상자가 아닌 둥근 원으로 렌더링됩니다. – JPhi1618
또 다른 좋은 아이디어이지만, 일부 렌더러는 한면에서만 확장하여 선을 더 두껍게 만듭니다. 두 점이 모두 두꺼울 때 점의 중심이 선에 있지 않습니다. – DJClayworth
부드럽게하려면 베 지어 곡선이나 다른 형태의 스플라인을 사용해야합니다. OpenGL에 내장되어 있지 않지만 웹 사이트는 example program to generate Bezier curves using OpenGL입니다.
여기의 문제는 선의 곡률이 아니라 세그먼트의 끝이 직선 세그먼트라고해도 서로 대치되지 않는다는 것입니다. 프로그램이 여전히 OpenGL에 선 세그먼트를 보내는 것을 끝내고 우리가 시작한 곳으로 돌아 왔습니다. – DJClayworth
Bletch. 나는 내 자신의 대답을 downvote 유혹 (3 평판을 잃고) ... –
쿼드를 그리고 텍스처 또는 프래그먼트 셰이더를 사용하여 점을 찍습니다. 프래그먼트 셰이더는 앤티 앨리어싱을 제공 할 수도 있습니다.
- 1. 태블릿 입력에서 매끄러운 선 그리기
- 2. OpenGL에서 3D 모양의 선 그리기
- 3. 는 OpenGL에서 떨리는 선 그리기
- 4. OpenGL에서 프레임 버퍼의보기 영역을 기준으로 선 너비를 어떻게 설정합니까?
- 5. CSS가있는 매끄러운 글꼴
- 6. 매끄러운 라이브러리로 텍스처링 하시겠습니까?
- 7. 매끄러운 jQuery 움직이는 문자?
- 8. 매끄러운 (애니메이션) GUI 전환
- 9. UIImageView의 매끄러운 이동 및 집기
- 10. 가장 매끄러운 15 % 곡선 찾기
- 11. 매끄러운 격자를 얻는 방법 iscroll
- 12. 코어 애니메이션이 아닌 매끄러운 애니메이션
- 13. OpenGL에서 회전
- 14. openGl에서 오리엔테이션
- 15. OpenGL에서 '삭제'쿼드
- 16. OpenGl에서 텍스처링
- 17. OpenGL에서 외곽선이있는 획 문자 그리기
- 18. Android 캔버스 그리기 선 - 두꺼운 선 만들기
- 19. 중간 래스터를 사용하지 않고 OpenGL에서 SVG 표시
- 20. 나는 선
- 21. 레이어가 매끄러운 그림자를 던지게하는 간단한 방법이 있습니까?
- 22. 오픈 소스 매끄러운 입자 유체 역학
- 23. Java AWT - 매끄러운 곡선으로 연결된 다각형 그리기
- 24. 안드로이드 브라우저에서 매끄러운 IFRAMES를 보여줄 수 있습니까?
- 25. 밸리 감지 용 매끄러운 1D 히스토그램 (OpenCV)
- 26. 사용자가 페이지를 좋아하는지 확인하는 매끄러운 방법
- 27. voxels의 octree가 주어지면 매끄러운 표면으로 어떻게 렌더링합니까?
- 28. OpenGL에서 카메라 설정
- 29. OpenGL에서 체인 링크 만들기
- 30. OpenGL에서 포인트가 표시되지 않습니다.
이것이 실제로 JOGL 인 경우 자바 태그를 추가하면 관련성이 높아져 더 많은 의견을 얻을 수 있습니다. –
스크린 샷을 추가 할 수 있습니까? –
지금 당장 이미지를 게시 할 곳이 없습니다. – DJClayworth