많은 부분이 바꿔었습니다.


LC : Local Coordinate (로컬 좌표계)

- ASSA3d 의 모든 3차원 객체의 슈퍼클래스입니다.

 즉 ASSA3d에서는 철저하게 각각의 객체가 로컬좌표계를 사용합니다.

월드좌표계로 어디쯤일까? 고민하고 계산할 필요가 없습니다. 



Composite:  복합 객체

-  여러개의 객체를 지니는 객체입니다. 파일과 폴더에서 폴더 개념 생각하시면 됩니다.

 또다시 Composite 객체를 지닐수 있고 아니면 Atom 객체를 지닙니다.

이도 또한 로컬좌표계라서 , 해당 Composite 객체의 이동변환, 회전변환은

자신이 지니는 모든 객체에 적용될겁니다. , 내부적으로 MatStack 과 관련이 있습니다.


<<Atom>>:  최소단위

- 더 이상 쪼갤수 없는 최소한의 단위입니다.

Particle 과 Face4 가 있습니다. 실은 자바스크립트는 인터페이스가 없는데

프로퍼티가 동일하면 동일한 동작을 할수 있는 Duck typing 이 있기 때문입니다.

인터페이스처럼 적어놨지만 실제로는 없는 객체입니다. 



Cube: 정육면체 

- Composite 객체의 한 예제를 만든겁니다.

Face4 객체가 6개가 모여서 이루어집니다.


Grid:  분할된 면

- Composite 객체의 한 예제를 만든겁니다.

Face4 객체가  M by N 개 모여서 이루어집니다.


Particle:  점

- 최소단위입니다. 간단하고 반지름 벡터를 지니고 있습니다.

내부적으로는 카메라가 어디를 보든, 항상 정면이 보이도록 되어있습니다.

prog 인자를 넣게 되면(함수) 내부적으로 그리는 함수를 건너뛰고

사용자가 지정한 draw 함수를 실행합니다. 


 
Face4: 4각형면

- 최소단위입니다. 약간 복잡합니다.

뷰볼륨의 가장자리에 걸치게 되면 클리핑이됩니다.

faceColor 와 edgeColor 두가지 색상을 지닐수 있습니다.

edgeColor 가 입력되지 않으면 외곽선은 그리지 않습니다.

particle 과 마찬가지로 prog 인자가 있어서 사용자가 지정한

함수로 대체해서 그리는것도 가능합니다만 Face4는 복잡하기때문에

어렵습니다.



Light : 빛 객체입니다.

- Directitional Light 입니다. 모든 Face에 대해서 수평방향의 빛방향을 가지고 있습니다.

position 과 r,g,b 값만 조정하면 됩니다. position 은 빛의 위치 벡터이고 내부적으로

크기가 1로 정규화 되기 때문에 멀리 놓아도 상관없습니다. 원점에 대한 방향이 중요합니다.

 

Camera: 카메라 객체

- 시야각, 종횡비, near plane, far plane 값을 지니고 있습니다.

값만 가지고 있는 객체입니다.




Scene: 장면 객체

- 3d 장면을 그리기 위해서는 장면 객체가 필요합니다.

객체들을 담아두는 자료구조라고 생각하면 됩니다. 

내부적으로는  일반객체집합과, 아톰객체집합, 조명집합 3가지로 나누어져 있습니다.



Renderer: 렌더러

- Canvas 엘리먼트를 연결하여 실제 render 명령을 내리게 되는 엔트리포인트입니다.

장면객체와, 카메라객체를 인자로 받아서 캔바스에 그려내는 최종역할을 하는 객체입니다.

render( scene , camera ) 메서드와 

picking( x, y ) 메서드가 있습니다.

피킹은 최근 작업한 장면에 대해서 캔바스 화면 좌표가 입력되었을때 해당 좌표에 해당되는

객체를 역으로 추출해내는 기능입니다. 




Projector: 투영기계

- scene 에 존재하는 모든 객체들에 대해서 좌표들을 계산해주는 객체입니다.

가장 복잡한 일을 하는 객체입니다. 렌더러에 소속되어 좌표계산과 그 과정에서 필요한

여러가지 일들을 전담합니다.

클리핑도 하고 파티클 크기도 유지하도록 계산합니다.

계층적으로 연결된 3차원 객체의 좌표를 구하기 위해 내부적으로 Matrix Stack을 사용합니다.



MatStack: 행렬 스택

- 행렬을 스택에 담습니다.

또한 Vec4 를 인자로 받아서 스택 역순으로 단번에 계산하는 

mulVec4( v ) 메서드를 가지고 있습니다.




Mat4: 4 by 4 행렬

4 X 4 행렬 객체입니다. 


Vec4: 4개 원소를 지니는 벡터

Vec3: 3개 원소를 지니는 벡터
 


Vec3, Vec4, Mat4 같은 경우는 또 다른 객체와도 많이 연결되어 있어서

따로 다이어그램에 표기하지는 않았습니다.


조만간 모든 소스코드를 공개할것입니다.

 
Posted by 멍충한아싸

댓글을 달아 주세요