2009-06-23 4 views
9

OpenGL을 사용하여 Hermite 커브를 그릴 수있는 방법은 무엇입니까? 저는 베지에 곡선을 그릴 때 평가자를 사용하는 방법을 보여 주지만 Hermite 곡선에 대한 정보를 찾을 수없는 몇 가지 예를 온라인에서 보았습니다.OpenGL에서 Hermite 커브 그리기

답변

1

어떤 Hermite 곡선을 베 지어 곡선으로 변환 한 다음 그릴 수 있습니다. 그들은 단순히 C3에서 두 개의 서로 다른베이스를 사용하여 정의됩니다. Google은 그다지 유용하지 않았기 때문에 이것이 일반적인 질문 인 것처럼 보였습니다. 그래서 우리는 StackOverflow에 대한 답을 명확하게, 어쩌면 몇 가지 샘플 코드로 만들어야합니다. 나는 내일 다시 올 것이다.

6

스티븐 (Steven)이 언급했듯이, 입체 허밋 (Hermite) 곡선을 입방 형 베 지어 곡선으로 변환 할 수 있습니다. 사실 아주 간단합니다. 종점

  • V1 - P0
  • P1에서 유도체 - 시작점
  • V0 -

    • P0 :

      일반적인 입방 미트 곡선은 두 지점과 두 벡터로 정의되고 - 유래 물 : P1

    입방 베 지어로의 변환은 간단하다 : 그런 다음 사용하고 평가자 또는 원하는 다른 방법으로 당신의 베 지어 곡선을 그릴 수

    B0 = P0 
    B1 = P0 + V0/3 
    B2 = P1 - V1/3 
    B3 = P1 
    

    .

  • 11

    베 지어에 대한 제어점 벡터는 [b0 b1 b2 b3]이고 Hermite의 제어점 벡터는 [h0 h1 v0 v1]입니다 (v0 및 v1은 점 h0 및 h1에서 미분/접선 임). 그런 다음 우리는 변환을 보여 매트릭스 양식을 사용할 수 있습니다 :

    미트를

     
    [b0] = 1 [ 3 0 0 0] [h0] 
    [b1] - [ 3 0 1 0] [h1] 
    [b2] 3 [ 0 3 0 -1] [v0] 
    [b3]  [ 0 3 0 0] [v1] 
    

    베 지어

    에 (이 위, 정확히 Naaff의 응답과 같다).

    베 지어는

     
    [h0] = [ 1 0 0 0] [b0] 
    [h1] [ 0 0 0 1] [b1] 
    [v0] [-3 3 0 0] [b2] 
    [v1] [ 0 0 -3 3] [b3] 
    

    그래서 행렬이 아마도 약간 더 복잡한 필요한 것보다 (모든 Naaff의 코드가 짧아 후 지점)이다 형성 미트합니다. 우리는 쉽게 헤르메만 족을 매우 쉽게 지나칠 수 있기 때문에 유용합니다.

    특히 우리는 Catmull-Rom 곡선과 같은 다른 고전적인 기본 입체 파라 메트릭 곡선을 가져올 수 있습니다. 컨트롤 포인트 [c_1 c0 c1 c2]가 있습니다 (베 지어 커브와 달리 커브는 두 번째 컨트롤 포인트에서 세 번째 컨트롤 포인트까지 실행되므로 -1에서 일반적인 번호 매기기). 베 지어에 대한 전환은 다음과 같습니다

    캐트 멀 롬 베지에

     
    [b0] = 1 [ 0 6 0 0] [c_1] 
    [b1] - [-1 6 1 0] [c0] 
    [b2] 6 [ 0 1 6 -1] [c1] 
    [b3]  [ 0 0 6 0] [c2] 
    

    베 지어 캐트 멀 롬에

     
    [c_1] = [ 6 -6 0 1] [b0] 
    [c0] [ 1 0 0 0] [b1] 
    [c1] [ 0 0 0 1] [b2] 
    [c2] [ 1 0 -6 6] [b3] 
    

    내가 너무 캐트 멀 롬 쌍에 미트를 할 수 있지만,이 ' 베 지어가 일반적으로 기본 표현이기 때문에 거의 사용되지 않습니다.