ÏñËØ×ÅÉ«Æ÷


ÔÚMicrosoft DirectX® 8.0֮ǰ£¬Microsoft® Direct3D®Ê¹Óù̶¨¹¦ÄÜÁ÷Ë®Ïß°ÑÈýά¼¸ºÎÌåת»»ÎªÆÁÄ»ÉϵÄÏñËØ¡£Óû§Í¨¹ýÉèÖÃÁ÷Ë®ÏßµÄÊôÐÔÀ´¿ØÖÆDirect3D½øÐб任¡¢¹âÕÕºÍäÖȾÏñËØµÄ·½Ê½¡£¹Ì¶¨¹¦Äܶ¥µã¸ñʽÔÚ±àÒëµÄʱºò¶¨Òå²¢¾ö¶¨ÊäÈë¶¥µãµÄ¸ñʽ£¬Ò»µ©¶¨Ò壬Óû§ÔÚÔËÐеÄʱºò¾Í¼¸ºõÎÞ·¨¿ØÖÆÁ÷Ë®Ïߵĸı䡣

ͨ¹ýÔÊÐí¶Ô¶¥µãµÄ±ä»»¡¢¹âÕպͶÔÿ¸öÏñËØµÄ×ÅÉ«µÈ¹¦ÄܽøÐбà³Ì£¬×ÅÉ«Æ÷°ÑͼÐÎÁ÷Ë®ÏßÒýÈëÁËÒ»¸öеĸ߶ȡ£ÏñËØ×ÅÉ«Æ÷ÊÇһЩС³ÌÐò£¬ÔÚ¶ÔÈý½ÇÐνøÐйâÕ¤»¯²Ù×÷ʱÔËÐС£ÕâÔÚäÖȾÏñËØµÄ·½·¨ÉϸøÁËÓû§¸ü¸ßÒ»¼¶µÄÁé»îÐÔ¡£

ÏñËØ×ÅÉ«Æ÷°üº¬ÓÉASCIIÎı¾×é³ÉµÄÏñËØ×ÅÉ«Æ÷Ö¸Áî¡£ËãÊõÖ¸Áî¿ÉÒÔÓÃÀ´½øÐÐÂþ·´ÉäºÍ/»ò¾µÃæ·´Éä¹âÕÕ¼ÆËã¡£ÎÆÀíѰַָÁîÌṩÁ˶àÖÖ¶ÁÈ¡ºÍÓ¦ÓÃÎÆÀíÊý¾ÝµÄ²Ù×÷¡£×ÅÉ«Æ÷¾ßÓÐÕâÑùµÄ¹¦ÄÜ£¬¿ÉÒÔ¸øÑÕÉ«·ÖÁ¿ÉèÖÃÑÚÂëÒÔ¼°½»»»ÑÕÉ«·ÖÁ¿¡£×ÅÉ«Æ÷µÄÕýÎÄ¿´ÆðÀ´ÓеãÏñ»ã±àÓïÑÔ£¬ËüÓÃDirect3DÀ©Õ¹£¨D3DX£©½øÐлã±à£¬ÊäÈë¿ÉÒÔÊÇÎı¾×Ö·û´®»òÊÇÎļþ¡£»ã±àÆ÷µÄÊä³öÊÇһϵÁвÙ×÷Â룬ӦÓóÌÐò¿ÉÒÔͨ¹ýIDirect3DDevice9::CreatePixelShader·½·¨°ÑÕâЩ²Ù×÷ÂëÌṩ¸øDirect3D¡£ÏñËØ×ÅÉ«Æ÷Óм¸¸ö°æ±¾£¬Çë²ÎÔÄ×ÅÉ«Æ÷²Î¿¼Êֲᡣ

Ö¸ÁµÄ±ä»¯·Ç³£¿ì¡£Îª±ÜÃâÔÚʹÓÃÖ¸Áîʱ³öÏÖÎÊÌ⣬Çë²éÔÄÓ²¼þ¿ª·¢É̵ÄÍøÕ¾¡£»òÕߣ¬Ò²¿ÉÒÔʹÓø߼¶×ÅÉ«Æ÷ÓïÑÔ£¬ÕâÑù¾Í¿ÉÒԵõ½ÓÉDirect3DÀ©Õ¹£¨D3DX£©±àÒëµÃµ½µÄ×ÅÉ«Æ÷Ö¸Áî¡£


´´½¨ÏñËØ×ÅÉ«Æ÷


±¾Ê¾ÀýÓÃÏñËØ×ÅÉ«Æ÷¶ÔÒ»¸öËıßÐεÄÂþ·´ÉäÉ«½øÐиßÂåµÂ²åÖµ¡£Ê¾ÀýÏÔʾÁË×ÅÉ«Æ÷ÎļþµÄÄÚÈÝÒÔ¼°Ó¦ÓóÌÐòÖÐËùÐèµÄ´úÂë¡£

ÒÔÏÂÊÇ´´½¨ÏñËØ×ÅÉ«Æ÷ËùÐèµÄ²½Ö裺

Èç¹û¶ÁÕßÒѾ­ÖªµÀÈçºÎ¹¹½¨²¢ÔËÐÐDirect3DʾÀý£¬ÄÇô¿ÉÒÔ´Ó±¾Ê¾ÀýÖи´ÖÆ´úÂë²¢Õ³Ìùµ½ÒÑÓеÄÓ¦ÓóÌÐòÖС£

µÚ1²½

Òª¼ì²é¶ÔÏñËØ×ÅÉ«Æ÷µÄÖ§³Ö£¬Ó¦¸ÃʹÓÃÒÔÏ´úÂë¡£Õâ¸öÀý×Ó¼ì²é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µÄ°æ±¾£¬µ÷Óûá³É¹¦¡£Èç¹ûÓ²¼þ²»Ö§³Ö±»²âÊÔµÄ×ÅÉ«Æ÷°æ±¾£¬ÄÇôӦÓóÌÐò½«²»µÃ²»Í˶øÊ¹ÓñðµÄäÖȾ·½·¨£¨Ò²Ðí¿ÉÒÔʹÓÃÒ»¸ö½ÏµÍ°æ±¾µÄ×ÅÉ«Æ÷£©¡£

µÚ2²½

Õâ¸öʾÀýʹÓÃÁËÒ»¸öËıßÐΣ¬ÓÉÁ½¸öÈý½ÇÐÎ×é³É¡£Ã¿¸ö¶¥µãµÄÊý¾Ý½á¹¹°üº¬ÁËλÖúÍÂþ·´ÉäÉ«Êý¾Ý¡£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 ×óÉÏ

};

µÚ3²½

Õâ¸ö×ÅÉ«Æ÷°Ñ¾­¹ý¸ßÂåµÂ²åÖµµÄÂþ·´ÉäÉ«Êý¾Ý¸´ÖƵ½Êä³öÏñËØ¡£×ÅÉ«Æ÷ÎļþPixelShader.txtÈçÏÂËùʾ£º

ps_1_1        // °æ±¾Ö¸Áî

mov r0,v0     // °Ñ¶¥µãµÄÂþ·´ÉäÉ«¸´ÖƵ½Êä³ö¼Ä´æÆ÷¡£

ÏñËØ×ÅÉ«Æ÷ÎļþµÄµÚÒ»ÌõÖ¸ÁîÉùÃ÷ÁËÏñËØ×ÅÉ«Æ÷µÄ°æ±¾£¬´Ë´¦Îª1.1¡£

µÚ¶þÌõÖ¸Áî°ÑÑÕÉ«¼Ä´æÆ÷(v0)µÄÄÚÈݸ´ÖƵ½Êä³ö¼Ä´æÆ÷(r0)¡£ÒòΪÔÚµÚ1²½ÖÐÉùÃ÷µÄ¶¥µãÊý¾ÝÒѾ­°üº¬Á˾­¹ý²åÖµµÄÂþ·´ÉäÉ«£¬ËùÒÔÑÕÉ«¼Ä´æÆ÷°üº¬Á˶¥µãµÄÂþ·´ÉäÉ«¡£Êä³ö¼Ä´æÆ÷¾ö¶¨äÖȾĿ±êʹÓõÄÏñËØÑÕÉ«£¨ÒòΪ±¾ÀýÖÐûÓиü¶àµÄ´¦Àí£¬ÈçÎí£¬ËùÒÔÊä³ö¼Ä´æÆ÷¾ÍÊÇ×îÖÕµÄÏñËØÑÕÉ«£©¡£

µÚ4²½

ÏñËØ×ÅÉ«Æ÷ÓÉÏñËØ×ÅÉ«Æ÷Ö¸Áî´´½¨¡£±¾ÀýÖУ¬Ö¸Áî±»°üº¬ÔÚÒ»¸öµ¥¶ÀµÄÎļþÖС£Ö¸ÁîÒ²¿ÉÒÔ±»°üº¬ÔÚÒ»¸öÎı¾×Ö·û´®ÖС£

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ÓÃÀ´¶ÔËü½øÐÐÒýÓá£

µÚ5²½

³ýÁËÓÃÏñËØ×ÅÉ«Æ÷¾ä±úÀ´ÉèÖÃ×ÅÉ«Æ÷Í⣬äÖȾÊä³öÏñËØµÄ¹ý³ÌºÍʹÓù̶¨¹¦ÄÜÁ÷Ë®ÏßÀàËÆ¡£

// ÔÚ±¾ÀýÖйرչØÕÕ¡£Ëü²»»á¶Ô×îÖÕÏñËØµÄÑÕÉ«²úÉúÓ°Ïì¡£

// ÏñËØÑÕÉ«ÍêÈ«Óɾ­¹ý²åÖµµÄ¶¥µãÑÕÉ«¾ö¶¨¡£

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;