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

天行健 君子當自強而不息

高級著色語言HLSL入門(3)

新建網頁 1

SetMatrixTranspose—Used to set a transposed 4 × 4 matrix. Sample call:

               
       

        D3DXMATRIX M();

       

        D3DXMatrixTranspose(&M, &M);

       

        ConstTable->SetMatrixTranspose(Device, handle, &M);

Sets a transposed matrix.

HRESULT SetMatrixTranspose(  LPDIRECT3DDEVICE9 pDevice,  D3DXHANDLE hConstant,  CONST D3DXMATRIX* pMatrix);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.
   
hConstant
   
[in] Unique identifier to the matrix of constants.   
   
pMatrix
   
[in] Pointer to a transposed matrix.

Return Values

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

 

SetMatrixTransposeArray—Used to set an array of 4 × 4 transposed matrices. Sample call:

               
       

        D3DXMATRIX M[4];

       

        //         ...Initialize matrices and transpose them.

       

        ConstTable->SetMatrixTransposeArray(Device, handle, M, 4);

Sets an array of transposed matrices.

HRESULT SetMatrixTransposeArray(  LPDIRECT3DDEVICE9 pDevice,  D3DXHANDLE hConstant, 
 CONST D3DXMATRIX* pMatrix,  UINT Count);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.
   
hConstant
   
[in] Unique identifier to the array of matrix     constants.
   
pMatrix
   
[in] Array of transposed matrices.
   
Count
   
[in] Number of matrices in the array.

Return Values

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

 

SetMatrixTransposePointerArray—Used to set an array of pointers to 4 × 4 transposed matrices. Sample call:

               
       

        D3DXMATRIX* M[4];

       

        //         ...Allocate,initialize matrix pointers and transpose them.

       

        ConstTable->SetMatrixTransposePointerArray(Device, handle, M, 4);

Sets an array of pointers to transposed matrices.

HRESULT SetMatrixTransposePointerArray(  LPDIRECT3DDEVICE9 pDevice,  D3DXHANDLE hConstant,  
CONST D3DXMATRIX** ppMatrix,  UINT Count);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.
   
hConstant
   
[in] Unique identifier to the array of matrix     constants.
   
ppMatrix
   
[in] Array of pointers to transposed matrices.   
   
Count
   
[in] Number of matrices in the array.

Return Values

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

Remarks

A transposed matrix contains column-major data; that is, each vector is contained in a column.

 

SetVector—Used to set a variable of type D3DXVECTOR4. Sample call:

               
       

        D3DXVECTOR4 v(1.0f, 2.0f, 3.0f, 4.0f);

       

        ConstTable->SetVector(Device, handle, &v);

Sets a 4D vector.

HRESULT SetVector(  LPDIRECT3DDEVICE9 pDevice,  D3DXHANDLE hConstant,  CONST D3DXVECTOR4* pVector);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.
   
hConstant
   
[in] Unique identifier to the vector constant.   
   
pVector
   
[in] Pointer to a 4D vector.

Return Values

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

 

SetVectorArray—Used to set a variable that is a vector array. Sample call:

               
       

        D3DXVECTOR4 v[3];

       

        //         ...Initialize vectors

       

        ConstTable->SetVectorArray(Device, handle, v, 3);

Sets an array of 4D vectors.

HRESULT SetVectorArray(  LPDIRECT3DDEVICE9 pDevice,  D3DXHANDLE hConstant,  
CONST D3DXVECTOR4* pVector,  UINT Count);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.
   
hConstant
   
[in] Unique identifier to the array of vector     constants.
   
pVector
   
[in] Array of 4D vectors.
   
Count
   
[in] Number of vectors in the array.

Return Values

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

 

SetValue—Used to set an arbitrarily sized type, such as a structure. In the sample call, we use SetValue to set a D3DXMATRIX:

               
       

        D3DXMATRIX M();

       

        ConstTable->SetValue(Device, handle, (void*)&M, sizeof(M));

Sets the contents of the buffer to the constant table.

HRESULT SetValue(  LPDIRECT3DDEVICE9 pDevice,  D3DXHANDLE hConstant,  LPCVOID pData,  UINT Bytes);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.
   
hConstant
   
[in] Unique identifier to a constant.
   
pData
   
[in] Buffer containing data.
   
Bytes
   
[in] Size of the buffer, in bytes.

Return Values

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

 

16.2.1.3 設置常量默認值

下一個方法就是設置常量的默認值,這些默認值在聲明時初始化。這個方法應該在應用程序建立(setup)期間被調用一次 (called once)。

               
       

        HRESULT         ID3DXConstantTable::SetDefaults(

       

             LPDIRECT3DDEVICE9         pDevice

       

        );

pDevice——關聯到常量表的設備的指針。

Sets the constants to their default values. The default values are declared in the variable declarations in the shader.

HRESULT SetDefaults(  LPDIRECT3DDEVICE9 pDevice);

Parameters

   
pDevice
   
[in] Pointer to an IDirect3DDevice9 interface,     representing the device associated with the constant table.

Return Values

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

 

16.2.2 編譯HLSL著色器

我們可以編譯一個著色器——用我們已保存的著色器的文本文件——使用下列函數:

               
       

        HRESULT         D3DXCompileShaderFromFile(

       

             LPCSTR                       pSrcFile,

       

             CONST D3DXMACRO*             pDefines,

       

             LPD3DXINCLUDE                pInclude,

       

             LPCSTR                       pFunctionName,

       

             LPCSTR                       pTarget,

       

             DWORD                        Flags,

       

             LPD3DXBUFFER*                ppShader,

       

             LPD3DXBUFFER*                ppErrorMsgs,

       

             LPD3DXCONSTANTTABLE*         ppConstantTable

       

        );

 

pSrcFile——要編譯的包含著色器源代碼的文本文件的文件名

pDefines——參數可選,這里指定為空。

pInclude——ID3DXInclude接口指針。這個接口被設計成由應用程序實現,所以我們可以重載默認include的行為。通常默認行為就可以了,而且我們可以通過將其指定為空忽略此參數。

pFunctionName——指定入口點函數名的字符串。例如,如果著色器的入口點函數叫做Main,我們可以給此參數傳遞“Main”。

pTarget——指定要編譯成的HLSL著色器源文件的版本的字符串。有效的頂點著色器版本是:vs_1_1, vs_2_0, vs_2_sw。有效的像素著色器版本是2.0,我們可以給此參數傳遞vs_2_0。

備注:有編譯不同版本著色器的能力,是HLSL與匯編語言比的主要優勢。用HLSL我們只需為需要的目標簡單的重新編譯,便可快速移植著色器到不同的版本。使用匯編,我們可能需要手動移植代碼。

Flags——可選的編譯標記,指定為0標識沒有標記。有效的選項是:

D3DXSHADER_DEBUG——通知編譯器寫入調試信息

D3DXSHADER_SKIPVALIDATION——通知編譯器不要做任何代碼檢查。此項僅用于你已知著色器能夠工作時。

D3DXSHADER_SKIPOPTIMIZATION——通知編譯器不要執行任何代碼優化。實踐中,這個選項應該僅用于調試,因為這種情況下你不希望編譯器以任何方式修改代碼。

ppShader——返回已編譯的著色器代碼的ID3DXBuffer指針。這個已編譯過的著色器代碼將作為另一個實際創建頂點/像素著色器函數的參數。

ppErrorMsgs——返回包含錯誤碼和錯誤消息字符串的ID3DXBuffer指針

ppConstantTable——返回包含此著色器常量表數據的ID3DXConstantTable指針

Compile a shader file.

HRESULT D3DXCompileShaderFromFile(  LPCSTR pSrcFile,  CONST D3DXMACRO* pDefines,  LPD3DXINCLUDE pInclude,  
LPCSTR pFunctionName,  LPCSTR pProfile,  DWORD Flags,  LPD3DXBUFFER* ppShader, 
LPD3DXBUFFER *
ppErrorMsgs,  LPD3DXCONSTANTTABLE * ppConstantTable);

Parameters

   
pSrcFile
   
[in] Pointer to a string that specifies the     filename.
   
pDefines
   
[in] An optional NULL terminated array of     D3DXMACRO structures. This value may be NULL.
   
pInclude
   
[in] Optional interface pointer, ID3DXInclude, to     use for handling #include directives. If this value is NULL, #includes will     either be honored when compiling from a file or will cause an error when     compiled from a resource or memory.
   
pFunctionName
   
[in] Pointer to the shader entry point function     where execution begins.
   
pProfile
   
[in] Pointer to a shader profile which determines     the shader instruction set. See D3DXGetVertexShaderProfile or     D3DXGetPixelShaderProfile for a list of the profiles available.
   
Flags
   
[in] Compile options identified by various flags.     The Direct3D 10 HLSL compiler is now the default. See D3DXSHADER Flags for     details.
   
ppShader
   
[out] Returns a buffer containing the created     shader. This buffer contains the compiled shader code, as well as any     embedded debug and symbol table information.
   
ppErrorMsgs
   
[out] Returns a buffer containing a listing of     errors and warnings that were encountered during the compile. These are the     same messages the debugger displays when running in debug mode. This value     may be NULL.
   
ppConstantTable
   
[out] Returns an ID3DXConstantTable interface,     which can be used to access shader constants. This value may be NULL.    

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_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

這里是一個調用D3DXCompileShaderFromFile的例子:

        // compile shader
   

        ID3DXBuffer*    shader_buffer;
        ID3DXBuffer*    error_buffer;
   
        HRESULT hr = D3DXCompileShaderFromFile("VertexShader.cxx", NULL, NULL, "main", "vs_1_1", D3DXSHADER_DEBUG,
                                               &shader_buffer, &error_buffer, &g_constant_table);
   
        
// output any error messages
   
    if(error_buffer)
        {
            MessageBox(NULL, (
char*)error_buffer->GetBufferPointer(), "ERROR", MB_OK);
            safe_release<ID3DXBuffer*>(error_buffer);
        }
   
        
if(FAILED(hr))
        {
            MessageBox(NULL, "D3DXCreateEffectFromFile() - FAILED", "ERROR", MB_OK);
            
return false;
        }

示例截圖:


執行程序:

      /**************************************************************************************************
      Demonstrates transforming an object by the view and projection matrices, and setting 
      the vertex color using a vertex shader.  
   
      You will have to switch to the REF device if your hardware does not support shaders.  
      Or you can use software vertex processing: D3DCREATE_SOFTWARE_VERTEXPROCESSING. 
     **************************************************************************************************/

   
    #include "d3dUtility.h"
   
    #pragma warning(disable : 4100)
   
   
const int WIDTH  = 640;
   
const int HEIGHT = 480;
   
    IDirect3DDevice9*        g_device;
    ID3DXMesh*                g_teapot;
    IDirect3DVertexShader9* g_vertex_shader;
    ID3DXConstantTable*        g_constant_table;
   
    D3DXHANDLE                g_view_proj_handle;
    D3DXMATRIX                g_proj_matrix;
   
   
    ////////////////////////////////////////////////////////////////////////////////////////////////////
   

   
bool setup()
    {    
        D3DXCreateTeapot(g_device, &g_teapot, NULL);
   
        
// compile shader
   

        ID3DXBuffer*    shader_buffer;
        ID3DXBuffer*    error_buffer;
   
        HRESULT hr = D3DXCompileShaderFromFile("VertexShader.cxx", NULL, NULL, "main", "vs_1_1", D3DXSHADER_DEBUG,
                                               &shader_buffer, &error_buffer, &g_constant_table);
   
        
// output any error messages
   
    if(error_buffer)
        {
            MessageBox(NULL, (
char*)error_buffer->GetBufferPointer(), "ERROR", MB_OK);
            safe_release<ID3DXBuffer*>(error_buffer);
        }
   
        
if(FAILED(hr))
        {
            MessageBox(NULL, "D3DXCreateEffectFromFile() - FAILED", "ERROR", MB_OK);
            
return false;
        }
   
        hr = g_device->CreateVertexShader((DWORD*) shader_buffer->GetBufferPointer(), &g_vertex_shader);
   
        
if(FAILED(hr))
        {
            MessageBox(NULL, "CreateVertexShader - FAILED", "ERROR", MB_OK);
            
return false;
        }
   
        safe_release<ID3DXBuffer*>(shader_buffer);
   
        g_view_proj_handle = g_constant_table->GetConstantByName(NULL, "g_view_proj_matrix");
        g_constant_table->SetDefaults(g_device);
   
        
// set the projection matrix
   
        D3DXMatrixPerspectiveFovLH(&g_proj_matrix, D3DX_PI/4.0f, (float)WIDTH/HEIGHT, 1.0f, 1000.0f);
        
        g_device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
        
        
return true;
    }
   
   
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
   

   
void cleanup()
    {    
        safe_release<ID3DXMesh*>(g_teapot);
        safe_release<IDirect3DVertexShader9*>(g_vertex_shader);
        safe_release<ID3DXConstantTable*>(g_constant_table);
    }
   
   
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
   

   
bool display(float time_delta)
    {    
        
static float angle  = (3.0f * D3DX_PI) / 2.0f;
        
static float height = 5.0f;
   
        
if(GetAsyncKeyState(VK_LEFT) & 0x8000f)
            angle -= 0.5f * time_delta;
   
        
if(GetAsyncKeyState(VK_RIGHT) & 0x8000f)
            angle += 0.5f * time_delta;
   
        
if(GetAsyncKeyState(VK_UP) & 0x8000f)
            height += 5.0f * time_delta;
   
        
if(GetAsyncKeyState(VK_DOWN) & 0x8000f)
            height -= 5.0f * time_delta;
   
        D3DXVECTOR3 position(cosf(angle) * 10.0f, height, sinf(angle) * 10.0f);
        D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
        D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
   
        D3DXMATRIX view_matrix;
        D3DXMatrixLookAtLH(&view_matrix, &position, &target, &up);
        
        D3DXMATRIX view_proj_matrix = view_matrix * g_proj_matrix;
        g_constant_table->SetMatrix(g_device, g_view_proj_handle, &view_proj_matrix);
        
        
// render now
   

        g_device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
   
        g_device->BeginScene();
   
        g_device->SetVertexShader(g_vertex_shader);
        g_teapot->DrawSubset(0);
        
        g_device->EndScene();
   
        g_device->Present(NULL, NULL, NULL, NULL);
   
        
return true;
    }
   
   
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
   

    LRESULT CALLBACK wnd_proc(HWND hwnd, UINT msg, WPARAM word_param, LPARAM long_param)
    {
        
switch(msg)
        {
        
case WM_DESTROY:
            PostQuitMessage(0);
            
break;
   
        
case WM_KEYDOWN:
            
if(word_param == VK_ESCAPE)
                DestroyWindow(hwnd);
   
            
break;
        }
   
        
return DefWindowProc(hwnd, msg, word_param, long_param);
    }
   
   
    ///////////////////////////////////////////////////////////////////////////////////////////////////////
   

   
int WINAPI WinMain(HINSTANCE inst, HINSTANCE, PSTR cmd_line, int cmd_show)
    {
        
if(! init_d3d(inst, WIDTH, HEIGHT, true, D3DDEVTYPE_HAL, &g_device))
        {
            MessageBox(NULL, "init_d3d() - failed.", 0, MB_OK);
            
return 0;
        }
   
        
if(! setup())
        {
            MessageBox(NULL, "Steup() - failed.", 0, MB_OK);
            
return 0;
        }
   
        enter_msg_loop(display);
   
        cleanup();
        g_device->Release();
   
        
return 0;
    }

下載源程序


posted on 2008-04-05 16:45 lovedday 閱讀(3213) 評論(0)  編輯 收藏 引用

公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产亚洲观看| 一区二区冒白浆视频| 亚洲人体偷拍| 91久久久久久国产精品| 亚洲娇小video精品| 亚洲精品一区二区三区福利| 日韩亚洲欧美一区| 日韩天堂在线观看| 亚洲视频大全| 久久精品国产v日韩v亚洲 | 午夜精品久久久久久99热软件| 亚洲最黄网站| 久久riav二区三区| 久久一区精品| 91久久香蕉国产日韩欧美9色 | 亚洲精品日韩精品| 一本在线高清不卡dvd| 亚洲欧美资源在线| 另类欧美日韩国产在线| 欧美日韩免费一区二区三区视频| 国产精品美女诱惑| 亚洲高清久久网| 午夜精品www| 欧美激情无毛| 夜夜嗨av色综合久久久综合网| 欧美一区在线直播| 欧美日韩一区二区国产| 国产真实精品久久二三区| 中文在线不卡视频| 麻豆九一精品爱看视频在线观看免费| 亚洲人人精品| 久久久久久久综合日本| 国产精品v日韩精品| 久久久久国产精品www| 亚洲午夜伦理| 久久一区视频| 在线天堂一区av电影| 久久综合国产精品| 国产女主播一区| 亚洲精品1区2区| 久久久久国色av免费观看性色| 91久久视频| 麻豆精品视频在线| 国产一区二区久久| 午夜精品一区二区三区在线| 亚洲国产欧美另类丝袜| 欧美在线视频播放| 国产伦精品一区二区三区| 宅男噜噜噜66一区二区| 亚洲高清毛片| 久久久噜噜噜久噜久久| 国产视频不卡| 性欧美超级视频| 艳妇臀荡乳欲伦亚洲一区| 欧美日本亚洲韩国国产| 亚洲激情在线| 亚洲国产精品久久久久秋霞影院 | 国产私拍一区| 欧美一区二区三区四区视频| 在线视频精品一区| 国产精品www994| 亚洲视频你懂的| 99re热这里只有精品免费视频| 欧美jizzhd精品欧美喷水| 在线日韩中文字幕| 模特精品在线| 欧美激情在线观看| 一本一本久久a久久精品综合妖精| 欧美成人激情视频免费观看| 蜜臀av一级做a爰片久久| 亚洲国产综合在线| 亚洲人成网站精品片在线观看| 欧美激情综合五月色丁香小说 | 美日韩精品视频| 久久综合精品一区| 日韩手机在线导航| 亚洲午夜电影| 国产一区二区电影在线观看| 久久亚洲二区| 欧美成人免费va影院高清| 一区二区三欧美| 亚洲图片欧美午夜| 一色屋精品视频在线观看网站| 欧美顶级艳妇交换群宴| 欧美日韩影院| 久久久久久97三级| 欧美高清视频一区二区三区在线观看| 一区二区三区国产在线| 午夜视频久久久久久| 久久久久国色av免费观看性色| 久久大综合网| 久久性天堂网| 一区二区三区日韩| 性欧美video另类hd性玩具| 亚洲第一精品夜夜躁人人爽| 亚洲乱码国产乱码精品精天堂 | 欧美精品一区二区三区四区| 亚洲一区二区三区四区中文| 欧美影院视频| 亚洲一区三区在线观看| 久久久久99| 亚洲在线免费| 美女脱光内衣内裤视频久久影院| 亚洲一区二区精品| 久久久久亚洲综合| 亚洲一区二区三区视频| 久久久综合香蕉尹人综合网| 亚洲免费在线播放| 欧美激情欧美激情在线五月| 久久精品主播| 欧美视频一区在线观看| 欧美大片va欧美在线播放| 国产精品―色哟哟| 99re66热这里只有精品4| 亚洲国产欧美一区| 欧美在线1区| 午夜精品久久久久影视| 欧美日韩精品欧美日韩精品| 蜜臀a∨国产成人精品| 国产精品三区www17con| 亚洲精品午夜精品| 亚洲精品视频免费在线观看| 久久精品二区三区| 午夜精品一区二区三区在线| 欧美日韩mv| 欧美国产精品中文字幕| 国产午夜亚洲精品羞羞网站| 亚洲少妇一区| 亚洲一区二区三区免费在线观看| 欧美成人一品| 亚洲高清激情| 亚洲人人精品| 欧美国产日韩在线| 亚洲成人在线网| 精品粉嫩aⅴ一区二区三区四区| 午夜精品美女久久久久av福利| 亚洲一品av免费观看| 欧美日韩在线精品| 日韩网站在线| 亚洲欧美影院| 国产精品成人观看视频国产奇米| 日韩视频国产视频| 亚洲一区综合| 国产精品永久在线| 久久高清国产| 欧美电影免费观看高清| 亚洲美女av黄| 欧美日韩中文字幕综合视频| 国产精品99久久久久久久女警| 亚洲视频精品| 国产噜噜噜噜噜久久久久久久久| 午夜精品久久久久久久久久久久久 | 久久精品一本| 伊大人香蕉综合8在线视| 欧美一区二区三区视频免费播放| 久久精品国产综合| 亚洲高清三级视频| 欧美乱大交xxxxx| 亚洲一区二区三区精品动漫| 欧美在线视频网站| 亚洲电影在线看| 欧美精品一区二区久久婷婷| 99天天综合性| 久久久久国色av免费观看性色| 亚洲第一中文字幕| 欧美日韩精品二区第二页| 日韩一二在线观看| 久久久久中文| 妖精成人www高清在线观看| 国产精品久久77777| 久久激情五月婷婷| 日韩午夜中文字幕| 老司机凹凸av亚洲导航| 亚洲小说欧美另类社区| 精品成人一区二区| 欧美日韩免费精品| 久久亚洲影院| 亚洲一区二区三区四区五区午夜 | 久久综合精品一区| 亚洲人成高清| 国产精品一区在线观看| 欧美国产日本高清在线| 亚洲综合色丁香婷婷六月图片| 久久伊人一区二区| 亚洲欧美日韩国产中文在线| 亚洲成色最大综合在线| 国产精品久久久久999| 久久久久国色av免费观看性色| 在线一区亚洲| 欧美韩日一区二区| 久久久亚洲一区| 亚洲欧美综合网| 中文一区字幕| 99国产精品99久久久久久粉嫩| 国内精品模特av私拍在线观看| 欧美三区免费完整视频在线观看| 美日韩精品视频| 久久久精品国产免费观看同学| 亚洲在线视频免费观看| 99ri日韩精品视频|