MascotCapsule 에플리케이션의 기본구성
3D 렌더링 처리
3D렌더링의 중심이 되는 렌더링 캔버스 클래스의 처리에 대해 설명합니다. 3D렌더링 처리는 다음과 같이 분류할 수 있습니다.
초기화 처리
* 3D데이터의 Load 및 변수 등의 셋업 처리
화면 갱신 처리
* 3D 렌더링 파라미터의 셋업과 3D 렌더링 처리(주기 기동)
유저인터페이스처리
* 키 입력 등의 처리
화면 갱신 처리의 경우, 실제로는 다음과 같은 2 스텝으로 나누어 처리되는 것에 주의해 주세요.
주기 가동 처리
* 3D 렌더링 파라미터의 셋업 #1 및 repaint()를 호출에 의한 렌더링 요구
실 렌더링 처리(paint())
* 3D 렌더링 파라미터의 셋업 #2및 3D 렌더링 메소드(drawFigure()) 호출하여 줍니다.
* 기동 처리의 마지막에 repaint()를 부르면 시스템이 적당한 타이밍에 paint()를 호출하여 줍니다. 그리고 drawFigure()가 3D 렌더링을 실행합니다.
렌더링 파라미터의 셋업은 초기화 처리, 화면 갱신 처리 및 유저 인터페이스 처리에 자유롭게 할당할 수 있습니다만 아래에서는 전형적인 케이스를 상정하여 설명하는 것으로 하겠습니다.
초기화처리
각종 변수의 생성과 초기화, MascotCapsule용 데이터의 Load를 합니다. 구체적으로는, constructor 및 각각 초기화(子), 초기화 블록 혹은 스레드(thread)의 run() 메소드의 루프를 전처리 합니다. 전형적으로 아래처럼 처리를 행합니다.
각 변수의 생성/초기 설정
* 시점 설정
* 광원 설정
* 광원 대응 모드 설정
* 기타
각 3D 데이터의 Load
*모델 데이터
* 액션 데이터
* texture 데이터
* 환경 맵용 texture 데이터(환경맵을 실행하지 않는 경우는 불필요)
* 원시적 렌더링용 데이터
전형적으로는 resource 데이터로서 스트림으로부터 Load하게 됩니다. (플랫폼에 의해 로컬 기억 영역의 데이터 혹은 서버로부터의 다운로드 데이터를 Load하는 것도 가능합니다.)
Primitive 렌더링용의 데이터는 최종적으로 int[]그리고 renderPrimitives()에 건네받습니다. 그 이전의 데이터 형식이나 로드의 방법에는 특별히 규정은 없습니다.
* MascotCapsule 데이터의 Load가 초기화시에 한정하는 것은 아닙니다. 액션의 전환 등 처리 도중에 Load되는 일도 있습니다.
유저 인터페이스계의 셋업
*소프트 키의 설정
* 기타
화면 갱신 처리
최초로 설명한 것처럼 화면 갱신은 아래의 2단계로 나누어 처리됩니다.
*주기 기동 처리3D렌더링 파라미터의 셋업#1및 repaint() 호출에 의한 렌더링 요구
* 실 렌더링 처리(paint())
3D 렌더링 파라미터의 셋업#2및 3D렌더링 메소드(drawFigure()) 호출
3D 렌더링 파라미터의 셋업은 어떻게 배분하든 상관 없습니다만, 실 렌더링 처리 (paint())에서의 처리는 최소한으로 억제하는 것이 일반적입니다.
주기 가동 처리
통상적으로는 스레드(thread)의 run() 메소드 내에 루프 처리 또는 타이머 이벤트 처리로서 일정 간격으로 기동됩니다. 실제 렌더링시에 필요한 데이터를 셋업 한 다음 repaint() 호출에 의해서 실제의 렌더링을 기동합니다.
실 렌더링 처리(paint())
이것은 paint() 메소드 처리 자체이며 렌더링 의뢰(repaint()) 후, 적절한 타이밍에 시스템으로부터 호출 됩니다. 여기에서는 상기 주기 기동 처리로 실행하고 있지 않는 셋업 처리의 나머지를 실시한 다음, 화면의 클리어 처리를 실시해, 최종적으로 유일한 Micro3D 렌더링 실행 메소드인 drawFigure()를 호출합니다.
* MascotCapsule에서는 drawFigure() 라고하는 하나의 메소드로서 일련의 좌표계 변환 계산, 음면처리로부터 픽셀 렌더링 처리까지를 실행하고 있습니다.
MascotCapsule의 주요 렌더링 파라미터로서는 다음과 같은 것이 있습니다.
* 렌더링모드 관련설정 파라미터(각각의 렌더링 모드, 광원 설정 등)
* 모델의 자세설정 파라미터(액션 인덱스, 액션 플레임 값)
* 좌표변화 파라미터(변환행렬, 스크린 중심, 스케일)
* Primitive 렌더링 파라미터
이것에 대해서 시간 경과 및 유저 조작 등을 반영시키면서 설정해 나가는 것이 MascotCapsule 처리의 기본이 됩니다. 이하, 개별적으로 설명을 추가하겠습니다.
렌더링모드 관련 설정 파라미터
아래의 설정 항목이 있습니다.
* 렌더링모드 설정 :
광원대응 렌더링모드
환경맵핑 모드
Tool shading모드
반투명모드
* 광원설정 :
평행광원(방향과 강도)
환경광(강도)
* Tool shading의 레벨 설정(경계값, High, Low)
* 투영방법설정 :
평행투영
투시투영
그리고, 도중에 변경하지 않는 것이라면, 초기화 처리로 끝내 버리는 것이 좋을 것입니다.
모델의 자세 설정 파라미터
Load된 액션 데이터를 이용하여 어느 액션(액션 인덱스로 지정)의 어떤 상태(액션 프레임값으로 지정)로 할 지를 설정합니다.
통상, 시간 경과를 바탕으로 액션 프레임값을 증감시키는 것으로 애니메이션 효과를 실현합니다.
좌표 변환 파라미터
아래처럼 설정이 가능합니다.
* 시점 좌표 변환(변환 행렬)
* 스크린 좌표 변환(스크린 중심, 스케일)
이것들은 좌표변환(모델 좌표계⇒시점 좌표계⇒스크린 좌표계)시에 사용되며 모델의 평행이동, 회전, 확대 축소가 가능해집니다.
MascotCapsule로 최종적으로 drawFigure()에 건네지는 변환 행렬은 한 개뿐이므로, 각 회전이나 시점 변환은 행렬적계산으로 합성한 다음 설정할 필요가 있습니다.
MascotCapsule에서는 좌표변환계용의 많은 서포트 메소드가 준비되어 있습니다.
유저 인터페이스 처리
키 입력등의 유저 조작을 3D렌더링에 반영시켜 모델의 확대 축소나 회전 등을 실현하기 위한 처리입니다. 이것 자체는 MascotCapsule 고유의 처리가 아니고 아래와 같은 일반적인 입력 처리입니다.
* 키 입력(숫자 패드등)
* 소프트키 입력
* 기타
키프레스 또는 릴리스 시의 이벤트를 습득하여 처리하는 것이 전형적으로, 이 경우는 다른 처리와는 비동기로 기동되게 됩니다. 복수 키의 동시 프레스나 리피트 처리에 대응하기 위해서 키 상태 입력계의 메소드를 사용하는 일도 많지 않을까라고 생각합니다. 이러한 입력 처리로 내부 상태를 변경하여 다음의 렌더링 타이밍에서 렌더링에 반영시키는 것이 일반적입니다.

