青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

D3D中的字體繪制(2)

9.3 D3DXCreateText

最后的函數(shù)是被用來(lái)創(chuàng)建一個(gè)3D 文字網(wǎng)格,圖9.1顯示了實(shí)例“D3DXCreateText”所繪制的3D文本網(wǎng)格。

 

該函數(shù)的原型是:

HRESULT D3DXCreateText(

       LPDIRECT3DDEVICE9 pDevice,

       HDC hDC,

       LPCTSTR pText,

       FLOAT Deviation,

       FLOAT Extrusion,

       LPD3DXMESH* ppMesh,

       LPD3DXBUFFER* ppAdjacency,

       LPGLYPHMETRICSFLOAT pGlyphMetrics

);

這個(gè)函數(shù)如果調(diào)用成功則返回D3D_OK。

pDevice — 和mesh關(guān)聯(lián)的device。

hDC — 我們將要用來(lái)產(chǎn)生mesh的包含描述字體的設(shè)備環(huán)境句柄。

pText — 指向以null結(jié)束的字符串的指針,此字符串是用來(lái)指定創(chuàng)建什么文字mesh。

Deviation — 字型輪廓段數(shù)間距,該值必須大于等于0。當(dāng)它為0時(shí),段數(shù)等于字體原始設(shè)計(jì)單位(該值越接近0,那么字體就越光滑)。

Extrusion — 文字在z軸方向的深度。

ppMesh — 返回創(chuàng)建的mesh。

ppAdjacency — 返回創(chuàng)建mesh的相關(guān)信息。假如你不需要它可以將其指定為null。

pGlyphMetrics — 一個(gè)指向LPGLYPHMETRICSFLOAT結(jié)構(gòu)數(shù)組的指針,它包含了字型米數(shù)據(jù)。假如你不關(guān)心此數(shù)據(jù),你可以把它設(shè)置為0。


來(lái)看一個(gè)示例,首先來(lái)看看其中用到的API函數(shù)使用說(shuō)明:

The CreateCompatibleDC function creates a memory device context (DC) compatible with the specified device.

HDC CreateCompatibleDC(
HDC
hdc // handle to DC
);

Parameters

hdc
[in] Handle to an existing DC. If this handle is NULL, the function creates a memory DC compatible with the application's current screen.

Return Values

If the function succeeds, the return value is the handle to a memory DC.

If the function fails, the return value is NULL.

Windows NT/2000/XP: To get extended error information, call GetLastError.

Remarks

A memory DC exists only in memory. When the memory DC is created, its display surface is exactly one monochrome pixel wide and one monochrome pixel high. Before an application can use a memory DC for drawing operations, it must select a bitmap of the correct width and height into the DC. To select a bitmap into a DC, use the CreateCompatibleBitmap function, specifying the height, width, and color organization required.

When a memory DC is created, all attributes are set to normal default values. The memory DC can be used as a normal DC. You can set the attributes; obtain the current settings of its attributes; and select pens, brushes, and regions.

The CreateCompatibleDC function can only be used with devices that support raster operations. An application can determine whether a device supports these operations by calling the GetDeviceCaps function.

When you no longer need the memory DC, call the DeleteDC function.

Windows 2000 and later: If hdc is NULL, the thread that calls CreateCompatibleDC owns the HDC that is created. When this thread is destroyed, the HDC is no longer valid. Thus, if you create the HDC andpass it to another thread, then exit the first thread, the second thread will not be able to use the HDC.

ICM: If the DC that is passed to this function is enabled for Independent Color Management (ICM), the DC created by the function is ICM-enabled. The source and destination color spaces are specified in the DC.

The CreateFontIndirect function creates a logical font that has the specified characteristics. The font can subsequently be selected as the current font for any device context.

HFONT CreateFontIndirect(
CONST LOGFONT*
lplf // characteristics
);

Parameters

lplf
[in] Pointer to a LOGFONT structure that defines the characteristics of the logical font.

Return Values

If the function succeeds, the return value is a handle to a logical font.

If the function fails, the return value is NULL.

Windows NT/2000/XP: To get extended error information, call GetLastError.

Remarks

The CreateFontIndirect function creates a logical font with the characteristics specified in the LOGFONT structure. When this font is selected by using the SelectObject function, GDI's font mapper attempts to match the logical font with an existing physical font. If it fails to find an exact match, it provides an alternative whose characteristics match as many of the requested characteristics as possible.

To get the appropriate font on different language versions of the OS, call EnumFontFamiliesEx with the desired font characteristics in the LOGFONT structure, retrieve the appropriate typeface name, and create the font using CreateFont or CreateFontIndirect.

When you no longer need the font, call the DeleteObject function to delete it.

The SelectObject function selects an object into the specified device context (DC). The new object replaces the previous object of the same type.

HGDIOBJ SelectObject(
HDC
hdc, // handle to DC
HGDIOBJ hgdiobj // handle to object
);

Parameters

hdc
[in] Handle to the DC.
hgdiobj
[in] Handle to the object to be selected. The specified object must have been created by using one of the following functions.
 

Return Values

If the selected object is not a region and the function succeeds, the return value is a handle to the object being replaced. If the selected object is a region and the function succeeds, the return value is one of the following values.

Value Meaning
SIMPLEREGION Region consists of a single rectangle.
COMPLEXREGION Region consists of more than one rectangle.
NULLREGION Region is empty.

If an error occurs and the selected object is not a region, the return value is NULL. Otherwise, it is HGDI_ERROR.

Remarks

This function returns the previously selected object of the specified type. An application should always replace a new object with the original, default object after it has finished drawing with the new object.

An application cannot select a bitmap into more than one DC at a time.

ICM: If the object being selected is a brush or a pen, color management is performed.


主程序:

//////////////////////////////////////////////////////////////////////////////////////////////////
// Demonstrates how to create and render 3D text using D3DXCreateText.
//////////////////////////////////////////////////////////////////////////////////////////////////

#include 
"d3dUtility.h"

#pragma warning(disable : 
4996)

const int WIDTH  = 640;
const int HEIGHT = 480;

IDirect3DDevice9
*    g_d3d_device; 
ID3DXMesh
*            g_text_mesh;

////////////////////////////////////////////////////////////////////////////////////////////////

bool Setup()
{
    
// Get a handle to a device context
    HDC hdc = CreateCompatibleDC(NULL);

    
// Describe the font we want.

    LOGFONT lf;
    ZeroMemory(
&lf, sizeof(LOGFONT));

    lf.lfHeight         
= 25;    // in logical units
    lf.lfWidth          = 12;    // in logical units
    lf.lfEscapement     = 0;        
    lf.lfOrientation    
= 0;     
    lf.lfWeight         
= 500;   // boldness, range 0(light) - 1000(bold)
    lf.lfItalic         = FALSE;   
    lf.lfUnderline      
= FALSE;    
    lf.lfStrikeOut      
= FALSE;    
    lf.lfCharSet        
= DEFAULT_CHARSET;
    lf.lfOutPrecision   
= 0;              
    lf.lfClipPrecision  
= 0;          
    lf.lfQuality        
= 0;           
    lf.lfPitchAndFamily 
= 0;   

    strcpy(lf.lfFaceName, 
"Times New Roman"); // font style

    
// Create the font and select it with the device context.
    HFONT hFont = CreateFontIndirect(&lf);
    HFONT hFontOld 
= (HFONT)SelectObject(hdc, hFont); 

    
// Create the text mesh based on the selected font in the HDC.
    D3DXCreateText(g_d3d_device, hdc, "Direct3D"0.001f0.4f&g_text_mesh, NULL, NULL);    
    
    
// Restore the old font and free the acquired HDC.    
    SelectObject(hdc, hFontOld);
    DeleteObject(hFont);
    DeleteDC(hdc);

    
// Lights

    D3DXVECTOR3 dir(
0.0f-0.5f1.0f);
    D3DXCOLOR col 
= WHITE;
    D3DLIGHT9 light 
= InitDirectionalLight(&dir, &col);

    g_d3d_device
->SetLight(0&light);
    g_d3d_device
->LightEnable(0, TRUE);

    g_d3d_device
->SetRenderState(D3DRS_NORMALIZENORMALS, TRUE);
    g_d3d_device
->SetRenderState(D3DRS_SPECULARENABLE, TRUE);

    
// Set camera

    D3DXVECTOR3 pos(
0.0f1.5f-3.3f);
    D3DXVECTOR3 target(
0.0f0.0f0.0f);
    D3DXVECTOR3 up(
0.0f1.0f0.0f);

    D3DXMATRIX V;
    D3DXMatrixLookAtLH(
&V, &pos, &target, &up);
    g_d3d_device
->SetTransform(D3DTS_VIEW, &V);
    
    
// Set projection matrix.    
    D3DXMATRIX proj;
    D3DXMatrixPerspectiveFovLH(
&proj, D3DX_PI * 0.25f, (float)WIDTH / HEIGHT, 0.01f1000.0f);
    g_d3d_device
->SetTransform(D3DTS_PROJECTION, &proj);

    
return true;
}

void Cleanup()
{
    Release
<ID3DXMesh*>(g_text_mesh);
}

bool Display(float timeDelta)
{
    
// Update: Spin the 3D text.

    D3DXMATRIX y_rot_matrix, tran_matrix;

    
static float y = 0.0f;
    D3DXMatrixRotationY(
&y_rot_matrix, y);
    y 
+= timeDelta;

    
if(y >= 6.28f)
        y 
= 0.0f;

    D3DXMatrixTranslation(
&tran_matrix, -1.6f0.0f0.0f);
    tran_matrix 
*= y_rot_matrix;

    g_d3d_device
->SetTransform(D3DTS_WORLD, &tran_matrix);
    
    
// Render

    g_d3d_device
->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x000000001.0f0);

    g_d3d_device
->BeginScene();
    g_d3d_device
->SetMaterial(&WHITE_MTRL);
    g_text_mesh
->DrawSubset(0);
    g_d3d_device
->EndScene();

    g_d3d_device
->Present(NULL, NULL, NULL, NULL);

    
return true;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    
switch( msg )
    {
    
case WM_DESTROY:
        PostQuitMessage(
0);
        
break;
        
    
case WM_KEYDOWN:
        
if( wParam == VK_ESCAPE )
            DestroyWindow(hwnd);
        
break;
    }

    
return DefWindowProc(hwnd, msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE prevInstance, PSTR cmdLine, int showCmd)
{
    
if(!InitD3D(hinstance, WIDTH, HEIGHT, true, D3DDEVTYPE_HAL, &g_d3d_device))
    {
        MessageBox(
0"InitD3D() - FAILED"00);
        
return 0;
    }
        
    
if(!Setup())
    {
        MessageBox(
0"Setup() - FAILED"00);
        
return 0;
    }

    EnterMsgLoop( Display );
    Cleanup();

    g_d3d_device
->Release();

    
return 0;
}


下載源程序

posted on 2008-03-26 18:50 lovedday 閱讀(1756) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(lèi)(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久视频一区| 久久国产精品久久国产精品| 日韩香蕉视频| 欧美区在线观看| 亚洲一级在线| 久久这里只有| 9久re热视频在线精品| 国产精品99免费看 | 米奇777超碰欧美日韩亚洲| 黄色成人在线网站| 欧美成年人视频网站| 一本久久综合亚洲鲁鲁| 久久成人免费网| 91久久夜色精品国产网站| 欧美精品一区二区高清在线观看| 日韩五码在线| 久久久久久久999| 99精品视频免费观看| 国产精品毛片大码女人| 老牛影视一区二区三区| 一区二区欧美精品| 蜜桃av噜噜一区| 亚洲综合首页| 亚洲国产精品成人综合色在线婷婷| 欧美日韩一区二区视频在线| 久久久久国产一区二区| 99av国产精品欲麻豆| 玖玖玖免费嫩草在线影院一区| av72成人在线| 一区二区三区在线高清| 国产精品久久久久一区| 免费亚洲视频| 久久99在线观看| 99精品国产热久久91蜜凸| 久久久欧美精品| 韩日精品在线| 欧美日韩三级在线| 欧美一区影院| 亚洲青涩在线| 久久久999精品视频| 亚洲精品网站在线播放gif| 欧美大成色www永久网站婷| 亚洲欧洲一区二区三区久久| 久久久久久网址| 中文一区二区在线观看| 狠狠色噜噜狠狠色综合久| 欧美日韩国产一中文字不卡| 久久高清福利视频| 亚洲黄色毛片| 久久午夜视频| 亚洲欧美日韩另类| 亚洲伦理久久| 亚洲第一精品福利| 国产精品伦理| 欧美日韩成人一区| 久久午夜影视| 夜夜躁日日躁狠狠久久88av| 欧美一区二区三区四区在线观看地址| 日韩视频一区二区| 国产欧美日韩免费看aⅴ视频| 欧美精品二区三区四区免费看视频| 中文久久乱码一区二区| 亚洲国产精品久久久久婷婷老年| 亚洲一区视频在线| 日韩亚洲欧美成人一区| 影音先锋久久| 国内成人在线| 国产精品久久久久久久电影| 免费欧美日韩| 久久亚洲综合色一区二区三区| 亚洲欧美在线x视频| 一本高清dvd不卡在线观看| 亚洲国产三级在线| 美女日韩欧美| 欧美在线播放视频| 久久精品一区二区三区不卡牛牛| 亚洲欧美日韩综合| 亚洲亚洲精品三区日韩精品在线视频| 亚洲国产精品va在线看黑人 | 在线视频精品一区| 亚洲日本中文字幕区| 在线成人中文字幕| 伊人久久男人天堂| 国产亚洲精品aa午夜观看| 国产一区二区欧美日韩| 国产区精品视频| 国产毛片精品国产一区二区三区| 国产精品激情| 国产精品香蕉在线观看| 国产精品扒开腿爽爽爽视频| 欧美午夜精品久久久久免费视| 欧美日韩福利在线观看| 欧美日韩三级电影在线| 国产精品黄页免费高清在线观看| 国产精品国产馆在线真实露脸 | 欧美成人精品一区二区三区| 亚洲欧美日韩另类精品一区二区三区| 午夜免费久久久久| 欧美一区三区三区高中清蜜桃 | 香蕉av777xxx色综合一区| 亚洲欧美日韩在线不卡| 久久av红桃一区二区小说| 久久美女艺术照精彩视频福利播放| 老司机aⅴ在线精品导航| 欧美+日本+国产+在线a∨观看| 久久综合九色综合欧美狠狠| 久久久久九九九九| 欧美激情精品久久久久| 亚洲精品久久久久久久久| 一区二区三区久久| 午夜亚洲一区| 欧美一区亚洲| 欧美日韩免费观看一区三区| 欧美破处大片在线视频| 欧美日韩一区在线| 国产日产欧美一区| 在线观看成人av电影| 一区二区三区久久精品| 欧美一级黄色网| 女人天堂亚洲aⅴ在线观看| 亚洲精品国产精品国自产观看浪潮 | 亚洲一区二区视频在线观看| 亚洲一区二区在线看| 欧美成人免费全部观看天天性色| 亚洲日本黄色| 欧美制服丝袜| 欧美日韩1区2区3区| 国产一区二区三区日韩| 亚洲人永久免费| 欧美尤物一区| 亚洲激情成人网| 欧美伊久线香蕉线新在线| 久久人人九九| 国产亚洲精品自拍| 99视频国产精品免费观看| 久久精品一区二区三区不卡牛牛| 欧美日韩在线精品| 尤物精品在线| 午夜精品久久久久久久99热浪潮 | 国产一区二区三区奇米久涩| 亚洲久久一区二区| 久久国产综合精品| 亚洲人成网在线播放| 性久久久久久久| 欧美日韩一区精品| 亚洲国产另类久久久精品极度| 99精品99| 亚洲国产一区二区视频| 欧美一区二区三区播放老司机 | 欧美一区二区三区日韩| 欧美电影在线播放| 亚洲伊人观看| 欧美性大战xxxxx久久久| 最新69国产成人精品视频免费| 久久精品99国产精品日本| 99天天综合性| 欧美激情精品久久久久久黑人 | 美国成人直播| 午夜精品免费在线| 欧美成年网站| 99天天综合性| 亚洲国产成人在线播放| 久久久青草婷婷精品综合日韩| 国产欧美精品久久| 午夜精品亚洲| 亚洲一区二区黄色| 国产精品大片| 亚洲一区二区三区精品动漫| 亚洲人午夜精品| 免费成人高清| 在线日韩电影| 久久尤物视频| 久久色在线播放| 136国产福利精品导航网址应用| 久久免费高清视频| 欧美在线综合视频| 国产亚洲人成网站在线观看| 欧美制服丝袜| 欧美亚洲日本一区| 国产精品免费福利| 亚洲在线一区二区| 亚洲视频一区在线| 国产精品久久久久av| 午夜一级在线看亚洲| 亚洲亚洲精品在线观看 | 亚洲性夜色噜噜噜7777| 国产精品美女久久久久av超清| 亚洲一区视频| 新67194成人永久网站| 国产伊人精品| 欧美1区2区视频| 欧美国产日韩xxxxx| 91久久精品国产91性色tv| 亚洲国产激情| 欧美日韩中文| 欧美一区二区三区在线播放| 欧美在线视频一区二区| 激情欧美日韩一区| 亚洲国产高清高潮精品美女| 欧美精品一区在线播放|