[GPG 1 글 4.3] [4.3] 카메라제어기법..소스오류[원서도 역시]

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

eoh
Posts: 135
Joined: 2001-07-20 09:00
Location: REAL:DREAM
Contact:

Post by eoh »

이 글은 예전 GPG 스터디 포럼에 kwanny 님이 올리신 주제와 그에 대한 답글들입니다. 원본(Ezboard)은 "<a href="http://pub32.ezboard.com/fgpgstudyfrm5. ... D=28.topic" target="_blank">[4.3] 카메라제어기법..소스오류[원서도 역시]</a>"입니다.
<div class="imported">
<div class="sep"><span class="cfs">제목: <img src="http://www.ezboard.com/images/posticons ... htbulb.gif" align=absmiddle> [4.3] 카메라제어기법..소스오류[원서도 역시]
</span></div>
<div class="r">글쓴이: kwanny , 글쓴때: 5/31/01 10:12:52 pm</div>

음..4.3에 나온 B스프라인 곡선을 사용하려고 했는데 아무래도 곡선이
이상하게 나와서 이런 저런 찾아 보고 있다가 소스에 문제가 있는듯
하여 글을 올립니다.

void Spline::Build() 의 함수에서

.... Snpped ...

curveData[index].pos[k] =
(
(-1*u_3 + 3*u_2 - 3*u + 1) *
controlData.pos[k] +
( 3*u_3 - 6*u_2 + 0*u + 4) *
controlData[i+0].pos[k] +
(-3*u_3 + 3*u_2 + 3*u + 1) *
controlData[i+1].pos[k] +
( 1*u_3 + 0*u_2 + 0*u + 0) *
controlData[i+2].pos[k]
) / 6.0f;

위의 부분을

curveData[index].pos[k] =
(
(-1*u_3 + 3*u_2 - 3*u + 1) *
controlData.pos[k] +
( 3*u_3 - 6*u_2 + 0*u + 4) *
controlData[i+1].pos[k] +
(-3*u_3 + 3*u_2 + 3*u + 1) *
controlData[i+2].pos[k] +
( 1*u_3 + 0*u_2 + 0*u + 0) *
controlData[i+3].pos[k]
) / 6.0f;

이렇게 고쳐야 할 듯 합니다.


참고로 저자(Dante Treglia II)가 만든 예제(SourceCodePolygonal3Treglia)에 보면..

SPLINE.H 중에서 ...

#define B_SPLINE(u, u_2, u_3, cntrl0, cntrl1, cntrl2, cntrl3)
&nbsp; &nbsp; &nbsp; &nbsp; (
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (-1*u_3 + 3*u_2 - 3*u + 1) * (cntrl0) +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( 3*u_3 - 6*u_2 + 0*u + 4) * (cntrl1) +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (-3*u_3 + 3*u_2 + 3*u + 1) * (cntrl2) +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ( 1*u_3 + 0*u_2 + 0*u + 0) * (cntrl3)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ) / 6
&nbsp; &nbsp; &nbsp; &nbsp; )

SPLINE.CPP 중에서 ..

&nbsp; &nbsp; &nbsp; &nbsp; curveData[index].pos.x = B_SPLINE(u, u_2, u_3,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData.pos.x,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+1].pos.x,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+2].pos.x,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+3].pos.x);

&nbsp; &nbsp; &nbsp; &nbsp; curveData[index].pos.y = B_SPLINE(u, u_2, u_3,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData.pos.y,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+1].pos.y,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+2].pos.y,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+3].pos.y);

&nbsp; &nbsp; &nbsp; &nbsp; curveData[index].pos.z = B_SPLINE(u, u_2, u_3,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData.pos.z,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+1].pos.z,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+2].pos.z,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; controlData[i+3].pos.z);

이런 부분이 있습니다.


참고로 제 툴에서 비교한 사진을 올려 드립니다.

1. 원 소스로 그린 곡선
<!--EZCODE IMAGE START--><img src="http://www.sonnori.co.kr/~kwanny/images ... <!--EZCODE IMAGE END-->

2. 수정된 소스로 그린 곡선
<!--EZCODE IMAGE START--><img src="http://www.sonnori.co.kr/~kwanny/images ... <!--EZCODE IMAGE END-->

원서에도 틀려 있는거 같고 원서 정오표도 아직 수정이 되어 있지 않은 내용인것 같습니다. -_-

그럼.

/서관희

<p></p>
<div class="sep"><span class="cfs">제목: <img src="http://www.ezboard.com/images/posticons/pi_smile.gif" align=absmiddle> 감사..
</span></div>
<div class="r">글쓴이: gryu , 글쓴때: 6/1/01 2:05:53 am</div>

원저자에게 확인해보지는 않았지만, 소스나 스크린샷을 보면 kwanny님 수정하신 게 맞는 것 같습니다.

한 며칠 두고 보다가 다른 이야기가 나오지 않으면 정오표 페이지에 올릴께요..

원서 정오표 페이지에 없는 이야기인만큼 저자에게도 알려줘야 할텐데, 영작에 자신이 없어서.. 그래도 한 번 해볼께요^^


<p><center>
/*************************
as simple as possible,
but not simpler
*************************/
</center>

<br></p></div>