[OpenGL ] OpenGL 3D Draw Ellipse!,, SuperEllipse!


하약 하약~

이번 포스팅은...OpenGL 에서 3D Ellipse 를 그리는 걸 정리 해 보자.
GL 에서는 타원을 그리는 루틴이 없다.

어떻게 할까?

역시 sin, cos 함수를 사용해서(?) 그리면 된다. 


Part 1. Ellipse formulas
타원 공식이 뭐였더라? ( URL : http://en.wikipedia.org/wiki/Superellipse )

 
"수학의 정석" 책에 보면 타원의 공식이 적혀있네요?
아하!! 근데...이걸 어떻게??


일단,,,
Parametric equations 으로 식을 수정하자. 수식이 넘어가는 과정은 생략!

 or


두가지로 나뉘어 집니다.
위의 식은 2D 평면상의 수식입니다.

일단 간단히 설명하자면,
1. a, b <--- 타원의 x축, y 축의 길이
2. sgn() 은 아래에 설명 되어있습니다.
3. "theta" 의 범위는 0~90도
4. 2/n 의 지수승은 C에서 pow() 함수를 이용하면 되죠?

머리속에 떠오르시나요?



※ 수식의 sgn 은 무엇일까요? 알아보고 넘어가도록 하죠.


Part 2. Superellipsoid, Superquadrics formulas
 이제 2D 에 대해서 살펴 보았으니, 3D 로 바로 넘어가겠습니다.
아래의 방법을 따라서 3D 타원을 OpenGL 에서 Draw 할 수 있다면 2D 는 간단히(?) 사용 할 수 있겠죠?
저도 하긴했지만...버벅 거렸네요...^^;;

1. 3D Implicit equation
- 타원의 공식은 아래와 같습니다.

 

 ,



음..2D 하고 크게 차이는 없죠?

2. Parametric description
 바로 본론으로 들어가죠. 파라메트릭 식으로 수정을 하면! 아래의 공식처럼 됩니다.


(알고 넘어가야하는데...식만 이해하고 넘어가버리네요...TT)




수식이 좀(?) 뭐 같죠? ㅋ
처음에..뭘까 했는데...선배가 가르쳐준데로 비교를 해보니, 순서만 틀리고 수식이 같은걸 깨달았습니다.
그래서... 한참동안 뭘까 고민하다가, 잠깐 물마쉬고 물을 빼로 다녀온 사이에...깨달음을 얻었다고 할까?

수식은
x =  A     *     cos(0) ^(2/t)     * cos(@)^(2/t)
y =  B     *     cos(0) ^(2/t)     * sin(@)^(2/t)
z =  C     *     sin(0) ^(2/t)


이고
theta = (0) ,  -90 < (0) < 90 의 범위
@            , -180 < @ < 180 의 범위 라고 생각 하시면 됩니다.

그리고, 여기서 변수는 A,B,C, t,  그리고 sgn
ABC 는 설명안하셔두 알 것 같은데...x,y,z 축의 타원의 반지름
sgn 은 양,음을 나타내겠죠?

그리고

 이 식은...
sgn( cos(0) )의 값이 양수면 1, 음수면 -1 을,
그리고 m지수승만틈 cos(0)을 곱하는거죠.  그리고 절대값이 붙어 있습니다.

일단...소스코드에서는 음수가 들어가면 안되겠죠?

그리고 최종결과물입니다.
순서대로...는 기억을 못하겠고...
원본 -> x,y,z 축으로 각각 돌려가면서 ScreenShot 을 찍은 사진입니다.
타원 이쁘게 나왔죠? - 이제 다음단계로...
다음 단계는,,,타원을 이용해서 아바타의 다리를 그려보도록 하겠습니다.




GL_ellipse.exe

OpenGL Library 가 있어야 실행이 됩니다. ( 압축해서 같이 올릴껄..했나보네...)

참조 URL 정리

1. 3차원 그래픽의 원리 이해, 시각 좌표계 설명
       http://www.misofruit.co.kr/seojewoo/programming/opengl/opengl-1.htm
2. OpenGL 의 기초
       http://blog.naver.com/sensoong?Redirect=Log&logNo=50092094099
3. OpenGL 의 기초
       http://blog.naver.com/kenshin122?Redirect=Log&logNo=112518707
4. 지수승 
       http://user.chollian.net/~ssy23/mat/ch6/ch06.htm
5. sgn
       http://ko.wikipedia.org/wiki/%EB%B6%80%ED%98%B8%ED%95%A8%EC%88%98
6. Super ellipse
 6.1 
http://mathworld.wolfram.com/Superellipse.html
 6.2 http://en.wikipedia.org/wiki/Superquadrics
 6.3 http://en.wikipedia.org/wiki/Superformula
 6.4 ttp://en.wikipedia.org/wiki/Superellipsoid
 6.5 http://en.wikipedia.org/wiki/Superellipse



'Library > openGL' 카테고리의 다른 글

[OpenGL] OpenGL Study 1 일차  (0) 2011.08.09
[openGL] offset  (0) 2011.08.09
[OpenGL] OpenGL Study 0 일차  (0) 2011.08.09
[OpenGL] OpenGL Study 0 일차  (0) 2011.08.08
[OpenGL] OpenGL Study 0 일차  (0) 2011.08.08

댓글

Designed by JB FACTORY