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

天行健 君子當(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 閱讀(1749) 評(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高清| 尤妮丝一区二区裸体视频| 亚洲影音一区| 亚洲高清在线观看| 午夜影院日韩| 亚洲国产成人91精品| 久久亚洲一区| 国产一区在线观看视频| 中文精品视频| 亚洲人www| 久久久久久欧美| 国产欧美一区二区三区视频 | 欧美韩国日本综合| 国产亚洲va综合人人澡精品| 在线综合亚洲| 亚洲伦理在线免费看| 欧美不卡视频一区发布| 国内精品视频久久| 亚洲国产成人av好男人在线观看| 欧美日韩成人在线播放| 日韩午夜精品视频| 亚洲福利视频三区| 国产精品久线观看视频| 亚洲伊人色欲综合网| 性欧美xxxx视频在线观看| 亚洲人成在线观看网站高清| 欧美风情在线| 欧美成人精品1314www| 亚洲欧美激情一区二区| 亚洲夜间福利| 国产精品一区二区欧美| 欧美在线视频观看免费网站| 亚洲欧美日韩高清| 国产欧美精品一区二区三区介绍| 蜜桃av一区二区三区| 久久最新视频| 亚洲另类在线一区| 欧美一级视频精品观看| 韩国欧美国产1区| 男女视频一区二区| 欧美国产先锋| 麻豆久久久9性大片| 欧美成人一二三| 久久久久久久久久久一区 | 亚洲最黄网站| 国产精品美女久久久浪潮软件| 亚洲第一黄网| 伊人夜夜躁av伊人久久| 亚洲欧美日韩天堂一区二区| 亚洲网站视频| 亚洲图片激情小说| 99热精品在线| 欧美成人精品一区二区三区| 久久精品视频导航| 欧美激情bt| 欧美激情aaaa| 国产精品高潮呻吟| 久久久久国产精品麻豆ai换脸| 国产精品v欧美精品v日韩精品| 久久久久久综合| 欧美精品久久一区二区| 欧美在线视频不卡| 国产欧美日韩免费| 午夜免费在线观看精品视频| 欧美一级久久久久久久大片| 国产精品美腿一区在线看| 在线午夜精品| 亚洲精品中文字幕女同| 欧美电影免费观看高清完整版| 欧美r片在线| 亚洲精品国产精品乱码不99按摩| 亚洲曰本av电影| 亚洲精品在线免费观看视频| 欧美激情精品久久久久| 亚洲欧洲精品一区二区三区| 伊人久久综合97精品| 久久久久天天天天| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲毛片播放| 亚洲欧美日韩在线不卡| 国产精品自在欧美一区| 欧美一区二区视频97| 欧美1区免费| 日韩视频免费大全中文字幕| 欧美日韩中文精品| 欧美国产日韩视频| 亚洲国产欧美日韩| 欧美综合77777色婷婷| 亚洲永久免费观看| 国产精品高清免费在线观看| 亚洲欧美日韩国产中文| 噜噜爱69成人精品| 亚洲美女av电影| 国产精品免费小视频| 久久理论片午夜琪琪电影网| 亚洲日本理论电影| 欧美一区激情视频在线观看| 欧美图区在线视频| 欧美在线日韩在线| 亚洲国产欧美精品| 一本大道av伊人久久综合| 欧美成人在线影院| 中文欧美日韩| 女人色偷偷aa久久天堂| 亚洲淫片在线视频| 亚洲激情二区| 国产亚洲精品v| 久久精品亚洲热| 美日韩精品视频| 亚洲宅男天堂在线观看无病毒| 激情亚洲网站| 欧美福利一区二区三区| 欧美专区日韩视频| 日韩午夜激情| 欧美一级网站| 一本色道久久综合狠狠躁篇怎么玩| 国产欧美日韩91| 欧美精品在线观看91| 一本久久综合亚洲鲁鲁| 亚洲欧美色一区| 国产手机视频一区二区| 欧美另类视频| 每日更新成人在线视频| 亚洲精品免费一区二区三区| 免费h精品视频在线播放| 午夜日韩在线| 亚洲自拍偷拍视频| 一区二区欧美亚洲| 亚洲精品1区| 有坂深雪在线一区| 激情综合视频| 国语精品中文字幕| 国产在线观看一区| 国产欧美va欧美va香蕉在| 国产精品久久久久久久久久久久久久 | 国产日韩欧美精品在线| 欧美午夜不卡视频| 欧美啪啪成人vr| 欧美精品在线观看一区二区| 欧美成人免费在线视频| 鲁鲁狠狠狠7777一区二区| 久久综合九色综合欧美狠狠| 久久九九精品99国产精品| 欧美一级免费视频| 久久精品国产99国产精品| 亚洲精品久久久久中文字幕欢迎你| 欧美成人黄色小视频| 免费国产一区二区| 欧美 日韩 国产一区二区在线视频 | 亚洲欧洲在线视频| 亚洲欧洲日本专区| 亚洲精品一级| 亚洲午夜小视频| 亚洲在线成人| 欧美在线观看视频| 蜜桃精品久久久久久久免费影院| 免费欧美在线| 久久福利电影| 久久躁狠狠躁夜夜爽| 免费成人av在线| 欧美日韩www| 国产麻豆日韩| 亚洲电影免费观看高清| 国产欧美精品在线播放| 国产一区二区精品| 伊人一区二区三区久久精品| 亚洲精品网址在线观看| 亚洲一区二区三区影院| 久久九九热re6这里有精品| 美女爽到呻吟久久久久| 亚洲国产小视频| 亚洲图色在线| 久久免费视频在线观看| 欧美日韩免费一区二区三区视频 | 亚洲午夜精品久久久久久浪潮| 新片速递亚洲合集欧美合集| 久久夜色精品亚洲噜噜国产mv| 欧美激情精品| 国产一区二区三区奇米久涩| 亚洲激情小视频| 午夜精品成人在线视频| 你懂的成人av| 亚洲欧美日韩精品久久久久| 蜜桃av久久久亚洲精品| 国产精品免费区二区三区观看| 亚洲国产小视频在线观看| 欧美一级成年大片在线观看| 最新亚洲激情| 久久精品欧洲| 国产精品一区亚洲| 日韩亚洲精品在线| 久久嫩草精品久久久精品| 夜夜嗨av一区二区三区网页| 久久久久青草大香线综合精品| 国产精品区一区二区三| 国产精品久久久久免费a∨ | 欧美日韩色一区| 亚洲激情国产|