커브에 스트로크를 적용 할 때 자기 교차를 피하는 방법은 무엇입니까?


11

내 코드에는 여러 Spline2D 객체가 있으며 각 객체에는 특정 시간에 지정된 수량의 벡터를 반환하는 Position, Velocity 및 Acceleration 메서드가 있습니다. 커브에 그래디언트 스트로크를 생성하기 위해 지오메트리를 구성하기 위해 이러한 벡터를 사용했지만 가파른 커브에서 자체 교차로에 문제가 있습니다. 예를 들어, 다음과 같은 일이 발생합니다.

와이어 프레임 : http://twitpic.com/2zplw1/full
채워짐 : http://twitpic.com/2zpmnt/full

보시다시피, 두 번째 굽힘에서 내부 부분이 자체 교차하여 그 추악한 인공물이 발생합니다. 자체 교차로를 유발하지 않으면 서 스트로크 곡선에 대해 좋은 알고리즘 / 방법이 있습니까?

편집 : 더 극단적 인 예와 내가 달성하고자하는 것의 모형 :

와이어 프레임 : http://twitpic.com/2ztwzi/full
채워짐 : http://twitpic.com/2ztwkt/full
이상적인 결과 (모의) : http://twitpic.com/2ztxa8/full


와우, 나는 그것을 쓸 때 제목의 의미를 깨닫지 못했습니다. :)
ThatsGobbles

답변:


3

GPU와 최신 3D API (예 : OpenGL / D3D)로 렌더링하는 경우 깊이 테스트를 통해이를 제거 할 수있는 것처럼 보입니다. 외부 버텍스를 z = FAR로 지정하고 내부 버트를 z = NEAR로 지정하면 깊이 테스트에서 겹침이 표시되지 않습니다. OpenGL로 :


  // don't forget to clear depth buffer to 1.0f at beginning of frame.
  glClearDepth(1.0f);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // enable depth testing.
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL);

// draw the Spline2D for each segment in spline for each vert in segment if (vert is an outer vert), set vert.z = 1.0, otherwise set vert.z=0.0

주의 사항 : 반투명 스트로크가 필요한 경우 작동하지 않습니다.


1
좋은 대답은, 내가 생각했던 것입니다. 한 번에 zbuffer를 작성하고 두 번째로 색상을 지정하면 반투명 스트로크에서는 작동하지 않는다는 잘못된 생각입니다.
Richard Fabian

고마워, 내 뇌졸중은 실제로 불투명하므로 매우 간단하고 훌륭하게 작동했습니다!
ThatsGobbles

1

"수정"은 결과 출력이 원하는 모양에 따라 달라집니다. 문제는 여기서 충분히 정의되지 않았습니다. 무엇을 의미합니까?

먼저 글리치에 대한보다 극단적 인 예를 만든 다음 포토샵 / 페인트를 사용하여 문제를 해결해 보라고 제안합니다.

접으시겠습니까? 가장자리와 겹치는가? 겹치지 않을 때까지 당기시겠습니까?


좋은 점은 오늘 나중에 Illustrator 또는 Inkscape에서 더 선명한 곡선과 "이상적인"곡선을 만들어 보겠습니다.
ThatsGobbles

원본 게시물이 수정되었습니다!
ThatsGobbles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.