ÔÚMicrosoft DirectX® 8.0֮ǰ£¬Microsoft® Direct3D®Ê¹Óù̶¨¹¦ÄÜÁ÷Ë®Ïß°ÑÈýά¼¸ºÎÌåת»»ÎªÆÁÄ»ÉϵÄÏñËØ¡£Óû§Í¨¹ýÉèÖÃÁ÷Ë®ÏßµÄÊôÐÔÀ´¿ØÖÆDirect3D½øÐб任¡¢¹âÕÕºÍäÖȾÏñËØµÄ·½Ê½¡£¹Ì¶¨¹¦Äܶ¥µã¸ñʽÔÚ±àÒëµÄʱºò¶¨Òå²¢¾ö¶¨ÊäÈë¶¥µãµÄ¸ñʽ£¬Ò»µ©¶¨Ò壬Óû§ÔÚÔËÐеÄʱºò¾Í¼¸ºõÎÞ·¨¿ØÖÆÁ÷Ë®Ïߵĸı䡣
ͨ¹ýÔÊÐí¶Ô¶¥µãµÄ±ä»»¡¢¹âÕպͶÔÿ¸öÏñËØµÄ×ÅÉ«µÈ¹¦ÄܽøÐбà³Ì£¬×ÅÉ«Æ÷°ÑͼÐÎÁ÷Ë®ÏßÒýÈëÁËÒ»¸öеĸ߶ȡ£ÏñËØ×ÅÉ«Æ÷ÊÇһЩС³ÌÐò£¬ÔÚ¶ÔÈý½ÇÐνøÐйâÕ¤»¯²Ù×÷ʱÔËÐС£ÕâÔÚäÖȾÏñËØµÄ·½·¨ÉϸøÁËÓû§¸ü¸ßÒ»¼¶µÄÁé»îÐÔ¡£
ÏñËØ×ÅÉ«Æ÷°üº¬ÓÉASCIIÎı¾×é³ÉµÄÏñËØ×ÅÉ«Æ÷Ö¸Áî¡£ËãÊõÖ¸Áî¿ÉÒÔÓÃÀ´½øÐÐÂþ·´ÉäºÍ/»ò¾µÃæ·´Éä¹âÕÕ¼ÆËã¡£ÎÆÀíѰַָÁîÌṩÁ˶àÖÖ¶ÁÈ¡ºÍÓ¦ÓÃÎÆÀíÊý¾ÝµÄ²Ù×÷¡£×ÅÉ«Æ÷¾ßÓÐÕâÑùµÄ¹¦ÄÜ£¬¿ÉÒÔ¸øÑÕÉ«·ÖÁ¿ÉèÖÃÑÚÂëÒÔ¼°½»»»ÑÕÉ«·ÖÁ¿¡£×ÅÉ«Æ÷µÄÕýÎÄ¿´ÆðÀ´ÓеãÏñ»ã±àÓïÑÔ£¬ËüÓÃDirect3DÀ©Õ¹£¨D3DX£©½øÐлã±à£¬ÊäÈë¿ÉÒÔÊÇÎı¾×Ö·û´®»òÊÇÎļþ¡£»ã±àÆ÷µÄÊä³öÊÇһϵÁвÙ×÷Â룬ӦÓóÌÐò¿ÉÒÔͨ¹ýIDirect3DDevice9::CreatePixelShader·½·¨°ÑÕâЩ²Ù×÷ÂëÌṩ¸øDirect3D¡£ÏñËØ×ÅÉ«Æ÷Óм¸¸ö°æ±¾£¬Çë²ÎÔÄ×ÅÉ«Æ÷²Î¿¼Êֲᡣ
Ö¸ÁµÄ±ä»¯·Ç³£¿ì¡£Îª±ÜÃâÔÚʹÓÃÖ¸Áîʱ³öÏÖÎÊÌ⣬Çë²éÔÄÓ²¼þ¿ª·¢É̵ÄÍøÕ¾¡£»òÕߣ¬Ò²¿ÉÒÔʹÓø߼¶×ÅÉ«Æ÷ÓïÑÔ£¬ÕâÑù¾Í¿ÉÒԵõ½ÓÉDirect3DÀ©Õ¹£¨D3DX£©±àÒëµÃµ½µÄ×ÅÉ«Æ÷Ö¸Áî¡£
±¾Ê¾ÀýÓÃÏñËØ×ÅÉ«Æ÷¶ÔÒ»¸öËıßÐεÄÂþ·´ÉäÉ«½øÐиßÂåµÂ²åÖµ¡£Ê¾ÀýÏÔʾÁË×ÅÉ«Æ÷ÎļþµÄÄÚÈÝÒÔ¼°Ó¦ÓóÌÐòÖÐËùÐèµÄ´úÂë¡£
ÒÔÏÂÊÇ´´½¨ÏñËØ×ÅÉ«Æ÷ËùÐèµÄ²½Ö裺
Èç¹û¶ÁÕßÒѾ֪µÀÈçºÎ¹¹½¨²¢ÔËÐÐDirect3DʾÀý£¬ÄÇô¿ÉÒÔ´Ó±¾Ê¾ÀýÖи´ÖÆ´úÂë²¢Õ³Ìùµ½ÒÑÓеÄÓ¦ÓóÌÐòÖС£
Òª¼ì²é¶ÔÏñËØ×ÅÉ«Æ÷µÄÖ§³Ö£¬Ó¦¸ÃʹÓÃÒÔÏ´úÂë¡£Õâ¸öÀý×Ó¼ì²é1.1°æ±¾µÄÏñËØ×ÅÉ«Æ÷¡£
D3DCAPS9 caps;
m_pd3dDevice->GetDeviceCaps(&caps); // ʹÓÃm_pd3dDeviceǰҪ½øÐгõʼ»¯
if( caps.PixelShaderVersion < D3DPS_VERSION(1,1)
)
return
E_FAIL;
caps½á¹¹»á·µ»ØÓ²¼þ¿ÉÓõÄÄÜÁ¦¡£ÒªÓÃD3DPS_VERSIONºê¼ì²éµ±Ç°Ó²¼þÖ§³ÖµÄËùÓÐ×ÅÉ«Æ÷°æ±¾¡£Èç¹ûcaps·µ»ØµÄ°æ±¾Ð¡ÓÚ1.1£¬ÄÇôÕâ¸öµ÷Óûáʧ°Ü¡£·´Ö®£¬¶ÔËùÓдóÓÚ»òµÈÓÚ1.1µÄ°æ±¾£¬µ÷Óûá³É¹¦¡£Èç¹ûÓ²¼þ²»Ö§³Ö±»²âÊÔµÄ×ÅÉ«Æ÷°æ±¾£¬ÄÇôӦÓóÌÐò½«²»µÃ²»Í˶øÊ¹ÓñðµÄäÖȾ·½·¨£¨Ò²Ðí¿ÉÒÔʹÓÃÒ»¸ö½ÏµÍ°æ±¾µÄ×ÅÉ«Æ÷£©¡£
Õâ¸öʾÀýʹÓÃÁËÒ»¸öËıßÐΣ¬ÓÉÁ½¸öÈý½ÇÐÎ×é³É¡£Ã¿¸ö¶¥µãµÄÊý¾Ý½á¹¹°üº¬ÁËλÖúÍÂþ·´ÉäÉ«Êý¾Ý¡£D3DFVF_CUSTOMVERTEXºê¶¨ÒåÁËÓë¶¥µãÊý¾ÝÏàÆ¥ÅäµÄÊý¾Ý½á¹¹¡£Êµ¼ÊµÄ¶¥µãÊý¾ÝÔÚÈ«¾ÖÊý×ég_VerticesÖÐÉùÃ÷¡£Ëĸö¶¥µãÒÔÔµãΪÖÐÐÄ£¬Ã¿¸ö¶¥µã¾ßÓв»Í¬µÄÂþ·´ÉäÉ«¡£
struct CUSTOMVERTEX
{
FLOAT x, y, z;
DWORD diffuseColor;
};
// ÉùÃ÷×Ô¶¨ÒåFVFºê¡£
#define D3DFVF_CUSTOMVERTEX
(D3DFVF_XYZ|D3DFVF_DIFFUSE)
// ÉùÃ÷¶¥µãλÖúÍÂþ·´ÉäÉ«Êý¾Ý¡£
CUSTOMVERTEX g_Vertices[]=
{
// x y z Âþ·´ÉäÉ«
{ -1.0f, -1.0f, 0.0f, 0xffff0000 },
// ºì ¨C ×óÏÂ
{ +1.0f, -1.0f, 0.0f, 0xff00ff00 },
// ÂÌ ¨C ÓÒÏÂ
{ +1.0f, +1.0f, 0.0f, 0xff0000ff },
// À¶ ¨C ÓÒÉÏ
{ -1.0f, +1.0f, 0.0f, 0xffffffff },
// °× ¨C ×óÉÏ
};
Õâ¸ö×ÅÉ«Æ÷°Ñ¾¹ý¸ßÂåµÂ²åÖµµÄÂþ·´ÉäÉ«Êý¾Ý¸´ÖƵ½Êä³öÏñËØ¡£×ÅÉ«Æ÷ÎļþPixelShader.txtÈçÏÂËùʾ£º
ps_1_1 // °æ±¾Ö¸Áî
mov r0,v0 // °Ñ¶¥µãµÄÂþ·´ÉäÉ«¸´ÖƵ½Êä³ö¼Ä´æÆ÷¡£
ÏñËØ×ÅÉ«Æ÷ÎļþµÄµÚÒ»ÌõÖ¸ÁîÉùÃ÷ÁËÏñËØ×ÅÉ«Æ÷µÄ°æ±¾£¬´Ë´¦Îª1.1¡£
µÚ¶þÌõÖ¸Áî°ÑÑÕÉ«¼Ä´æÆ÷(v0)µÄÄÚÈݸ´ÖƵ½Êä³ö¼Ä´æÆ÷(r0)¡£ÒòΪÔÚµÚ1²½ÖÐÉùÃ÷µÄ¶¥µãÊý¾ÝÒѾ°üº¬Á˾¹ý²åÖµµÄÂþ·´ÉäÉ«£¬ËùÒÔÑÕÉ«¼Ä´æÆ÷°üº¬Á˶¥µãµÄÂþ·´ÉäÉ«¡£Êä³ö¼Ä´æÆ÷¾ö¶¨äÖȾĿ±êʹÓõÄÏñËØÑÕÉ«£¨ÒòΪ±¾ÀýÖÐûÓиü¶àµÄ´¦Àí£¬ÈçÎí£¬ËùÒÔÊä³ö¼Ä´æÆ÷¾ÍÊÇ×îÖÕµÄÏñËØÑÕÉ«£©¡£
ÏñËØ×ÅÉ«Æ÷ÓÉÏñËØ×ÅÉ«Æ÷Ö¸Áî´´½¨¡£±¾ÀýÖУ¬Ö¸Áî±»°üº¬ÔÚÒ»¸öµ¥¶ÀµÄÎļþÖС£Ö¸ÁîÒ²¿ÉÒÔ±»°üº¬ÔÚÒ»¸öÎı¾×Ö·û´®ÖС£
LPD3DXBUFFER pCode;
// ´æ·Å¾¹ý»ã±àµÄ×ÅÉ«Æ÷´úÂëµÄ»º´æ
LPD3DXBUFFER pErrorMsgs;
// ´æ·Å´íÎóÐÅÏ¢µÄ»º´æ
TCHAR
strPixelShaderPath[512];// ÓÃÀ´¶¨Î»×ÅÉ«Æ÷Îļþ
DXUtil_FindMediaFileCb( strPixelShaderPath,
sizeof(strPixelShaderPath),
_T("PixelShader.txt") );
Õâ¸öº¯ÊýÊÇʾÀý¿ò¼ÜʹÓõÄÒ»¸ö¸¨Öúº¯Êý£¬Ðí¶àʾÀý¶¼ÒÔËüΪ»ù´¡¡£
LPDIRECT3DPIXELSHADER9 m_pPixelShader;
D3DXAssembleShaderFromFile( strPixelShaderPath,
NULL, NULL, 0,
&pCode, &pErrorMsgs, NULL );
m_pd3dDevice->CreatePixelShader(
(DWORD*)pCode->GetBufferPointer(),
&m_pPixelShader
);
×ÅÉ«Æ÷´´½¨Íê³Éºó£¬Ö¸Õëm_pPixelShaderÓÃÀ´¶ÔËü½øÐÐÒýÓá£
³ýÁËÓÃÏñËØ×ÅÉ«Æ÷¾ä±úÀ´ÉèÖÃ×ÅÉ«Æ÷Í⣬äÖȾÊä³öÏñËØµÄ¹ý³ÌºÍʹÓù̶¨¹¦ÄÜÁ÷Ë®ÏßÀàËÆ¡£
// ÔÚ±¾ÀýÖйرչØÕÕ¡£Ëü²»»á¶Ô×îÖÕÏñËØµÄÑÕÉ«²úÉúÓ°Ïì¡£
// ÏñËØÑÕÉ«ÍêÈ«Óɾ¹ý²åÖµµÄ¶¥µãÑÕÉ«¾ö¶¨¡£
m_pd3dDevice->SetRenderState( D3DRS_LIGHTING,
FALSE );
m_pd3dDevice->SetStreamSource( 0, m_pQuadVB,
sizeof(CUSTOMVERTEX) );
m_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
m_pd3dDevice->SetPixelShader( m_pPixelShader );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN,
0, 2 );
Ô´¶¥µãÊý¾ÝÓÉSetStreamSourceÉèÖᣱ¾ÀýÖУ¬SetFVFʹÓÃÔÚÉùÃ÷¶¥µãÊý¾Ýʱ¶¨ÒåµÄFVFÂë¸æËßDirect3D½øÐй̶¨¹¦Äܶ¥µã´¦Àí¡£¶¥µã×ÅÉ«Æ÷ºÍÏñËØ×ÅÉ«Æ÷¼È¿ÉÒÔÒ»ÆðʹÓã¬Ò²¿ÉÒÔ·Ö¿ªÊ¹Ó᣿ÉÒÔÓù̶¨¹¦ÄÜÁ÷Ë®Ïß´úÌæÕâÁ½Õß¡£SetPixelShaderÉèÖÃÏñËØ×ÅÉ«Æ÷£¬¶øDrawPrimitiveÔò»æÖÆËıßÐΡ£
Ó¦ÓóÌÐò¿ÉÒÔ²éѯD3DCAPS9µÄ³ÉÔ±ÒÔÈ·¶¨Ó²¼þ¶ÔÏñËØ×ÅÉ«Æ÷ËùÉæ¼°µÄ²Ù×÷µÄÖ§³Ö³Ì¶È¡£Ï±íÁгöÁËÓë¿É±à³ÌÏñËØ´¦ÀíÓйصÄÉ豸ÄÜÁ¦¡£
|
É豸ÄÜÁ¦ |
ÃèÊö |
|
PixelShader1xMaxValue |
¼Ä´æÆ÷Öпɴ洢µÄÖµµÄ·¶Î§Îª[-PixelShader1xMaxValue, PixelShader1xMaxValue]¡£Õâ¸öÖµÖ»¶Ô°æ±¾1.1µ½1.4ÓÐЧ¡£ |
|
MaxSimultaneousTextures |
ÓÃÓڹ̶¨¹¦ÄÜÁ÷Ë®Ïߣ¬ÎÆÀíÈ¡ÑùÆ÷µÄÊýÁ¿ÎªMaxTextureBlendStages³ýÒÔMaxSimultaneousTextures¡£ÓÃÓÚÏñËØ×ÅÉ«Æ÷µÄÎÆÀíÈ¡ÑùÆ÷µÄÊýÁ¿ÔÚ½ÓÏÂÀ´µÄ±íÖÐÏÔʾ¡£ |
|
PixelShaderVersion |
Ó²¼þÖ§³ÖµÄÏñËØ×ÅÉ«Æ÷µÄ°æ±¾¡£°æ±¾ºÅСÓÚ»òµÈÓÚ¸ÃÖµµÄÏñËØ×ÅÉ«Æ÷±»Ö§³Ö¡£ |
¿ÉÓÃÓÚÏñËØ×ÅÉ«Æ÷µÄÎÆÀíÈ¡ÑùÆ÷µÄÊýÁ¿È¡¾öÓÚÏñËØ×ÅÉ«Æ÷µÄ°æ±¾¡£
|
ÏñËØ×ÅÉ«Æ÷°æ±¾ |
ÎÆÀíÈ¡ÑùÆ÷µÄÊýÁ¿ |
|
ps_1_1 - ps_1_3 |
4¸öÎÆÀíÈ¡ÑùÆ÷ |
|
ps_1_4 |
6¸öÎÆÀíÈ¡ÑùÆ÷ |
|
ps_2_0 - ps_3_0 |
16¸öÎÆÀíÈ¡ÑùÆ÷ |
|
Fixed function pixel shader |
MaxTextureBlendStages/MaxSimultaneousTextures¸öÎÆÀíÈ¡ÑùÆ÷ |
PixelShaderVersionµÄµÚÒ»¸ö×Ö½Ú°üº¬´Î°æ±¾ºÅ£¬µÚ¶þ¸ö×Ö½Ú°üº¬Ö÷°æ±¾ºÅ¡£¾¹ý»ã±àµÄ×ÅÉ«Æ÷µÄµÚÒ»¸ö±ê¼Ç¾ÍÊÇÏñËØ×ÅÉ«Æ÷µÄ°æ±¾¡£Ã¿ÖÖÓ²¼þʵÏÖ¶¼»áÉèÖøð汾ºÅ£¬±íʾËüÄÜÍêȫ֧³ÖµÄÏñËØ×ÅÉ«Æ÷µÄ×î¸ß°æ±¾¡£
ÏñËØ×ÅÉ«Æ÷ÔÚÒÔϼ¸¸ö·½ÃæÀ©Õ¹²¢Ò»°ã»¯ÁËMicrosoft DirectX® 6.0ºÍ7.0µÄ¶àÖØÎÆÀíÄÜÁ¦¡£
ΪÁËÓÐЧµØÖ§³ÖÕâÖÖÐÂÔöµÄÁé»îÐÔ£¬APIµÄÓï·¨´ÓDWORD¶Ô¸Ä³ÉÁËASCII»ã±à´úÂëÓï·¨¡£ÕâÑù¾Í±©Â¶Á˳ÌÐò»¯µÄÏñËØ×ÅÉ«Æ÷ËùÌṩµÄ¹¦ÄÜ¡£
×¢ÒâÔÚʹÓÃÏñËØ×ÅÉ«Æ÷ʱ£¬¾µÃæ·´Éä¼Ó·¨²»×¨ÃÅÓÉÒ»¸öäÖȾ״̬¿ØÖÆ£¬Èç¹ûÐèÒª£¬Õâ¿ÉÄÜÓÉÏñËØ×ÅÉ«Æ÷ʵÏÖ¡£µ«ÊÇ£¬Îí»ìºÏÈÔÈ»Óɹ̶¨¹¦ÄÜÁ÷Ë®ÏßÖ´ÐС£
ÏñËØ×ÅÉ«Æ÷Íêȫȡ´úÁËÓÉMicrosoft
DirectX® 6.0ºÍ7.0µÄ¶àÖØÎÆÀíAPIÌṩµÄÏñËØ»ìºÏ¹¦ÄÜ£¬ÓÈÆäÊÇÄÇЩÓÉD3DTSS_COLOROP,
D3DTSS_COLORARG1, D3DTSS_COLORARG2, D3DTSS_ALPHAOP, D3DTSS_ALPHAARG1ºÍD3DTSS_ALPHAARG2ÎÆÀí²ã״̬¡¢Ïà¹ØµÄ²ÎÊýºÍÐÞÊηû¶¨ÒåµÄ²Ù×÷¡£Èç¹ûÉèÖÃÁ˳ÌÐò»¯µÄÏñËØ×ÅÉ«Æ÷£¬ÄÇôÕâЩ״̬»á±»ºöÂÔ¡£
Èç¹ûÏñËØ×ÅÉ«Æ÷ÕýÔÚÔËÐУ¬ÄÇôÒÔÏÂÎÆÀí²ã״̬ÈÔÈ»»á±»Ê¹Ó᣶ÔÕâЩ״̬µÄʹÓÃÈ¡¾öÓÚÏñËØ×ÅÉ«Æ÷µÄ°æ±¾£¬ÈçϱíËùʾ¡£
|
ÎÆÀí²ã״̬ |
°æ±¾ |
|
D3DTSS_BUMPENVMAT00 |
1_1 - 1_4 |
|
D3DTSS_BUMPENVMAT01 |
1_1 - 1_4 |
|
D3DTSS_BUMPENVMAT10 |
1_1 - 1_4 |
|
D3DTSS_BUMPENVMAT11 |
1_1 - 1_4 |
|
D3DTSS_BUMPENVLSCALE |
1_1 - 1_3 |
|
D3DTSS_BUMPENVLOFFSET |
1_1 - 1_3 |
|
D3DTSS_TEXCOORDINDEX |
1_1 -
1_3. ½ö¶Ô¹Ì¶¨¹¦Äܶ¥µã´¦ÀíÓÐЧ¡£ |
|
D3DTSS_TEXTURETRANSFORMFLAGS |
1_1 -
1_3. ½ö¶Ô¹Ì¶¨¹¦Äܶ¥µã´¦ÀíÓÐЧ¡£ |
Èç¹ûÏñËØ×ÅÉ«Æ÷ÕýÔÚÔËÐУ¬ÄÇôÏÂÃæµÄÈ¡ÑùÆ÷״̬ÈÔÈ»»á±»Ê¹Óá£
|
È¡ÑùÆ÷״̬ |
°æ±¾ |
|
D3DSAMP_ADDRESSU |
ËùÓа汾 |
|
D3DSAMP_ADDRESSV |
ËùÓа汾 |
|
D3DSAMP_ADDRESSW |
ËùÓа汾 |
|
D3DSAMP_BORDERCOLOR |
ËùÓа汾 |
|
D3DSAMP_MAGFILTER |
ËùÓа汾 |
|
D3DSAMP_MINFILTER |
ËùÓа汾 |
|
D3DSAMP_MIPFILTER |
ËùÓа汾 |
|
D3DSAMP_MIPMAPLODBIAS |
ËùÓа汾 |
|
D3DSAMP_MAXMIPLEVEL |
ËùÓа汾 |
|
D3DSAMP_MAXANISOTROPY |
ËùÓа汾 |
|
D3DSAMP_SRGBTEXTURE |
ËùÓа汾 |
|
D3DSAMP_ELEMENTINDEX |
ËùÓа汾 |
|
D3DSAMP_DMAPOFFSET |
½ö¶¥µã×ÅÉ«Æ÷£¨Î»ÒÆÌùͼ£© |
ÒòÎªÎÆÀí²ã״̬²»ÊÇÏñËØ×ÅÉ«Æ÷µÄÒ»²¿·Ö£¬ÔÚ±àÒë×ÅÉ«Æ÷ʱËüÃÇÊDz»¿ÉÓõģ¬ËùÒÔÇý¶¯³ÌÐòÎÞ·¨¶ÔËüÃÇ×öÈκμٶ¨¡£ÀýÈ磬Çý¶¯³ÌÐò²»ÄÜÔÚÄÇÊ±Çø·Ö³öË«ÏßÐÔ¹ýÂ˺ÍÈýÏßÐÔ¹ýÂË¡£Ó¦ÓóÌÐò¿ÉÒÔ×ÔÓɵظıäÕâЩ״̬¶øÎÞÐèÖØÐÂÉú³Éµ±Ç°°ó¶¨µÄ×ÅÉ«Æ÷¡£
ÎÆÀíÈ¡ÑùºÍ¹ýÂ˲Ù×÷Óɱê×¼ÎÆÀí²ã״̬ÖеķŴó¡¢ËõС¡¢mip¹ýÂË¡¢ÒÔ¼°»·ÈÆÑ°Ö·Ä£Ê½¿ØÖÆ¡£¸ü¶àÐÅÏ¢£¬Çë²ÎÔÄÎÆÀí²ã״̬¡£ÒòΪÇý¶¯³ÌÐòÔÚ±àÒëʱҲÎÞ·¨µÃµ½ÕâЩÐÅÏ¢£¬ËùÒÔ×ÅÉ«Æ÷±ØÐëÄܹ»ÔÚÕâЩ״̬¸Ä±äºó¼ÌÐøÔËÐС£Ó¦ÓóÌÐò¸ºÔðÉèÖÃÏñËØ×ÅÉ«Æ÷ËùÐèµÄÕýÈ·ÀàÐ͵ÄÎÆÀí£¨¶þάÌùͼ£¬Á¢·½ÌåÌùͼ£¬Á¢ÌåÌùͼµÈ£©¡£Èç¹ûÉèÖò»ÕýÈ·µÄÎÆÀíÀàÐÍ£¬ÄÇô½«»á²úÉú²»¿ÉÔ¤ÁϵĽá¹û¡£
ÆäËüһЩÏñËØ²Ù×÷¡ª¡ªÈçÎí»ìºÏ¡¢Ä£°å²Ù×÷¡¢ÒÔ¼°äÖȾĿ±ê»ìºÏ¡ª¡ªÔÚ×ÅÉ«Æ÷Ö´ÐÐÒÔºó·¢Éú¡£ÎªÁËÖ§³Ö±¾Ö÷ÌâÃèÊöµÄÐÂÌØÐÔ£¬äÖȾĿ±ê»ìºÏµÄÓï·¨ÒѾ×öÁ˸üС£
¶ÔÏñËØ×ÅÉ«Æ÷°æ±¾1.1µ½2.0À´Ëµ£¬Âþ·´ÉäÉ«ºÍ¾µÃæ·´ÉäÉ«ÔÚ¸ø×ÅÉ«Æ÷ʹÓÃ֮ǰ±»½ØÈ¡µ½·¶Î§0µ½1Ö®¼ä£¬ÒòΪÕâÊÇ×ÅÉ«Æ÷µÄÓÐЧÊäÈ뷶Χ¡£
ÊäÈëµ½ÏñËØ×ÅÉ«Æ÷µÄÑÕɫֵ±»ÈÏΪÊǾ¹ý͸ÊÓУÕýµÄ£¬µ«²¢·ÇËùÓÐÓ²¼þ¶¼Äܱ£Ö¤ÕâÒ»µã¡£Ñ°Ö·´¦ÀíÆ÷¸ù¾ÝÎÆÀí×ø±ê²úÉúµÄÑÕÉ«×ÜÊÇÒÔ͸ÊÓУÕýµÄ·½Ê½½øÐеü´ú¡£µ«ÊÇ£¬ÔÚµü´ú¹ý³ÌÖУ¬ËüÃÇÒ²»á±»½ØÈ¡µ½·¶Î§0µ½1Ö®¼ä¡£
¶ÔÏñËØ×ÅÉ«Æ÷°æ±¾1.1µ½1.4À´Ëµ£¬ÏñËØ×ÅÉ«Æ÷²úÉúµÄÊä³öÊǼĴæÆ÷r0µÄÄÚÈÝ¡£¸Ã¼Ä´æÆ÷µÄÖµ»áÔÚ×ÅÉ«Æ÷´¦Àí½áÊøºó±»ËÍÍùÎí´¦Àí½×¶ÎºÍäÖȾĿ±ê»ìºÏÆ÷¡£
¶ÔÏñËØ×ÅÉ«Æ÷°æ±¾2.0ÒÔÉÏÀ´Ëµ£¬Êä³öµÄÑÕɫֵΪoC0µ½oC4¡£
±¾½Ú°üº¬Èý¸öÏñËØ×ÅÉ«Æ÷ʾÀý¡£Ã¿¸öʾÀý¶¼½¨Á¢ÔÚǰһ¸öʾÀýµÄ»ù´¡ÉÏ£¬²¢Ôö¼ÓһЩ¹¦ÄÜ¡£
±¾Ê¾Àý°ÑÒ»ÕÅÎÆÀíÌùͼӦÓÃÓÚÒ»¸öËıßÐΡ£±¾ÀýºÍǰÀýµÄÇø±ðÔÚÓÚ£º
ʾÀý´úÂëÈçÏ£º
// ¶¨Òå¶¥µãÊý¾Ý½á¹¹¡£
struct CUSTOMVERTEX
{
FLOAT x, y, z;
FLOAT u1, v1;
};
// ¶¨ÒåÏàÓ¦µÄFVFÂë¡£
#define D3DFVF_CUSTOMVERTEX
(D3DFVF_XYZ|D3DFVF_TEX|D3DFVF_TEXCOORDSIZE2(0))
// ´´½¨°üº¬Î»ÖúÍÎÆÀí×ø±êµÄ¶¥µãÊý¾Ý¡£
static CUSTOMVERTEX g_Vertices[]=
{
// x y z u1 v1
{ -1.0f, -1.0f, 0.0f, 0, 1,
},
{ 1.0f, -1.0f, 0.0f, 1, 1, },
{ 1.0f, 1.0f, 0.0f, 1, 0, },
{ -1.0f, 1.0f, 0.0f, 0, 0, },
// ΪÁ˺ÍWindows´ÓÉϵ½ÏµÄÔ¼¶¨Ò»Ö£¬v1±»µßµ¹ÁË¡£
// ×óÉϽǵÄÎÆÀí×ø±êΪ(0,0)¡£
// ÓÒϽǵÄÎÆÀí×ø±êΪ(1,1)¡£
};
// ´´½¨ÎÆÀí¡£Õâ¸öÎļþ°üº¬ÔÚ¹©ÏÂÔØµÄDirectX 9.0 SDKµÄýÌåÎļþÖС£
TCHAR
strTexturePath[512];
DXUtil_FindMediaFileCb( strTexturePath,
sizeof(strTexturePath),
_T("DX5_Logo.bmp") );
LPDIRECT3DTEXTURE9 m_pTexture0;
D3DUtil_CreateTexture( m_pd3dDevice,
strTexturePath,
&m_pTexture0, D3DFMT_R5G6B5 );
// Create the pixel shader.
TCHAR
strShaderPath[512];
DXUtil_FindMediaFileCb( strShaderPath,
sizeof(strShaderPath),
_T("PixelShader2.txt") );
Õâ¸öº¯ÊýÊÇʾÀý¿ò¼ÜʹÓõÄÒ»¸ö¸¨Öúº¯Êý£¬Ðí¶àʾÀý¶¼ÒÔËüΪ»ù´¡¡£
LPD3DXBUFFER pCode;
// ÓÃÀ´´æ·Å¾¹ý»ã±àµÄ×ÅÉ«Æ÷´úÂëµÄ»º´æ
LPD3DXBUFFER pErrorMsgs;
// ÓÃÀ´´æ·Å´íÎóÐÅÏ¢µÄ»º´æ
LPDIRECT3DPIXELSHADER9 m_pPixelShader;
D3DXAssembleShaderFromFile( strShaderPath, 0, NULL,
&pCode, NULL );
m_pd3dDevice->CreatePixelShader(
(DWORD*)pCode->GetBufferPointer(),
&m_pPixelShader );
m_pd3dDevice->SetPixelShader( m_pPixelShader );
// ÔØÈëÎÆÀí²¢äÖȾÊä³öÏñËØ¡£
m_pd3dDevice->SetTexture( 0, m_pTexture0 );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN,
0, 2 );
// Îļþ"PixelShader2.txt"µÄÄÚÈÝ
// °ÑÎÆÀíÌùͼӦÓÃÓÚÎïÌåµÄ¶¥µã¡£
ps_1_1 // ÎļþµÄµÚÒ»Ìõ±ØÐëÊǰ汾ָÁî¡£
tex t0 // ÉùÃ÷ÎÆÀí¼Ä´æÆ÷t0£¬´ÓÎÆÀí²ã0ÔØÈë¡£
mov r0, t0
// °ÑÎÆÀí¼Ä´æÆ÷Êý¾Ý(t0)¸´ÖƵ½Êä³ö¼Ä´æÆ÷(r0)¡£
µÃµ½µÄͼÏñÈçÏÂÃæËùʾ¡£
![]()
±¾Àý°ÑÎÆÀíÌùͼÖеÄÑÕÉ«Óë¶¥µãµÄÑÕÉ«½øÐлìºÏ¡£±¾ÀýÓëǰÀýµÄÇø±ðÈçÏ£º
´´½¨ÎÆÀíºÍÔØÈëÎÆÀíµÄ´úÂëÊÇÏàͬµÄ£¬·ÅÔÚÕâÀïÊÇΪÁ˱£³Ö´úÂëµÄÍêÕûÐÔ¡£
struct CUSTOMVERTEX
{
FLOAT x, y, z;
DWORD color1;
FLOAT tu1, tv1;
};
#define D3DFVF_CUSTOMVERTEX
(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1|
D3DFVF_TEXCOORDSIZE2(0))
static CUSTOMVERTEX g_Vertices[]=
{
// x y z diffuse u1 v1
{ -1.0f, -1.0f, 0.0f, 0xffff0000, 0, 1, }, // ºì
{ 1.0f, -1.0f, 0.0f,
0xff00ff00, 1, 1, }, // ÂÌ
{ 1.0f, 1.0f, 0.0f, 0xff0000ff, 1, 0, }, // ˦
{ -1.0f, 1.0f, 0.0f,
0xffffffff, 0, 0, }, // °×
// ΪÁ˺ÍWindows´ÓÉϵ½ÏµÄÔ¼¶¨Ò»Ö£¬v1±»µßµ¹ÁË¡£
// ×óÉϽǵÄÎÆÀí×ø±êΪ(0,0)¡£
// ÓÒϽǵÄÎÆÀí×ø±êΪ(1,1)¡£
};
// ´´½¨ÎÆÀí¡£Õâ¸öÎļþ°üº¬ÔÚ¹©ÏÂÔØµÄDirectX 9.0 SDKµÄýÌåÎļþÖС£
TCHAR
strTexturePath[512];
DXUtil_FindMediaFileCb( strTexturePath,
sizeof(strTexturePath),
_T("DX5_Logo.bmp") );
LPDIRECT3DTEXTURE9 m_pTexture0;
D3DUtil_CreateTexture( m_pd3dDevice,
strTexturePath,
&m_pTexture0, D3DFMT_R5G6B5 );
// ´´½¨ÏñËØ×ÅÉ«Æ÷¡£
TCHAR
strShaderPath[512];
DXUtil_FindMediaFileCb( strShaderPath,
sizeof(strShaderPath),
_T("PixelShader3.txt") );
LPD3DXBUFFER pCode;
// ÓÃÀ´´æ·Å¾¹ý»ã±àµÄ×ÅÉ«Æ÷´úÂëµÄ»º´æ
LPD3DXBUFFER pErrorMsgs;
// ÓÃÀ´´æ·Å´íÎóÐÅÏ¢µÄ»º´æ
LPDIRECT3DPIXELSHADER9 m_pPixelShader;
D3DXAssembleShaderFromFile( strShaderPath, 0, NULL,
&pCode, NULL );
m_pd3dDevice->CreatePixelShader( (DWORD*)pCode->GetBufferPointer(),
&m_pPixelShader );
m_pd3dDevice->SetPixelShader( m_pPixelShader );
// ÔØÈëÎÆÀí²¢äÖȾÊä³öÏñËØ¡£
m_pd3dDevice->SetTexture( 0, m_pTexture0 );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN,
0, 2 );
// Îļþ"PixelShader3.txt"µÄÄÚÈÝ
ps_1_1
// °æ±¾Ö¸Áî
tex t0
// ÉùÃ÷ÎÆÀí¼Ä´æÆ÷t0, ´ÓÎÆÀí²ã0ÔØÈë
mul r0, v0, t0
// v0*t0, È»ºó¸´ÖƵ½r0
×ÅÉ«Æ÷µÄÊäÈëÈçÏÂÃæËùʾ¡£µÚÒ»·ùͼΪ¶¥µãÑÕÉ«£¬µÚ¶þ·ùÍ¼ÎªÎÆÀíÌùͼ¡£
![]()
µÃµ½µÄͼÏñÈçÏÂÃæËùʾ£¬Ò²¾ÍÊǶ¥µãµÄÑÕÉ«ºÍÎÆÀíÌùͼ»ìºÏµÄ½á¹û¡£
![]()
±¾Àý°ÑÁ½ÕÅÎÆÀíÌùͼ½øÐлìºÏ£¬¶¥µãµÄÑÕÉ«ÓÃÀ´¾ö¶¨Ã¿ÕÅÎÆÀíÌùͼµÄÑÕÉ«ËùÕ¼µÄ±ÈÀý¡£±¾ÀýºÍǰÀýµÄÇø±ðÈçÏ£º
ÏÂÃæÊÇʾÀý´úÂë¡£
struct CUSTOMVERTEX
{
FLOAT x, y, z;
DWORD
color;