18
Game Programming II Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2 글꼴 September 26, 2006 Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2 3D Text

글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Game Programming II

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

글꼴

September 26, 2006

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

3D Text

Page 2: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

주요 내용

ID3DXFont 인터페이스를이용해 텍스트를텍스트를렌더링렌더링 하는하는 방법방법

CD3DFont클래스를이용해텍스트를렌더링하는방법

초당초당 렌더링렌더링 되는되는 프레임프레임 수수 (fps)(fps)를를 계산하는계산하는방법방법D3DXCreateText함수를이용해 3D 텍스트를만들고렌더링하는방법

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

ID3DXFont 만들기

ID3DXFont인터페이스 –텍스트를그리는데사용

LOGFONT구조체 –만들고자하는글꼴의특성을지정

HRESULT D3DXCreateFontIndirect (LPDIRECT3DDEVICE9 pDevice,CONST LOGFONT *pLogFont,LPD3DFONT *ppFont

);

HRESULT D3DXCreateFontIndirect (LPDIRECT3DDEVICE9 pDevice,CONST LOGFONT *pLogFont,LPD3DFONT *ppFont

);

LOGFONT lf;ZeroMemory(&lf, sizeof(LOGFONT));lf.lfHeight = 25; // in logical unitslf.lfWidth = 12; // in logical unitslf.lfWeight = 500; // boldness, range 0(light) - 1000(bold)lf.lfItalic = false; lf.lfUnderline = false; lf.lfStrikeOut = false; lf.lfCharSet = DEFAULT_CHARSET;strcpy(lf.lfFaceName, "Times New Roman"); // font style

ID3DXFont *Font = 0;D3DXCreateFontIndirect(Device, &lf, &Font);

Page 3: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

MSDN –D3DXCreateFontIndirect( )

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

MSDN – LOGFONT

Page 4: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

텍스트 그리기

예)

INT ID3DXFont::DrawText (LPCSTR pString,INT Count,LPRECT pRect,DWORD Format,D3DCOLOR Color

);

INT ID3DXFont::DrawText (LPCSTR pString,INT Count,LPRECT pRect,DWORD Format,D3DCOLOR Color

);

Font->DrawText(“Hello World”, -1, // size of string or -1 indicates null terminating string&rect, // rectangle text is to be formatted to in windows coordsDT_TOP | DT_LEFT,// draw in the top left corner of the viewport0xff000000); // black text

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

MSDN – DrawText( )

Page 5: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

초당 렌더링 프레임 계산하기

FPS (frames rendered per second) –초당렌더링되는프레임수매초마다 FPS를계산

DWORD FrameCnt = 0;float TimeElapsed = 0;float FPS = 0;

void CalcFPS(float timeDelta){

FrameCnt++;TimeElapsed += timeDelta;

if(TimeElapsed >= 1.0f){

FPS = (float)FrameCnt / TimeElapsed;

TimeElapsed = 0.0f;FrameCnt = 0;

}}

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Sample: ID3DXFont

Page 6: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Global Variables

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Describing the Font

Page 7: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Creating the Font

error C2664: 'D3DXCreateFontIndirectA' : cannot convert parameter 2 from 'structtagLOGFONTA *' to 'const struct _D3DXFONT

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

MSDN –D3DXCreateFontIndirect( )

Page 8: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

MSDN – D3DXFONT_DESC

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Describing the Font (Changed)

Page 9: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Computing the FPS

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Drawing Text

error C2660: 'DrawTextA' : function does not take 5 parameters

Page 10: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

MSDN – DrawText( )

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Drawing Text (Changed)

Page 11: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

CD3DFont

DirectX SDK는매우유용한유틸리티코드제공DXSDK\Samples\C++\Common

CD3DFont클래스Direct3D와텍스처를입힌삼각형을이용해텍스트를렌더링

ID3DFont에비해훨씬빠른속도

복잡한글꼴과포맷팅은지원못함

간단한간단한 텍스트를텍스트를 빠른빠른 속도로속도로 그리고자그리고자 할할 때때 사용사용

다음파일들이응용프로그램에추가되어야함:d3dfont.h, d3dfont.cpp, d3dutil.h, d3dutil.cpp, dxutil.h, dxutil.cpp

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

CD3DFont 구성하기

CD3DFont인스턴스생성

strFontName –글꼴이름 (null로끝나는문자열)

dwHeight –글꼴의높이

dwFlags –선택적생성플래그 : 0 또는D3DFONT_BOLD, D3DFONT_ITALIC, D3DFONT_ZENABLE 플래그조합

예)

CD3DFont(const TCHAR *strFontName, DWORD dwHeight,DWORD dwFlags=0L);

CD3DFont(const TCHAR *strFontName, DWORD dwHeight,DWORD dwFlags=0L);

CD3DFont* Font = 0;

Font = new CD3DFont("Times New Roman", 16, 0);Font->InitDeviceObjects( Device );Font->RestoreDeviceObjects();

Page 12: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

텍스트 그리기

x, y –텍스트그리기를시작한 x, y 좌표

dwColor –텍스트컬러

strText –그리고자하는문자열의포인터

dwFlags –선택적렌더링플래그 : D3DFONT_CENTERED, D3DFONT_TWOSIDED, D3DFONT_FILTERED 플래그조합

예)

HRESULT CD3DFont::DrawText(Float x,Float y,DWORD dwColor,const TCHAR *strText,DWORD dwFlags=0L

);

HRESULT CD3DFont::DrawText(Float x,Float y,DWORD dwColor,const TCHAR *strText,DWORD dwFlags=0L

);

Font->DrawText(20, 20, 0xff000000, “Hello, World”);

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

정리

CD3DFont객체를삭제하기전에, 다음과같은정리루틴을호출해야함예) Font->InvalidateDeviceObjects();

Font->DeleteDeviceObjects();Delete Font;

Page 13: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Sample: CFont

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Creating the Font

Page 14: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Cleanup of the Font

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Drawing Text

Page 15: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Sample: D3DXCreateText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

D3DXCreateText

텍스트의 3D 메쉬생성

pDevice –메쉬와연결될장치

hDC –메쉬생성하는데이용될글꼴정보를포함하는장치컨텍스트의핸들

pText –메쉬로만들텍스트를포함하는 null로끝나는문자열

HRESULT D3DXCreateText(LPDIRECT3DDEVICE9 pDevice,HDC hDC,LPCTSTR pText,FLOAT Deviation,FLOAT Extrusion,LPD3DXMESH* ppMesh,LPD3DXBUFFER* ppAdjacency,LPGLYPHMETRICSFLOAT pGlyphMetrics

);

HRESULT D3DXCreateText(LPDIRECT3DDEVICE9 pDevice,HDC hDC,LPCTSTR pText,FLOAT Deviation,FLOAT Extrusion,LPD3DXMESH* ppMesh,LPD3DXBUFFER* ppAdjacency,LPGLYPHMETRICSFLOAT pGlyphMetrics

);

Page 16: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Create the 3D Text (1)

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Create the 3D Text (2)

Page 17: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Cleanup of the 3D Text

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

Rendering the 3D Text

Page 18: 글꼴graphics.hallym.ac.kr/teach/2006/gp2/src/06font.pdf · 2008-09-11 · INT ID3DXFont::DrawText (LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color); INT ID3DXFont::DrawText

Sun-Jeong Kim http://www.hallym.ac.kr/~sunkim/teach/2006/gp2

연습 문제

지난주만든장면에 FPS가출력되도록하시오.