제 9 장 . 모바일 3D 그래픽스 기술
9.1 모바일 환경에서 3 차원 그래픽스 기술
9.1.1 모바일 3D 그래픽스 환경
9.1.2 모바일 3D 그래픽스 엔진
9.1.1 모바일 3D 그래픽스 환경
9.1.2 모바일 3D 그래픽스 엔진
9.1.1 모바일 3D 그래픽스 환경
· 모바일 3D 그래픽스의 활용분야
‒
모바일 콘텐츠의 패러다임 변화: 2D
에서3D
로 변화§
활용 분야: 3D 게임, 유무선 연동 3D 채팅 및 아바타 서비스, 3D
메세징, 3D
맵, 3D
메뉴 및 바탕화면‒ PC
수준에서 가능했던3D
콘텐츠의 구현이 가능해 질 전망§
가상 박물관, 가상 쇼핑몰 등 가상현실 콘텐츠 서비스 예상‒ 3D
가속 칩을 탑재한 모바일3D
폰의 본격적인 보급§ 3D 콘텐츠의 일상적인 활용이 가능
· 모바일 3D 그래픽스의 활용분야
‒
모바일 콘텐츠의 패러다임 변화: 2D
에서3D
로 변화§
활용 분야: 3D 게임, 유무선 연동 3D 채팅 및 아바타 서비스, 3D
메세징, 3D
맵, 3D
메뉴 및 바탕화면‒ PC
수준에서 가능했던3D
콘텐츠의 구현이 가능해 질 전망§
가상 박물관, 가상 쇼핑몰 등 가상현실 콘텐츠 서비스 예상‒ 3D
가속 칩을 탑재한 모바일3D
폰의 본격적인 보급§ 3D 콘텐츠의 일상적인 활용이 가능
9.1.1 모바일 3D 그래픽스 환경
· 모바일 3D 그래픽스의 사용환경
‒
모바일Handheld
기기의 제약점§ low power : 32비트 정수 계산만 허용, 배터리 사용
§ low memory : 프로그램 메모리 50KB, 데이터는 최소한도 요구
§ low resolution : 160x120 부터 320x240 (QVGA)
§ rapid evolving platform
‒
데스크 탑과 모바일 환경의 비교· 모바일 3D 그래픽스의 사용환경
‒
모바일Handheld
기기의 제약점§ low power : 32비트 정수 계산만 허용, 배터리 사용
§ low memory : 프로그램 메모리 50KB, 데이터는 최소한도 요구
§ low resolution : 160x120 부터 320x240 (QVGA)
§ rapid evolving platform
‒
데스크 탑과 모바일 환경의 비교데스크 탑 모바일
CPU 1 GHz ~ 3 GHz 100 MHz ~ 500 MHz
FPU 있음 없음
전원 일반전원 배터리
메모리 512 MB 이상 100 KB ~ 128 MB 화면 해상도 640x480 이상 160x120 ~ 320x240
9.1.1 모바일 3D 그래픽스 환경
· 모바일 3D 그래픽의 발전을 위한 조건
‒
모바일 전용3D
그래픽 처리 엔진이 필요§
국내: 리코시스M3D, 고미드 G3, 와우포엠 NF3D가 있고,
§
외국: HI Micro3D, Fathammer X-Forge, Superscape Swerve‒
모바일3D
그래픽스 표준API
필요§
그래픽스 기능 및 장면 그래프(Scene Graph)를 표현하는 표준API
로는OpenGL|ES
와JSR-184
가 대표적‒
고성능,
저전력 특성을 갖는 그래픽 가속칩 필요§ ARM, Intel, Micro Electronics, TI, ATI, NVidia
등은모바일
3D 그래픽 하드웨어 가속장치 개발 중
· 모바일 3D 그래픽의 발전을 위한 조건
‒
모바일 전용3D
그래픽 처리 엔진이 필요§
국내: 리코시스M3D, 고미드 G3, 와우포엠 NF3D가 있고,
§
외국: HI Micro3D, Fathammer X-Forge, Superscape Swerve‒
모바일3D
그래픽스 표준API
필요§
그래픽스 기능 및 장면 그래프(Scene Graph)를 표현하는 표준API
로는OpenGL|ES
와JSR-184
가 대표적‒
고성능,
저전력 특성을 갖는 그래픽 가속칩 필요§ ARM, Intel, Micro Electronics, TI, ATI, NVidia
등은모바일
3D 그래픽 하드웨어 가속장치 개발 중
9.1.1 모바일 3D 그래픽스 환경
· 3D 엔진 , 표준 API, 3D 콘텐츠 , 하드웨어간의 관계
9.1.2 모바일 3D 그래픽스 엔진
· 모바일 3D 엔진의 특성
‒
꼭지점과 삼각형 면의 집합으로 구성된 데이터가 화면 위에 해당하는 픽셀로 나타나는 과정을 처리해주는 프로그램§ PC
의 경우OpenGL
또는DirectX
가 이 역할을 수행‒
화면/
색상의 수 제한,
저전력 환경,
낮은 주파수의 데이터 버스· 모바일 3D 엔진의 구성
‒
전처리,
기하변환,
래스터라이저 세 단계의 처리과정으로 구성§
기하변환과 래스터라이저 부분은PC에서는 전용 하드웨어로 구현
· 모바일 3D 엔진의 특성
‒
꼭지점과 삼각형 면의 집합으로 구성된 데이터가 화면 위에 해당하는 픽셀로 나타나는 과정을 처리해주는 프로그램§ PC
의 경우OpenGL
또는DirectX
가 이 역할을 수행‒
화면/
색상의 수 제한,
저전력 환경,
낮은 주파수의 데이터 버스· 모바일 3D 엔진의 구성
‒
전처리,
기하변환,
래스터라이저 세 단계의 처리과정으로 구성§
기하변환과 래스터라이저 부분은PC에서는 전용 하드웨어로 구현
9.1.2 모바일 3D 그래픽스 엔진
① 모델링 및 전처리 과정
‒ 3D
데이터를 꼭지점 및 삼각형 면의 정보 형태로 구성② 기하변환 과정
‒
꼭지점들의 화면상 좌표를 계산, 보이지 않는 면 제거(cull face), 광원 효과를 고려하여 각 면의 색상을 계산‒
각 꼭지점에 대한 연산 수행§
모델&뷰잉 변환-> 조명 -> 투영 -> 클리핑 -> 스크린 매핑
③ 래스터라이저 과정
‒
주사선변환 과정을 거쳐 실제 그림을 디스플레이하는 과정‒
즉,
화면 픽셀의 색상을 계산하여 픽셀 버퍼에 저장① 모델링 및 전처리 과정
‒ 3D
데이터를 꼭지점 및 삼각형 면의 정보 형태로 구성② 기하변환 과정
‒
꼭지점들의 화면상 좌표를 계산, 보이지 않는 면 제거(cull face), 광원 효과를 고려하여 각 면의 색상을 계산‒
각 꼭지점에 대한 연산 수행§
모델&뷰잉 변환-> 조명 -> 투영 -> 클리핑 -> 스크린 매핑
③ 래스터라이저 과정
‒
주사선변환 과정을 거쳐 실제 그림을 디스플레이하는 과정‒
즉,
화면 픽셀의 색상을 계산하여 픽셀 버퍼에 저장9.1.2 모바일 3D 그래픽스 엔진
· 모바일 3D 엔진의 핵심 기술
‒
휴대단말기 환경에 최적화된 작은 크기의 소프트웨어 엔진 필요§ 3D 게임, 아바타, GUI 등 각종 3D 콘텐츠에 애니메이션이 적용
가능한 정도의 빠른 렌더링 기술‒
모바일 환경에 최적화된3D
그래픽 파이프라인 구현 기술 필요§
엔진의 크기를 얼마나 작게 하는가(
약40K
~300K
바이트)
§
얼마나 빠르게 하느냐(500
폴리곤 기준 초당3
~30
프레임 정도)
‒
사용하기 쉬운API
를 제공§
일반CP(Content Provider)
들이 손쉽게 콘텐츠 개발을 할 수 있는 저작도구를 제공하여 개발 기간을 단축하도록§
여러가지 모바일OS 및 플랫폼 지원
· 모바일 3D 엔진의 핵심 기술
‒
휴대단말기 환경에 최적화된 작은 크기의 소프트웨어 엔진 필요§ 3D 게임, 아바타, GUI 등 각종 3D 콘텐츠에 애니메이션이 적용
가능한 정도의 빠른 렌더링 기술‒
모바일 환경에 최적화된3D
그래픽 파이프라인 구현 기술 필요§
엔진의 크기를 얼마나 작게 하는가(
약40K
~300K
바이트)
§
얼마나 빠르게 하느냐(500
폴리곤 기준 초당3
~30
프레임 정도)
‒
사용하기 쉬운API
를 제공§
일반CP(Content Provider)
들이 손쉽게 콘텐츠 개발을 할 수 있는 저작도구를 제공하여 개발 기간을 단축하도록§
여러가지 모바일OS 및 플랫폼 지원
9.2 모바일 3D 그래픽스 API 표준
9.2.1 OpenGL ES 의 소개 9.2.2 JSR-184(M3G) 의 소개
9.2.3 모바일 그래픽스 관련 표준화 현황 9.2.1 OpenGL ES 의 소개
9.2.2 JSR-184(M3G) 의 소개
9.2.3 모바일 그래픽스 관련 표준화 현황
9.2.1 OpenGL ES 의 소개
· 크로노스 그룹 (Khronos Group)
‒
모바일용 오디오,
비디오, 2D, 3D
그래픽API
의 표준화 추진‒
컨소시엄 형태의 표준화 그룹으로 전 세계200
여 업체 참여· OpenGL ES (OpenGL for Embedded System) 특징
‒
휴대용 단말기나 임베디드 기기에서 보다 향상된2D/3D
그래픽 성능을 위해 제안된Low-Level
단의 경량API
‒ S/W
애플리케이션과H/W
혹은 그래픽 엔진 간의API
를 제공‒ OpenGL
을 기반으로 하여 사용빈도가 낮거나 불필요한 부분을 제거한OpenGL 1.3
의Subset
· 크로노스 그룹 (Khronos Group)
‒
모바일용 오디오,
비디오, 2D, 3D
그래픽API
의 표준화 추진‒
컨소시엄 형태의 표준화 그룹으로 전 세계200
여 업체 참여· OpenGL ES (OpenGL for Embedded System) 특징
‒
휴대용 단말기나 임베디드 기기에서 보다 향상된2D/3D
그래픽 성능을 위해 제안된Low-Level
단의 경량API
‒ S/W
애플리케이션과H/W
혹은 그래픽 엔진 간의API
를 제공‒ OpenGL
을 기반으로 하여 사용빈도가 낮거나 불필요한 부분을 제거한OpenGL 1.3
의Subset
9.2.1 OpenGL ES 의 소개
· OpenGL ES 버전
‒ 2003.7
버전1.0 : OpenGL 1.3
에 근거,
소프트웨어 구현에 촛점‒ 2004
중반 버전1.1 : OpenGL 1.5
에 근거,
하드웨어 가속 강조‒ 2005 버전 2.0 : 쉐이딩과 프로그램 가능 하드웨어 지원
9.2.1 OpenGL ES 의 소개
· OpenGL|ES 의 장점
‒
산업계 표준,
로열티 필요 없다‒
적은 메모리를 요구,
전력 소모 최소화‒ S/W 렌더링에서 H/W 렌더링으로의 전환이 용이
‒
확장 및 진화 발전이 가능:
업데이트 가능한extension
제공‒
사용이 용이:
직관적 디자인과 논리적 명령 체계로 구조화‒
풍부한 관련 자료: OpenGL
에 기반,
방대한 자료와 샘플 코드· OpenGL|ES 의 장점
‒
산업계 표준,
로열티 필요 없다‒
적은 메모리를 요구,
전력 소모 최소화‒ S/W 렌더링에서 H/W 렌더링으로의 전환이 용이
‒
확장 및 진화 발전이 가능:
업데이트 가능한extension
제공‒
사용이 용이:
직관적 디자인과 논리적 명령 체계로 구조화‒
풍부한 관련 자료: OpenGL
에 기반,
방대한 자료와 샘플 코드9.2.2 JSR-184(M3G) 의 소개
· JSR-184 필요성
‒ OpenGL
을 이용할 경우, MIDlet
이 커지므로 속도가 느려진다.
‒ Java3D API
는 사양이 방대하여MIDP
에 적합하지 않다.
‒ J2ME 환경에서 실행되는 상위 레벨의 그래픽 라이브러리 필요
· JSR-184 의 특징
‒ JCP(Java Community Process)
의JSR(Java Specification Request)-184 :
‒
자바 환경의Mobile 3D Graphics (M3G) API
§
자바의 특성을 이어받아Object
의 재사용과 공유를 원칙§
장면 그래프로 표현하는 모드와 기존OpenGL과 호환되는 모드
· JSR-184 필요성
‒ OpenGL
을 이용할 경우, MIDlet
이 커지므로 속도가 느려진다.
‒ Java3D API
는 사양이 방대하여MIDP
에 적합하지 않다.
‒ J2ME 환경에서 실행되는 상위 레벨의 그래픽 라이브러리 필요
· JSR-184 의 특징
‒ JCP(Java Community Process)
의JSR(Java Specification Request)-184 :
‒
자바 환경의Mobile 3D Graphics (M3G) API
§
자바의 특성을 이어받아Object
의 재사용과 공유를 원칙§
장면 그래프로 표현하는 모드와 기존OpenGL과 호환되는 모드
9.2.2 JSR-184(M3G) 의 소개
· OpenGL ES 와 JSR-184 의 차이점
‒
그래픽 개념이나 단계적 절차는 동일하나 표현방식에서 차이‒ JSR-184
에서는OpenGL ES
에 정의된 모든 기능을 구현 가능§
절차적인 방식의OpenGL ES에 비해 구조적/기능적 개선
‒
모바일 환경에서OpenGL ES
와JSR-184
의 역할9.2.3 모바일 그래픽스 관련 표준화 현황
(1) 크로노스 그룹 (Khronos Group) 의 표준화 현황
‒
크로노스 그룹(http://www.khronos.org)
§ Embedded 및 이동형 단말기의 오디오, 비디오, 2D, 3D 그래픽 API
표준화를 추진하는 컨소시엄 형태의 표준화 그룹§ 2000. 1 3DLabs, Discreet, Evans & Sutherland, Intel, Nvidia, SGI, ATI
등 그래픽 및 미디어 관련 회사 중심으로 설립§
현재200
여 업체 참여‒
크로노스 그룹의 미디어API
의 역할(1) 크로노스 그룹 (Khronos Group) 의 표준화 현황
‒
크로노스 그룹(http://www.khronos.org)
§ Embedded 및 이동형 단말기의 오디오, 비디오, 2D, 3D 그래픽 API
표준화를 추진하는 컨소시엄 형태의 표준화 그룹§ 2000. 1 3DLabs, Discreet, Evans & Sutherland, Intel, Nvidia, SGI, ATI
등 그래픽 및 미디어 관련 회사 중심으로 설립§
현재200
여 업체 참여‒
크로노스 그룹의 미디어API
의 역할9.2.3 모바일 그래픽스 관련 표준화 현황
· Khronos Group 의 미디어 API
‒ OpenGL|ES(OpenGL for Embedded Systems)
§ 2D/3D 그래픽을 위한 저 수준의 그래픽스 라이브러리 제공
‒ OpenVG(Open Vector Graphics)
§
모바일 기기에서의 벡터 그래픽 기능을 목표로 하는 저 수준의API
‒ OpenMAX(Open Media Acceleration Primitives)
§
기본적인 미디어 처리기능을 표준화한API
‒ OpenSL ES(Open Sound API for Embedded System)
§
임베디드 시스템에서 하드웨어 가속을 지원하는 오디오API
· Khronos Group 의 미디어 API
‒ OpenGL|ES(OpenGL for Embedded Systems)
§ 2D/3D 그래픽을 위한 저 수준의 그래픽스 라이브러리 제공
‒ OpenVG(Open Vector Graphics)
§
모바일 기기에서의 벡터 그래픽 기능을 목표로 하는 저 수준의API
‒ OpenMAX(Open Media Acceleration Primitives)
§
기본적인 미디어 처리기능을 표준화한API
‒ OpenSL ES(Open Sound API for Embedded System)
§
임베디드 시스템에서 하드웨어 가속을 지원하는 오디오API
9.2.3 모바일 그래픽스 관련 표준화 현황
(2) Java API
· JCP(Java Community Process)
‒ 1998 Sun Microsystems
설립,
자바 플랫폼 표준화 활동 지원‒ JSR(Java Specification Requests)
§ JCP
회원사가 제안한 자바 플랫폼에 대한 구체적인 기술 사양‒
모바일3D
표준과 관련된 항목§ JSR-184 : Mobile 3D Graphics API for J2ME
§ JSR-226 : Scalable 2D Vector Graphics API for J2ME
§ JSR-287 : Scalable 2D Vector Graphics API 2.0 for J2ME
§ JSR-239 : JAVA Bindings for OpenGL ES
- OpenGL ES 3D
그래픽 라이브러리에 대한 자바 바인딩-
기본 내용은OpenGL ES와 동일하며, 자바에서 동작하는 환경 제공
(2) Java API
· JCP(Java Community Process)
‒ 1998 Sun Microsystems
설립,
자바 플랫폼 표준화 활동 지원‒ JSR(Java Specification Requests)
§ JCP
회원사가 제안한 자바 플랫폼에 대한 구체적인 기술 사양‒
모바일3D
표준과 관련된 항목§ JSR-184 : Mobile 3D Graphics API for J2ME
§ JSR-226 : Scalable 2D Vector Graphics API for J2ME
§ JSR-287 : Scalable 2D Vector Graphics API 2.0 for J2ME
§ JSR-239 : JAVA Bindings for OpenGL ES
- OpenGL ES 3D
그래픽 라이브러리에 대한 자바 바인딩-
기본 내용은OpenGL ES와 동일하며, 자바에서 동작하는 환경 제공
9.2.3 모바일 그래픽스 관련 표준화 현황
(3) 국내 표준화 현황
· 국내 업체 현황
‒
표준화 이전에3D
서비스가 먼저 시작,
그 후 세계 표준화 기구의 표준을 따르고 있는 상황‒ Khronos
그룹에 참여 또는OpenGL ES
를 표준API
로 채택· 모바일 3D 표준화 포럼
‒
국내에서도 표준화 필요성이 부각되어2004
년4
월 포럼 설립§
국내 모바일3D
산업의 활성화와 해외경쟁력 확보가 목표‒
총47
개사의 기관회원이 참여 산·
학·
연 연계 협력 체제를 구성§
이동통신사,
단말기 제조사,
플랫폼 제작사, H/W
솔루션 제작사, S/W 솔루션 제작사, 콘텐츠 제작사, 학교, 연구소
‒ 5
개 분과: 3D
엔진,
사운드,
응용 레이어,
모바일 콘텐츠,
기획(3) 국내 표준화 현황
· 국내 업체 현황
‒
표준화 이전에3D
서비스가 먼저 시작,
그 후 세계 표준화 기구의 표준을 따르고 있는 상황‒ Khronos
그룹에 참여 또는OpenGL ES
를 표준API
로 채택· 모바일 3D 표준화 포럼
‒
국내에서도 표준화 필요성이 부각되어2004
년4
월 포럼 설립§
국내 모바일3D
산업의 활성화와 해외경쟁력 확보가 목표‒
총47
개사의 기관회원이 참여 산·
학·
연 연계 협력 체제를 구성§
이동통신사,
단말기 제조사,
플랫폼 제작사, H/W
솔루션 제작사, S/W 솔루션 제작사, 콘텐츠 제작사, 학교, 연구소
‒ 5
개 분과: 3D
엔진,
사운드,
응용 레이어,
모바일 콘텐츠,
기획9.3 OpenGL ES 프로그래밍
9.3.1 OpenGL ES 프로그램의 구성
9.3.2 OpenGL ES 프로그램의 예
9.3.1 OpenGL ES 프로그램의 구성
9.3.2 OpenGL ES 프로그램의 예
9.3.1 OpenGL ES 프로그램의 구성
· EGL(Embedded Graphics Library)
‒
고유의 플랫폼 인터페이스(Native Platform Interface)
§
공통적인 플랫폼 인터페이스 레이어, 플랫폼 결합 함수들을 정의§
플랫폼이나 운영체제와 상관없이OpenGL ES의 그래픽스 작업을
사용할 수 있게 도와주는 라이브러리‒
모바일3D 어플리케이션 프로그램의 구성
§ 3D
그래픽스를 처리하는OpenGL ES
함수들과 시스템에 종속적인 부분을 처리하는EGL 및 시스템 함수들로 구성
· EGL(Embedded Graphics Library)
‒
고유의 플랫폼 인터페이스(Native Platform Interface)
§
공통적인 플랫폼 인터페이스 레이어, 플랫폼 결합 함수들을 정의§
플랫폼이나 운영체제와 상관없이OpenGL ES의 그래픽스 작업을
사용할 수 있게 도와주는 라이브러리‒
모바일3D 어플리케이션 프로그램의 구성
§ 3D
그래픽스를 처리하는OpenGL ES
함수들과 시스템에 종속적인 부분을 처리하는EGL 및 시스템 함수들로 구성
9.3.1 OpenGL ES 프로그램의 구성
· OpenGL ES 기능 개요 ( 참고 )
구분 포함된 기능
(OpenGL ES 1.0)
기하처리(Geometry Processing)
꼭지점 배열, 점/선/삼각형 그리기, 행렬 스택, 뷰포트, 깊이범위, 꼭지점 광원처리, 쉐이딩 모델
래스터화
(Rasterization)
멀티 샘플링(optional), 점/선 및 앤티 앨리어싱, 다각형 그 리기, 다각형 은면제거, 다각형 채우기 모드
래스터화
(Rasterization)
멀티 샘플링(optional), 점/선 및 앤티 앨리어싱, 다각형 그 리기, 다각형 은면제거, 다각형 채우기 모드
텍스쳐 매핑
(Texture Mapping)
2D
텍스쳐, Wrap repeat, edge_clamp,
압축 텍스쳐,
멀티 텍스쳐, TexSubImage, CopyTexImage, 픽셀 포맷, 필터 단편화 처리(Fragment Processing)
안개효과, 시저 및 알파 테스트, 스텐실 테스트(optional), 깊이 테스트
(optional),
블렌딩,
비트논리연산,
디더링Framebuffer Operations / Miscellaneous
화면 초기화, 픽셀읽기, 알파테스트, 플러쉬, 종료, 힌트, 정 적 상태 얻기
9.3.2 OpenGL ES 프로그램의 예
· 설치 환경
‒ Windows CE
플랫폼의PocketPC2003
을 위한OpenGL|ES
‒ Embedded Visual C++ 4.0, Embedded Visual C++ 4.0 Service Pack 4, Pocket PC 2003 SDK
을 설치‒ http://sourceforge.net/projects/ogl-es
에서Vincent Mobile 3D Rendering Library
를 다운로드· 삼각형 예제 프로그램
‒
삼각형의 각 꼭지점에 다른 색상§
삼각형 내부는 블렌딩‒
‘q’
키는 프로그램 종료· 설치 환경
‒ Windows CE
플랫폼의PocketPC2003
을 위한OpenGL|ES
‒ Embedded Visual C++ 4.0, Embedded Visual C++ 4.0 Service Pack 4, Pocket PC 2003 SDK
을 설치‒ http://sourceforge.net/projects/ogl-es
에서Vincent Mobile 3D Rendering Library
를 다운로드· 삼각형 예제 프로그램
‒
삼각형의 각 꼭지점에 다른 색상§
삼각형 내부는 블렌딩‒
‘q’
키는 프로그램 종료9.3.2 OpenGL ES 프로그램의 예
#pragma comment(lib, "libGLES_CM.lib") // OpenGL ES메인 라이브러리에 링크
#pragma comment(lib, "ug.lib") // Vincent 라이브러리에 링크
#include "ug.h" // GLES/gl.h와GLES/egl.h 헤더파일 GLfloat triangle[] = { // 삼각형 꼭지점의 좌표 정의
0.25f, 0.25f, 0.0f, 0.75f, 0.25f, 0.0f, 0.5f, 0.75f, 0.0f };
GLfloat colors[] = { // 삼각형 꼭지점의 색상 정의
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f };
void init() // 초기화에 필요한 과정
{
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, triangle);
glColorPointer(4, GL_FLOAT, 0, colors);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glShadeModel(GL_SMOOTH);
}
#pragma comment(lib, "libGLES_CM.lib") // OpenGL ES메인 라이브러리에 링크
#pragma comment(lib, "ug.lib") // Vincent 라이브러리에 링크
#include "ug.h" // GLES/gl.h와GLES/egl.h 헤더파일 GLfloat triangle[] = { // 삼각형 꼭지점의 좌표 정의
0.25f, 0.25f, 0.0f, 0.75f, 0.25f, 0.0f, 0.5f, 0.75f, 0.0f };
GLfloat colors[] = { // 삼각형 꼭지점의 색상 정의
1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f };
void init() // 초기화에 필요한 과정
{
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, triangle);
glColorPointer(4, GL_FLOAT, 0, colors);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glShadeModel(GL_SMOOTH);
}
9.3.2 OpenGL ES 프로그램의 예
void display(UGWindow uwin) // 디스플레이 함수를 정의
{
glClear (GL_COLOR_BUFFER_BIT); // 화면을 지우고
glDrawArrays(GL_TRIANGLES, 0, 3); // 삼각형을 버퍼에 그린 후
glFlush (); // 화면에 출력한다.
ugSwapBuffers(uwin); // 그리고 버퍼를 교체한다.
}
void keyboard(UGWindow uwin, int key, int x, int y) // 키보드 처리 함수를 정의 {
switch(key) {
case 'q' : exit(0); break; // ‘q'가 입력되면 전체 프로그램 종료 }
}
int main() {
UGCtx ug = ugInit();
UGWindow uwin = ugCreateWindow(ug, "", "Triangle", 250, 250, 100, 100); // 생성
init(); // 초기화 수행
ugDisplayFunc(uwin, display); // 디스플레이 함수를 지정 ugKeyboardFunc(uwin, keyboard); // 키보드처리 함수를 지정
ugMainLoop(ug); // 메인루프 함수를 실행
return 0;
}
void display(UGWindow uwin) // 디스플레이 함수를 정의
{
glClear (GL_COLOR_BUFFER_BIT); // 화면을 지우고
glDrawArrays(GL_TRIANGLES, 0, 3); // 삼각형을 버퍼에 그린 후
glFlush (); // 화면에 출력한다.
ugSwapBuffers(uwin); // 그리고 버퍼를 교체한다.
}
void keyboard(UGWindow uwin, int key, int x, int y) // 키보드 처리 함수를 정의 {
switch(key) {
case 'q' : exit(0); break; // ‘q'가 입력되면 전체 프로그램 종료 }
}
int main() {
UGCtx ug = ugInit();
UGWindow uwin = ugCreateWindow(ug, "", "Triangle", 250, 250, 100, 100); // 생성
init(); // 초기화 수행
ugDisplayFunc(uwin, display); // 디스플레이 함수를 지정 ugKeyboardFunc(uwin, keyboard); // 키보드처리 함수를 지정
ugMainLoop(ug); // 메인루프 함수를 실행
return 0;
}
9.4 모바일 3D 게임의 구현
9.4 모바일 3D 게임의 구현
· 게임엔진의 개념
‒
“게임 소프트웨어들이 공유하는 모듈로 구성된 라이브러리”또는 “게임 구현을 지원하는 툴의 집합”
‒
서브엔진으로는 렌더링 및 애니메이션 엔진,
사운드 엔진,
물리엔진,
인공지능 엔진‒
게임 개발 도구로는 지도/
지형,
캐릭터,
애니메이션 편집기 등‒ Scene Graph API
로는JSR-184
이용‒ low-level API
는OpenGL ES
이용[
참고]
데스크 탑용 게임 엔진: Quake, Unreal
· 게임엔진의 개념
‒
“게임 소프트웨어들이 공유하는 모듈로 구성된 라이브러리”또는 “게임 구현을 지원하는 툴의 집합”