3D 그래픽 질문입니다.


(바보털) #1

3D로 오브젝트들을 직접(점찍어서) 그릴 일이 생겨 질문드립니다. 광원이나 명암 표현은 상관없습니다. 우선 오브젝트는 다음과 같이 표현하려 합니다.

-float 3개로 3차원 좌표 표현
-U8 3개 혹은 I32 1개로 색 표현
-좌표 3개와 색 1개로 폴리곤 표현
-폴리곤 여러 개로 오브젝트 표현

문제는 화면에 폴리곤들을 뿌리는 건데, 이걸 폴리곤으로부터 눈으로 빛을 쏴야하는지, 아니면 눈에서 레이저를 쏴서 충돌판정을 해야하는지 모르겠습니다. 원리에 대해 도움 좀 주시면 감사하겠습니다.


(codesafer) #2

정상적으론 광원 -> 표면 -> 눈 이지만,
화면 픽셀에 떨어지는 색상값을 추적하는건 ray tracing 이라고 합니다.

찾아보세요.

쿼터니언 과 짐벌락도 찾아보시고,
간단히는 2D 다각형 그리는 함수로 그릴 수 있는데, z축에 대해 정렬해야하니까 : )

암튼 건투를 빕니다.

뭐 C++로 움직이는걸 만들어야 된다길래 간단한걸 생각했더니 어느덧 3D 래유.


(바보털) #3

음… 반사되는 빛을 하나하나 계산하려면 계산이 무척 오래 걸릴 것 같은데요…?

그리고 온 물체가 다 반짝반짝할 것 같은데, 이걸 처리하는 법이 있나요?


(codesafer) #4

한 줄에 몇 페이지짜리 답변을 요하는 질문하는거 나빠요. 역산하는 방법을 ray tracing 이라고 한겁니다.
찾아보시면 널렸음유.

물론 님이 말씀하셨듯, 셰이딩 같은거 중요하지 않으면 역산할 필요도 없슴다.
그냥 3차원 좌표를 2차원에 정사영한다음 그걸 draw_poly 같은 다각형 그려주는 함수로 그리면 끝.
z-buffering 안할꺼면 원경부터 하나하나 그려와야되지만유 ㅋㄷㅋㄷ
( 그려놓고 나면 그림자가 없는게 얼마나 요상한지 느끼실테지만,
기본적인걸 할꺼면 삼각형 자체에 그림자를 넣어버리면 되잖아. )

심심하면 backface culling 도 찾아보시길.


(바보털) #5

image


(codesafer) #6

덤으로 광원이나 명암이 상관없다면서 면과 면의 상호작용을 이야기 하는게 좀 어불성설임유.
여기서부터는 renderer 이슈가 되는데,
제한적인 direct illumination 기법부터 radiocity 같은 재귀적 점화기법까지 다양합니당.

근데 이런거 하고 있으면 대학 못갈껄?

재밌어 보이면 대학가서 그래픽스 고고싱. 조지 캣멀의 뒤를 따르는겁니다!
한국형 픽사도 만들고!


(바보털) #7

일단 윾니티로 급한 불만 끄고, 나중에 시간 생길 때 제대로 한번 도전해 보겠읍니다.


스스로 코딩은 주말에만 하기로 했읍니다(대회같은게 아니라면). 주말도 어차피 대부분 학원에서 보내지만…


(codesafer) #8

사실 추천해드렸던 processing 에 날로 코풀수 있는 도구는 다 있습니다만 ( OpenGL wrapper 라 ). ㅋㄷ 뭐 좋으실대로.

16

25


(codesafer) #10

https://processing.org/examples/shapetransform.html


(codesafer) #11

https://processing.org/tutorials/p3d/


(바보털) #12

앗… 안녕… 내 주말아…