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

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

D3D中的字體繪制(2)

9.3 D3DXCreateText

最后的函數(shù)是被用來創(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 — 我們將要用來產(chǎn)生mesh的包含描述字體的設(shè)備環(huán)境句柄。

pText — 指向以null結(jié)束的字符串的指針,此字符串是用來指定創(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。


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

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   博問   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(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>
            国产一本一道久久香蕉| 午夜视频一区在线观看| 欧美亚洲日本国产| 亚洲色图综合久久| 免费成人黄色| 噜噜噜躁狠狠躁狠狠精品视频| 欧美手机在线| 日韩亚洲一区二区| 日韩视频中文字幕| 免费欧美日韩| 欧美二区在线| 亚洲国产二区| 久久手机免费观看| 免费看成人av| 亚洲福利视频三区| 久久免费视频在线| 男人的天堂亚洲| 在线播放日韩| 老司机免费视频一区二区三区 | 黄色在线一区| 亚洲欧美日韩精品| 亚洲欧美中文日韩在线| 国产精品高精视频免费| 一区二区精品在线观看| 亚洲综合第一| 国产麻豆一精品一av一免费| 亚洲一区二区精品| 久久精品亚洲一区二区三区浴池| 国产精品久久久久久模特| 亚洲一区二区视频在线| 欧美在线日韩| 激情一区二区| 欧美成人69av| 亚洲精品影视在线观看| 亚洲一区二区三区在线播放| 国产精品扒开腿爽爽爽视频| 亚洲视频一二三| 久久精品国产999大香线蕉| 国产亚洲成av人片在线观看桃| 香蕉免费一区二区三区在线观看 | 亚洲性视频网站| 欧美影院午夜播放| 激情伊人五月天久久综合| 免费成人美女女| 99国产精品久久久久久久久久| 亚洲欧美激情在线视频| 好看不卡的中文字幕| 美女免费视频一区| 日韩视频在线免费观看| 欧美一区二区三区在| 一区二区视频欧美| 欧美日韩成人在线| 亚洲欧美另类中文字幕| 牛牛国产精品| 亚洲一区日韩在线| 国模私拍视频一区| 欧美日韩国产麻豆| 欧美伊人久久大香线蕉综合69| 欧美国产免费| 欧美一级二级三级蜜桃| 亚洲国产老妈| 国产欧美精品在线观看| 欧美成人综合在线| 午夜免费在线观看精品视频| 亚洲高清av| 欧美一区1区三区3区公司| 亚洲精品1区2区| 国产欧美在线播放| 欧美激情在线观看| 久久九九久精品国产免费直播| 99re6这里只有精品| 免费观看成人| 久久国产99| 亚洲自拍啪啪| 999在线观看精品免费不卡网站| 国产精品午夜国产小视频| 欧美成人激情在线| 久久精品国产第一区二区三区最新章节| 亚洲欧洲在线一区| 免费在线视频一区| 欧美在线观看天堂一区二区三区| 亚洲精品一区二区三| 精品成人国产| 国产伪娘ts一区| 国产精品wwwwww| 欧美日本一道本| 免费在线成人av| 久久久国产亚洲精品| 欧美一级电影久久| 亚洲网站在线观看| 日韩午夜在线播放| 亚洲久色影视| 亚洲看片网站| 亚洲欧洲精品一区二区三区 | 日韩一级黄色大片| 亚洲第一伊人| 欧美激情一区二区三区高清视频| 久久人人爽爽爽人久久久| 性久久久久久久| 午夜欧美精品| 欧美一区二区在线观看| 亚洲欧美日韩国产成人精品影院| 亚洲五月婷婷| 亚洲永久在线| 亚洲一区网站| 午夜欧美电影在线观看| 午夜精品福利在线| 欧美一区三区三区高中清蜜桃| 亚洲免费影院| 欧美主播一区二区三区美女 久久精品人 | 国产精品大片wwwwww| 欧美视频在线观看视频极品| 欧美日产国产成人免费图片| 欧美日韩18| 欧美亚韩一区| 国产美女一区二区| 国产一区日韩欧美| 亚洲第一福利社区| 亚洲老板91色精品久久| 亚洲无玛一区| 欧美在线你懂的| 久久久午夜视频| 欧美激情1区| 亚洲美女色禁图| 亚洲欧美国产高清| 久久久999精品免费| 欧美mv日韩mv国产网站app| 欧美日韩ab| 国产精品久久久久久一区二区三区 | 国产一区二区三区视频在线观看| 国产一区二区久久| 91久久国产精品91久久性色| 国产精品99久久99久久久二8| 欧美一二三区精品| 欧美v日韩v国产v| 国产精品高潮呻吟久久| 国产日韩精品久久| 亚洲人成毛片在线播放| 亚洲一二三区在线| 久久永久免费| 日韩视频免费| 久久精品中文字幕一区二区三区| 欧美精品久久久久久久| 国产精品主播| 亚洲精品午夜| 久久精品一区二区| 亚洲精品在线三区| 久久精品国产99国产精品| 欧美精品电影| 很黄很黄激情成人| 亚洲一区中文| 欧美国产成人精品| 亚洲男人第一av网站| 欧美精品97| 在线日本成人| 欧美在线999| 日韩亚洲精品电影| 美女尤物久久精品| 国产欧美在线观看一区| 一区二区三区四区国产| 乱码第一页成人| 亚洲一区图片| 欧美精品在线观看91| 狠狠色丁香婷综合久久| 午夜久久久久久久久久一区二区| 免费人成网站在线观看欧美高清| 亚洲一区在线看| 欧美日韩hd| 亚洲美女精品一区| 免费高清在线视频一区·| 亚洲欧美另类在线| 国产精品videosex极品| 亚洲精品黄色| 欧美大片免费久久精品三p| 欧美中文字幕视频| 国产精品夜夜夜| 亚洲手机成人高清视频| 亚洲国产女人aaa毛片在线| 久久嫩草精品久久久精品| 国产日韩亚洲欧美| 免费一区视频| 亚洲国产欧美日韩精品| 久久亚洲精品一区二区| 欧美淫片网站| 国产一区二区三区在线观看免费| 午夜性色一区二区三区免费视频| 亚洲美女淫视频| 欧美日韩在线播| 亚洲无人区一区| 亚洲午夜精品17c| 国产精品日本欧美一区二区三区| 亚洲社区在线观看| 一区二区三区精密机械公司| 欧美性片在线观看| 亚洲一区二区三区高清不卡| 在线一区二区视频| 国产乱码精品一区二区三区五月婷 | 在线日韩中文字幕| 欧美不卡高清| 欧美成人精品不卡视频在线观看 |