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

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

D3D中的紋理映射(1)

紋理映射是一種允許我們?yōu)槿切钨x予圖象數(shù)據(jù)的技術(shù);這讓我們能夠更細(xì)膩更真實(shí)地表現(xiàn)我們的場(chǎng)景。例如,我們能夠創(chuàng)建一個(gè)立方體并且通過(guò)對(duì)它的每個(gè)面創(chuàng)建一個(gè)紋理來(lái)把它變成一個(gè)木箱(如圖6.1)。

在Direct3D中一個(gè)紋理是通過(guò)IDirect3DTexture9接口來(lái)表現(xiàn)的。一個(gè)紋理是一個(gè)類(lèi)似像素矩陣的表面它能夠被映射到三角形上。

 

6.1 紋理坐標(biāo)

Direct3D使用一個(gè)紋理坐標(biāo)系統(tǒng),它是由用水平方向的u軸和豎直方向v軸構(gòu)成。由u,v坐標(biāo)決定紋理上的元素,它被叫做texel。注意v軸是向下的(如圖6.2)。

 

同樣,注意規(guī)格化的坐標(biāo)間隔,[0,1],它被使用是因?yàn)樗oDirect3D一個(gè)固定的范圍用于在不同尺寸的紋理上工作。

對(duì)每一個(gè)3D三角形,我們都希望在給它貼圖的紋理上定義一個(gè)用相應(yīng)的三角形。(如圖6.3)。

 

我們?cè)僖淮涡薷脑瓉?lái)的頂點(diǎn)結(jié)構(gòu),添加一個(gè)用于在紋理上定位的紋理坐標(biāo)。

struct Vertex

{

       float _x, _y, _z;

       float _nx, _ny, _nz;

       float _u, _v; // texture coordinates

       static const DWORD FVF;

};

const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;

我們?cè)陧旤c(diǎn)格式中添加了一個(gè)D3DFVF_TEX1,它是說(shuō)我們的頂點(diǎn)結(jié)構(gòu)中包含了一個(gè)紋理坐標(biāo)。

現(xiàn)在每個(gè)三角形都通過(guò)頂點(diǎn)的三個(gè)對(duì)象來(lái)建立,同時(shí)也通過(guò)紋理坐標(biāo)定義了一個(gè)相應(yīng)的紋理三角形。

 

6.2創(chuàng)建并賦予材質(zhì)

紋理數(shù)據(jù)通常是從存儲(chǔ)在磁盤(pán)中的圖片文件中讀取的,且被讀進(jìn)IDirect3DTexture9對(duì)象中。我們能夠使用下面的D3DX函數(shù)完成這項(xiàng)工作:

Creates a texture from a file.

HRESULT D3DXCreateTextureFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
LPDIRECT3DTEXTURE9 * ppTexture
);

Parameters

pDevice
[in] Pointer to an IDirect3DDevice9 interface, representing the device to be associated with the texture.
pSrcFile
[in] Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.
ppTexture
[out] Address of a pointer to an IDirect3DTexture9 interface, representing the created texture object.

Return Values

If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following:

D3DERR_NOTAVAILABLED3DERR_OUTOFVIDEOMEMORYD3DERR_INVALIDCALLD3DXERR_INVALIDDATAE_OUTOFMEMORY

Remarks

The compiler setting also determines the function version. If Unicode is defined, the function call resolves to D3DXCreateTextureFromFileW. Otherwise, the function call resolves to D3DXCreateTextureFromFileA because ANSI strings are being used.

This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See D3DXIMAGE_FILEFORMAT.

The function is equivalent to D3DXCreateTextureFromFileEx(pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, ppTexture).

Mipmapped textures automatically have each level filled with the loaded texture.

When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, the images need to be loaded manually.

Note that a resource created with this function will be placed in the memory class denoted by D3DPOOL_MANAGED.

Filtering is automatically applied to a texture created using this method. The filtering is equivalent to D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER in D3DX_FILTER.

For the best performance when using D3DXCreateTextureFromFile:

  1. Doing image scaling and format conversion at load time can be slow. Store images in the format and resolution they will be used. If the target hardware requires power of two dimensions, create and store images using power of two dimensions.
  2. Consider using DirectDraw surface (DDS) files. Because DDS files can be used to represent any Direct3D 9 texture format, they are very easy for D3DX to read. Also, they can store mipmaps, so any mipmap-generation algorithms can be used to author the images.

這個(gè)函數(shù)能夠讀取下面圖片格式中的任意一種:BMP,DDS,DIB,JPG,PNG,TGA。

例如,用一個(gè)名為stonewall.bmp的圖片創(chuàng)建一個(gè)紋理,我們將按照下面的例子來(lái)寫(xiě):

IDirect3Dtexture9* _stonewall;

D3DXCreateTextureFromFile(_device, "stonewall.bmp", &_stonewall);

 

設(shè)置當(dāng)前紋理,我們使用下面的方法:

Assigns a texture to a stage for a device.

HRESULT SetTexture(
DWORD Sampler,
IDirect3DBaseTexture9 * pTexture
);

Parameters

Sampler

Zero based sampler number. Textures are bound to samplers; samplers define sampling state such as the filtering mode and the address wrapping mode. Textures are referenced differently by the programmable and the fixed function pipeline:

  • Programmable shaders reference textures using the sampler number. The number of samplers available to a programmable shader is dependent on the shader version. .
  • The fixed function pipeline on the other hand, references textures by texture stage number. The maximum number of samplers is determined from two caps: MaxSimultaneousTextures and MaxTextureBlendStages of the D3DCAPS9 structure.
[in] There are two other special cases for stage/sampler numbers.
  • A special number called D3DDMAPSAMPLER is used for Displacement Mapping (Direct3D 9).
  • A programmable vertex shader uses a special number defined by a D3DVERTEXTEXTURESAMPLER when accessing Vertex Textures in vs_3_0 (Direct3D 9).

 

pTexture
[in] Pointer to an IDirect3DBaseTexture9 interface, representing the texture being set.

Return Values

If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.

Remarks

IDirect3DDevice9::SetTexture is not allowed if the texture is created with a pool type of D3DPOOL_SCRATCH. IDirect3DDevice9::SetTexture is not allowed with a pool type of D3DPOOL_SYSTEMMEM texture unless DevCaps is set with D3DDEVCAPS_TEXTURESYSTEMMEMORY.

例子:

Device->SetTexture(0, _stonewall);

注意:在Direct3D中,你能夠設(shè)置八個(gè)紋理,它們能夠組合起來(lái)創(chuàng)建更多細(xì)節(jié)的圖象。這又被叫做多重紋理。

 

為了銷(xiāo)毀一個(gè)紋理,我們?cè)O(shè)置pTexture為0。例如,假如不想用一個(gè)紋理來(lái)渲染物體,那么我們就這樣寫(xiě):

Device->SetTexture(0, 0);

renderObjectWithoutTexture();

假如場(chǎng)景中有使用不同紋理的三角形,我們就必須添加與下面類(lèi)似的一些代碼:

Device->SetTexture(0, _tex0);

drawTrisUsingTex0();

 

Device->SetTexture(0, _tex1);

drawTrisUsingTex1();

 

6.3過(guò)濾器

       就象以前提及的,紋理被映射到屏幕中的三角形上。通常紋理三角形和屏幕三角形是不一樣大的。當(dāng)紋理三角形比屏幕三角形小時(shí),紋理三角形會(huì)被適當(dāng)放大。當(dāng)紋理三角形比屏幕三角形大時(shí),紋理三角形會(huì)被適當(dāng)縮小。這兩種情況,變形都將會(huì)出現(xiàn)。過(guò)濾(Filtering)是一種Direct3D用它來(lái)幫助這些變形變的平滑的技術(shù)。

       Direct3D提供了三種不同的過(guò)濾器;每種都提供了一個(gè)不同的品質(zhì)級(jí)別。越好的品質(zhì)越慢,因此你必須在品質(zhì)與速度之間取得一個(gè)平衡。紋理過(guò)濾器是用IDirect3DDevice9::SetSamplerState方法來(lái)設(shè)置的。

Sets the sampler state value.

HRESULT SetSamplerState(
DWORD Sampler,
D3DSAMPLERSTATETYPE Type,
DWORD Value
);

Parameters

Sampler
[in] The sampler stage index.
Type
[in] This parameter can be any member of the D3DSAMPLERSTATETYPE enumerated type.
Value
[in] State value to set. The meaning of this value is determined by the Type parameter.

Return Values

If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be D3DERR_INVALIDCALL.

  •  Nearest point sampling——這是默認(rèn)的過(guò)濾方法且返回最差的效果,但是它的計(jì)算是最快的。下面的代碼就是設(shè)置Nearest point sampling作為縮小放大的過(guò)濾器:

Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);

Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);

  •  Linear filtering——這種過(guò)濾產(chǎn)生還算比較好的效果,在今天的硬件上處理它還是非常快的。它是被推薦使用的。下面的代碼就是設(shè)置Linear filtering作為縮小放大的過(guò)濾器。

Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);

Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);

  •  Anisotropic filtering——這種過(guò)濾產(chǎn)生最好的效果,但是處理時(shí)間也是最長(zhǎng)的。下面的代碼就是設(shè)置Anisotropic filtering作為縮小放大的過(guò)濾器。

Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC);

Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);

當(dāng)使用Anisotropic filtering時(shí),我們必須設(shè)置D3DSAMP_MAXANISOTROPY等級(jí),它決定處理的質(zhì)量。該值越高處理的效果越好。檢查D3DCAPS9結(jié)構(gòu)確認(rèn)你的顯卡是否支持此功能。下面的代碼設(shè)置該值為4:

Device->SetSamplerState(0, D3DSAMP_MAXANISOTROPY, 4);


posted on 2008-03-17 11:17 lovedday 閱讀(1496) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶(hù)登錄后才能發(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>
            欧美激情综合网| av72成人在线| 亚洲少妇在线| 最近中文字幕日韩精品 | 午夜精品福利视频| 欧美成人激情在线| 久久久亚洲欧洲日产国码αv| 欧美日韩一本到| 亚洲国产精品久久精品怡红院| 国产午夜精品视频| 一区二区欧美激情| 夜夜躁日日躁狠狠久久88av| 久久婷婷国产综合尤物精品 | 亚洲天堂男人| 欧美激情精品久久久久久大尺度 | 久久青草久久| 国产欧美日韩亚洲精品| 国产精品99久久久久久久女警 | 久久精品一区蜜桃臀影院| 欧美性猛交xxxx免费看久久久| 亚洲国产精品一区二区第一页 | 狠狠色狠狠色综合日日tαg| 亚洲一区二区免费看| 亚洲影院在线| 国产精品久久影院| 一区二区三区免费看| 亚洲一区二区四区| 国产精品日韩欧美一区| 亚洲一区二区视频在线| 午夜久久一区| 国产日韩欧美亚洲| 久久精品国产91精品亚洲| 久热精品视频在线观看一区| 好吊日精品视频| 久久理论片午夜琪琪电影网| 欧美成人在线免费观看| 99热这里只有精品8| 欧美日韩国产综合视频在线观看中文| 日韩视频免费| 午夜精品久久久久久久久久久久 | 欧美成人精品在线观看| 亚洲激情成人网| 一本色道久久88精品综合| 欧美日韩一区在线观看| 亚洲自拍啪啪| 男同欧美伦乱| 一本久道久久综合狠狠爱| 国产精品久久99| 欧美影院在线播放| 欧美激情一二三区| 亚洲一区国产| 在线观看91精品国产麻豆| 欧美大片在线观看| 亚洲永久免费av| 蜜月aⅴ免费一区二区三区| 99精品国产高清一区二区| 国产精品chinese| 久久久久高清| 亚洲另类视频| 久久综合九色九九| 亚洲午夜精品视频| 一色屋精品视频在线看| 欧美日韩亚洲一区三区| 久久成人在线| 99国产精品久久| 模特精品在线| 欧美亚洲一区二区在线观看| 亚洲国产一区在线| 国产欧美一区二区精品婷婷 | 国产精品视频| 欧美jjzz| 欧美在线视频网站| 99这里只有精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 99国产精品国产精品久久| 久久亚洲欧美| 亚洲免费在线视频一区 二区| 永久91嫩草亚洲精品人人| 国产精品r级在线| 欧美jizz19hd性欧美| 欧美在线视频一区二区三区| 一本久道久久综合狠狠爱| 欧美www视频在线观看| 性色av一区二区三区红粉影视| 亚洲精品在线观| 狠狠色伊人亚洲综合成人| 国产精品久久久久久五月尺| 女仆av观看一区| 性色av一区二区三区红粉影视| 91久久久久| 亚洲第一级黄色片| 欧美大片91| 男女激情久久| 麻豆成人91精品二区三区| 久久精品人人做人人爽| 小黄鸭精品密入口导航| 亚洲一区制服诱惑| 亚洲图片激情小说| 99ri日韩精品视频| 亚洲精品自在久久| 亚洲精品国产视频| 亚洲激情国产| 91久久精品国产| 91久久精品国产91性色| 亚洲激情一区| 亚洲美洲欧洲综合国产一区| 亚洲黄色毛片| 亚洲日本一区二区| 亚洲精品在线观| 日韩午夜电影| 亚洲午夜视频在线观看| 亚洲女人天堂成人av在线| 亚洲影院高清在线| 欧美一区二区三区在| 久久国产一区二区| 久热精品视频| 亚洲第一天堂无码专区| 亚洲人体大胆视频| 99精品欧美一区二区蜜桃免费| 一本久久综合亚洲鲁鲁五月天| 在线一区二区三区四区五区| 亚洲一区二区三区四区五区午夜| 午夜精品福利电影| 久久精品国产久精国产一老狼| 久久免费的精品国产v∧| 蜜桃av综合| 欧美日韩亚洲精品内裤| 国产精品视频区| 影音先锋亚洲视频| 99www免费人成精品| 午夜精品久久久久久久99黑人| 欧美主播一区二区三区| 免费观看国产成人| 亚洲理论在线观看| 午夜精品电影| 欧美成人精品在线视频| 国产精品国产三级国产a| 国内不卡一区二区三区| 亚洲精品在线三区| 先锋资源久久| 欧美黑人在线播放| 9l视频自拍蝌蚪9l视频成人| 欧美在线观看视频一区二区| 免费久久99精品国产自在现线| 欧美日韩一区二区视频在线| 国产亚洲欧美激情| 亚洲开发第一视频在线播放| 西西裸体人体做爰大胆久久久| 欧美69wwwcom| 亚洲女同精品视频| 欧美成人免费va影院高清| 国产免费观看久久| 亚洲精品视频中文字幕| 久久精品在线观看| 一本久久知道综合久久| 久久香蕉精品| 国产亚洲成年网址在线观看| 亚洲麻豆av| 麻豆乱码国产一区二区三区| 在线综合+亚洲+欧美中文字幕| 美女主播视频一区| 国产亚洲精品bv在线观看| 中文久久精品| 亚洲国产精品毛片| 久久久噜噜噜久久人人看| 国产精品视频一| 一区二区三区精品视频在线观看| 欧美成人亚洲| 久久精品亚洲一区二区| 国产日产精品一区二区三区四区的观看方式 | 欧美极品色图| 亚洲激情在线观看| 免费av成人在线| 性欧美办公室18xxxxhd| 国产精品久久久久一区二区三区| 亚洲国产高清在线| 久久亚洲综合| 久久国内精品视频| 国产日韩欧美精品| 亚洲综合不卡| 一区二区三区国产在线| 欧美日韩亚洲一区二区三区| 亚洲精品久久久蜜桃| 欧美国产视频一区二区| 久久亚洲国产精品一区二区 | 欧美高清hd18日本| 久久亚洲综合色| 一区一区视频| 欧美成人a视频| 久热re这里精品视频在线6| 一区二区三区在线观看欧美| 久久久久久久久久码影片| 欧美专区18| 永久久久久久| 亚洲成色999久久网站| 欧美国产乱视频| 夜夜精品视频| 亚洲香蕉网站| 国产日韩精品一区二区| 久久综合九色综合久99|