학습목표 3 차원그래픽의기본개념에대해이해한다. OpenGL 의기본개념에대해이해한다. 간단한 OpenGL 프로그램을만들수있다.

Similar documents
헬로, 안드로이드 15 주차 OpenGL 의 3D 그래픽 (2) 강대기동서대학교컴퓨터정보공학부

gnu-lee-oop-kor-lec06-3-chap7

어댑터뷰

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

쉽게 풀어쓴 C 프로그래밍

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63236C0E520BED6C7C3B8B428B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

슬라이드 1

Microsoft PowerPoint - chap01-C언어개요.pptx

Open GL

1부

제11장 프로세스와 쓰레드

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

PowerPoint Presentation

PowerPoint 프레젠테이션

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

( )부록

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Network Programming

03장

Microsoft PowerPoint App Fundamentals[Part1].pptx

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

슬라이드 1

Microsoft PowerPoint - 02처음으로만드는(Ver 1.0)

Microsoft PowerPoint - 05geometry.ppt

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Spring Boot/JDBC JdbcTemplate/CRUD 예제

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - 13prac.pptx

슬라이드 1

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

Spring Boot

PowerPoint Presentation

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

Microsoft PowerPoint - CSharp-10-예외처리

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Microsoft PowerPoint - 권장 사양

PowerPoint 프레젠테이션

Microsoft PowerPoint App Fundamentals[Part1](1.0h).pptx

윈도우시스템프로그래밍

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

윈도우시스템프로그래밍

01-OOPConcepts(2).PDF

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

제8장 자바 GUI 프로그래밍 II

Microsoft PowerPoint - 14주차 강의자료

쉽게 풀어쓴 C 프로그래밊

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

자바GUI실전프로그래밍2_장대원.PDF

gnu-lee-oop-kor-lec10-1-chap10

4S 1차년도 평가 발표자료

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

신림프로그래머_클린코드.key

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

C# Programming Guide - Types

Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

PowerPoint Presentation

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

슬라이드 1

Microsoft PowerPoint - 2강

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

17장 클래스와 메소드

MasoJava4_Dongbin.PDF

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

SM-G906S 갤럭시 S5 광대역 LTE-A O SM-G910S 갤럭시라운드 O SM-G920S 갤럭시 S O SM-G925S 갤럭시 S6 엣지 O SM-G928S 갤럭시 S6 엣지 plus O SM-G930S

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

Microsoft PowerPoint - chap02.ppt

PowerPoint 프레젠테이션

Google Maps Android API v2

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - 13_UMLCoding(2010).pptx

유니티 변수-함수.key

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

ThisJava ..

Microsoft PowerPoint - 04기본위젯(Ver 1.0)

JAVA PROGRAMMING 실습 08.다형성

오버라이딩 (Overriding)

2장 변수와 프로시저 작성하기

Microsoft PowerPoint - 04-UDP Programming.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint Android-구조.애플리케이션 기초(1.0h).pptx

Transcription:

헬로, 안드로이드 14 주차 OpenGL 의 3D 그래픽 (1) 강대기동서대학교컴퓨터정보공학부

학습목표 3 차원그래픽의기본개념에대해이해한다. OpenGL 의기본개념에대해이해한다. 간단한 OpenGL 프로그램을만들수있다.

차례 3D 그래픽이해하기 OpenGL 소개하기 OpenGL 프로그램만들기 스레드관리하기 배경화면변경및사용자이미지로변경 요약 퀴즈 연습문제

3D 그래픽이해하기 세상은 3 차원이나, 책이나그림, 컴퓨터모니터를볼때에는 2 차원을보고있음 실내에서창밖을바라보면, 그게바로컴퓨터모니터를통해보는것과비슷함 고정된위치에서한쪽눈으로만보면, 고화질의사진으로바꾸어놓아도눈치챌수없음 창문 뷰포트 (viewport) 눈과창문사이의거리 시야 (FOV; field of view) 눈과창문의네귀퉁이를잇는선 시야절두체 (view frustum) 또는관찰절두체

3 차원장면보기

OpenGL 소개하기 1992 년실리콘그래픽스사에서개발 개발사가제조사에상관없이하드웨어를사용할수있도록, 통일된인터페이스제공 핵심아이디어는개발자가하드웨어의디테일보다는뷰포트, 조명등의개념에만집중하게해줌 존카맥 (John Carmack) Microsfot 의 Direct3D 에맞서, Doom 과 Quake 등을 OpenGL 로개발하는것을고수함 OpenGL 자체는워크스테이션용이어서임베디드시스템용으로는덩치가큼 안드로이드에서는임베디드시스템을위한 OpenGL ES 를구현 OpenGL ES 는여러회사들의컨소시엄인 Khronos Group 에서만듦 OpenGL ES 의자바언어바인딩은 Java Specification Request (JSR) 239 에서정의됨

OpenGL 프로그램만들기 프로젝트생성 OpenGL / org.example.opengl / OpenGL /OpenGL 생성된 OpenGL 액티비티가 GLView 라는 View를참조하도록수정함 res/layout/main.xml 리소스는삭제 GLView.java 의새로운클래스들 ( 교재와다름 ) GLSurfaceView SurfaceView의하위클래스로내부적으로 GL 요청을처리하기위한기능을담당함. GLSurfaceView.Renderer GLSurfaceView가가지고있는 Renderer 인터페이스로, OpenGL이호출하면프레임에그림을그림 EGLConfig Embedded Graphic Library (EGL) 의사양 (configuration) 을저장함 GL10 OpenGL(R) ES 1.0 코어의자바프로그래밍언어의바인딩을가지는인터페이스 GLU GL Utilities (GL 유틸리티함수들 ) 교재의클래스들소개 SurfaceView 3차원그래픽에사용되는특별한종류의뷰. OpenGL의모든뷰로확장가능함 Surface Canvas처럼그리기에사용되지만, 3D 하드웨어로구현된다는차이가있음. SurfaceHolder 이클래스의인스턴스는자신이갖고있는 Surface가사라지더라도계속유지됨 SurfaceHolder.Callback SurfaceView는이인터페이스를구현하는데, 뷰의 Surface가생성되거나없어지거나, 크기가변하면, OpenGL이이를알림

GLView.java package org.example.opengl; import android.content.context; import android.opengl.glsurfaceview; class GLView extends GLSurfaceView { private final GLRenderer renderer; } } GLView(Context context) { super(context); // Uncomment this to turn on error-checking and logging //setdebugflags(debug_check_gl_error DEBUG_LOG_GL_CALLS); renderer = new GLRenderer(context); setrenderer(renderer);

GLRenderer.java ( 대략적인구성 ) package org.example.opengl; import javax.microedition.khronos.egl.eglconfig; import javax.microedition.khronos.opengles.gl10; import android.content.context; import android.opengl.glsurfaceview; import android.opengl.glu; import android.util.log; class GLRenderer implements GLSurfaceView.Renderer { private final Context context; GLRenderer(Context context) { this.context = context; } public void onsurfacecreated(gl10 gl, EGLConfig config) { } public void onsurfacechanged(gl10 gl, int width, int height) { } public void ondrawframe(gl10 gl) { } }

쓰레드관리하기 안드로이드 2D 라이브러리는화면의일부를다시그려야할때, 뷰의 ondraw() 를호출하지만, OpenGL 은그리는데사용될렌더러의 ondrawframe() 을호출함 (1 초에프레임을호출하는수 Frames Per Second) GLSurfaceView 는 프레임 (frame) 에그림을그릴 Renderer 인터페이스와 Renderer 를주기적으로호출할 GLThread 클래스, EGL 설정을담당할 EGLHelper 클래스를가지고있음 GLSurfaceView 를확장한 GLView 에서 GLRenderer 설정 GLRenderer 에서 surface 가생성되면 (onsurfacecreated()) 프레임을그리기위한설정을완료하고, surface 가바뀌면 (onsurfacechanged()) 그에따른처리를하며, ( 예제에서는시야절두체설정 ) 프레임을그려달라는요청을받으면 (ondrawframe()) 프레임을그림

onsurfacecreated() 광원이되는조명의특성을설정함 물체의재료에따라다른질감을가지므로이를설정함 OpenGL 옵션설정 깊이테스트및알파블렌딩설정 알파블렌딩 두색을섞을때, 투명도를나타내는알파채널을이용하여섞는것 주로유리를통해본이미지나투명한물속의물체를나타낼때사용함 질감을위한텍스춰설정 필요하면비트맵파일을읽어들여텍스춰로입힘

onsurfacechanged() 시야절두체 (view frustum) 설정 픽셀이정사각형이아닐수있으므로, 화면가로와세로의 ratio 설정 투영법 (projection) 설정 많이쓰이는것은원근투영법 평행투영법도있음

ondrawframe() 화면을검게청소함 이미읽어들인모델을위치시킬장소설정 시간에맞추어모델을회전시킬것이므로, 각도설정 모델을그림 ( 예제에서는정육각형 ; cube) 그려진프레임의개수를계속추적하여, Frames Per Second (fps) 값계산함

OpenGL ES OpenGL ES 1.0 은통합 OpenGL 1.3, ES 1.1 은통합 OpenGL 1.5 에기초함 JSR 239 는원본 1.0 과유지릴리즈버전 1.0.1 두가지버전이있음

GLRenderer.java ( 대략적인구성 ) package org.example.opengl; import javax.microedition.khronos.egl.eglconfig; import javax.microedition.khronos.opengles.gl10; import android.content.context; import android.opengl.glsurfaceview; import android.opengl.glu; import android.util.log; class GLRenderer implements GLSurfaceView.Renderer { private final Context context; GLRenderer(Context context) { this.context = context; } public void onsurfacecreated(gl10 gl, EGLConfig config) { } public void onsurfacechanged(gl10 gl, int width, int height) { } public void ondrawframe(gl10 gl) { } }

배경화면변경및사용자이미지삽입 새로 AVD 를생성하되, SD 카드를충분히크게잡아줌 (64M 정도?) Camera 를실행하여사진찍음 Home 의 Menu 에서 Wallpaper 선택후 Pictures 선택하면찍힌사진이보임 adb 프로그램으로 SD 카드가마운트된디렉토리에서찍힌사진을복사함 C:\Android\android-sdk-windows-1.5_r3\tools>adb pull "/sdcard/dcim/camera/2009-10-07 16.12.35.jpg" camera_image.jpg 올리고싶은사진을, 복사된카메라이미지 (camera_image.jpg) 와같은크기로만든뒤, adb 로올림 (213 x 350 x 24) GIMP 소프트웨어사용, 파일명은소문자로함 에뮬레이터를재시동

요약 3 차원그래픽의기본개념을다루어보았다. OpenGL 의기본개념에대해공부해보았다. 간단한 OpenGL 프로그램을만들어보았다.

퀴즈 Canvas 와 Surface 의차이는무엇인가? 뷰포트 (viewport) 란무엇인가? 시야 (FOV; field of view) 란무엇인가? 시야절두체 (view frustum) 란무엇인가? OpenGL ES 란무엇인가? OpenGL ES 의자바언어바인딩은무엇으로정의되어있는가? GLSurfaceView 클래스에대해설명하라. GLSurfaceView 의 GLRenderer 는무슨일을하는가? 알파블렌딩이란무엇인가? 원근투영법이란무엇인가? FPS 는무엇인가?

연습문제 정육면체대신구체 (ball), 또는정사면체, 원뿔, 원기둥등을모델로설정해서프로그램을작성하라. Spinner 위젯을이용하여정육면체, 구체, 정사면체, 원기둥, 원뿔중모델을선택할수있게해보자. 이를위해서 XML 파일로이루어진메인뷰안에사용자의 Custom 뷰를저장하는방법을사용해보자. 예제프로그램은 GLSurfaceView 에서 GLRenderer 를사용하고있다. 교재에나와있는것처럼쓰레드를이용하는방법으로예제프로그램을재구성해보라.