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

Similar documents
<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - IP11.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

슬라이드 1

Microsoft PowerPoint - C++ 5 .pptx

API 매뉴얼

Lab 3. 실습문제 (Single linked list)_해답.hwp

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

Microsoft PowerPoint - 09-CE-7-선과 도형

텀블러514

설계란 무엇인가?

Microsoft PowerPoint - 04windows.ppt

PowerPoint Presentation

adfasdfasfdasfasfadf

Microsoft PowerPoint - Chap12-OOP.ppt

K&R2 Reference Manual 번역본

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

Chapter #01 Subject

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

untitled

GDI 와 DC GDI (Graphics Device Iterface) 응용프로그램이하드웨어를제어할수있도록윈도우 OS 가제공하는모든기능 윈도우가출력장치에대한정보를스스로판단하고분석하여, 실제로사용할드라이버를불러옴 이를이용할경우, 하드웨어독립적인프로그래밍을할수있음 Widw

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

untitled

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

Microsoft PowerPoint - chap11-포인터의활용.pptx

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

PowerPoint Presentation

Chapter_02-3_NativeApp

The C++ Programming Language 5 장포인터, 배열, 구조체 5.9 연습문제 다음의선언문을순서대로작성해보자. 문자에대한포인터, 10개정수의배열, 10개정수의배열의참조자, 문자열의배열에대한포인터, 문자에대한포인터에대한포인터, 상수정수, 상수

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - Java7.pptx

유니티 변수-함수.key

설계란 무엇인가?

슬라이드 1

BMP 파일 처리

제11장 프로세스와 쓰레드

untitled

History Created adstarsdk Reference Manual cadvanced Digital Chips Inc. All right reserved. No part of this document may be reproduced in a

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

윤성우의 열혈 TCP/IP 소켓 프로그래밍

PowerPoint 프레젠테이션

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint 세션.ppt

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - chap06-2pointer.ppt

UI TASK & KEY EVENT

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

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

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

슬라이드 1

<4D F736F F F696E74202D20C1A63233C0E520B1D7B7A1C7C820C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

DCL Debugging Support

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint Presentation

JAVA PROGRAMMING 실습 08.다형성

Microsoft PowerPoint - Lect04.pptx

1장. 유닉스 시스템 프로그래밍 개요

Microsoft PowerPoint - Week04_DirectX9 프로그래밍의 기초2.pptx

PowerPoint 프레젠테이션

슬라이드 1

윈도우즈 프로그래밍

API 매뉴얼

C 프로그래밊 개요

03장.스택.key

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

C++-¿Ïº®Çؼ³10Àå

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

5장.key

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap10-함수의활용.pptx

chap 5: Trees

슬라이드 1

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

초보자를 위한 C# 21일 완성

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

쉽게 풀어쓴 C 프로그래밍

Microsoft Word - FunctionCall

PowerPoint Template

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - GameProgramming23-PixelShader.ppt

Microsoft PowerPoint - chap03-변수와데이터형.pptx

자바 프로그래밍

Transcription:

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다. 12.1 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont( in LPDIRECT3DDEVICE9 pdevice, in INT Height, in UINT Width, in UINT Weight, in UINT MipLevels, in BOOL Italic, in DWORD CharSet, in DWORD OutputPrecision, in DWORD Quality, in DWORD PitchAndFamily, in LPCTSTR pfacename, out LPD3DXFONT *ppfont ); [ 표 12-1] Font 생성함수 Height와 Width는글자의가로세로길이이며 Weight는글자의굵기를결정하는매개변수이 다. Weight에설정하는값은 WinGDI.h 헤더에있으며그기본값은 FW_NORMAL이다. #define FW_THIN 100 #define FW_EXTRALIGHT 200 #define FW_LIGHT 300 #define FW_NORMAL 400 #define FW_MEDIUM 500 #define FW_SEMIBOLD 600 #define FW_BOLD 700 #define FW_EXTRABOLD 800 #define FW_HEAVY 900 #define FW_ULTRALIGHT #define FW_REGULAR #define FW_DEMIBOLD #define FW_ULTRABOLD #define FW_BLACK FW_EXTRALIGHT FW_NORMAL FW_SEMIBOLD FW_EXTRABOLD FW_HEAVY [ 표 12-2] WinGDI.h 헤더 - 1 -

MipLevels에는기본값인 1을설정하며 Italic에는이텔릭체를사용할것인지의여부를설정하며여기에는일반적으로 FALSE를설정한다. 그외에는기본값을설정하면되며 CharSet에는 DEFAULT_CHARSET을설정하며 OutputPrecision에는 OUT_DEFAULT_PRECIS으로설정한다. 그리고 Quality에는 DEFAULT_QUALITY를 PitchAndFamily에는 DEFAULT_PITCH FF_DONTCARE를설정한다. pfacename에는글자체를설정하는데 "Arial" 또는 System 등을설정한다. 여기까지설명한폰트의설정값을셋팅하여 D3DXCreateFont() 함수를호출하면다음과같다. LPD3DXFONT Font;... 생략... D3DXCreateFont( m_pd3ddevice, 20, 0, FW_NORMAL, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH FF_DONTCARE, "Arial", &Font ); [ 표 12-3] 12.2 출력 글자를출력해주는 LPD3DXFONT 객체의멤버함수에는 DrawText() 가있으며그원형은다음과 같다. INT DrawText( [in] LPD3DXSPRITE psprite, [in] LPCTSTR pstring, [in] INT Count, [in] LPRECT prect, [in] DWORD Format, [in] D3DCOLOR Color ); [ 표 12-4] 출력함수 psprite에는 NULL을설정하고 pstring에는출력하려는문자열을설정한다. Count에는 1을설정하며널문자까지를출력하게된다. prect에는출력하려는위치를설정하는데 left와 top 값을설정하면되며나머지는 0으로설정한다. Format에는문자의정렬에관련된값을설정하는데 DT_NOCLIP을설정한다. Color에는출력할색상값을설정하며색상값은 D3DXCOLOR() 를이용하여설정한다. 색상값의범위는 0.0 ~ 1.0f 까지면그원형은다음과같다. D3DXCOLOR( FLOAT r, FLOAT g, FLOAT b, FLOAT a ); - 2 -

출력함수를설정하면다음과같다. RECT rt; SetRect( &rt, 100, 430, 0, 0 ); Font->DrawText( NULL, "Test", -1, &rt, DT_NOCLIP, D3DXCOLOR( 1.0f, 1.0f, 0.0f, 1.0f ) ); 12.3 FPS 출력 FPS(Frame Per Second) 는 1초에화면전환이몇번일어났는가를측정한값을말한다. 그래서 FPS로게임엔진의렌더링성능을평가하는경향이있으며게임엔진의개발초기에는항상 FPS를출력하면서프로그래밍을한다. 컴퓨터에서는초단위가아닌밀리세컨드단위로시간값을가져오므로 1초는 1000 밀리세컨드가되며경과된시간이 1초인지를알수있는방법은현재시각과이전시각의차를이용하거나매프레임마다경과된시간을누적하여판단하는방법등이있다. 아래의소스는매프레임마다경과된시간을누적하여판단하는소스이다. void CGameEdu01::OnInit() int i; RECT rect; D3DVIEWPORT9 vp; GetClientRect( m_hwnd, &rect ); vp.x = 0; vp.y = 0; vp.width = rect.right - rect.left; vp.height = rect.bottom - rect.top; vp.minz = 0.0f; vp.maxz = 1.0f; m_eye.x = 0.0f; m_eye.y = 10.0f; m_eye.z =-32.0f; m_at.x = 0.0f; m_at.y = 0.0f; m_at.z = 0.0f; m_up.x = 0.0f; m_up.y = 1.0f; - 3 -

m_up.z = 0.0f; D3DXMatrixLookAtLH( &m_matview, &m_eye, &m_at, &m_up ); m_pd3ddevice->settransform( D3DTS_VIEW, &m_matview ); D3DXMatrixPerspectiveFovLH( &m_matproj, D3DX_PI / 4, 1.0f, 1.0f, 100.0f ); m_pd3ddevice->settransform( D3DTS_PROJECTION, &m_matproj ); m_pd3ddevice->setviewport( &vp ); D3DXCreateFont( m_pd3ddevice, 20, 0, FW_NORMAL, 1, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH FF_DONTCARE, "System", &m_pfont ); void CGameEdu01::OnRender() char string[100]; RECT rt = 10, 10, 0, 0 ; sprintf( string, "FPS: %d", m_nfps ); m_pfont->drawtext( NULL, string, -1, &rt, DT_NOCLIP, D3DXCOLOR( 1.0f, 1.0f, 0.0f, 1.0f ) ); m_nfpscount++; void CGameEdu01::OnUpdate() DWORD dwcurtime = GetTickCount(); static DWORD dwoldtime = GetTickCount(); static DWORD dwaccumulatetime = 0; // 누적경과시간 m_dwelapsedtime = dwcurtime dwoldtime; // 프레임경과시간 dwoldtime = dwcurtime; dwaccumulatetime += m_dwelapsedtime; // 누적 if( dwaccumulatetime >= 1000 ) // 1초경과체크 dwaccumulatetime = 0; m_nfps = m_nfpscount; m_nfpscount = 0; void CGameEdu01::OnRelease() - 4 -

m_pfont->release(); - 5 -