亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shadowvolume.cpp

?? VC中使用C#作為腳本引擎編程
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
//--------------------------------------------------------------------------------------
// File: ShadowVolume.cpp
//
// Starting point for new Direct3D applications
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//--------------------------------------------------------------------------------------
#pragma unmanaged

#include "dxstdafx.h"
#include "resource.h"

//#define DEBUG_VS   // Uncomment this line to debug vertex shaders 
//#define DEBUG_PS   // Uncomment this line to debug pixel shaders 

// Script functions
HRESULT InitializeScriptEngine();
HRESULT LoadScript(LPWSTR pScriptFileName);
HRESULT UpdatePlayerPosition(double appTime, float __nogc* pX, float __nogc* pY, float __nogc* pZ);
HRESULT UpdatePlayerRotationX(double appTime, D3DXMATRIX __nogc* pMatrix);
HRESULT UpdatePlayerRotationY(double appTime, D3DXMATRIX __nogc* pMatrix);
HRESULT UpdatePlayerRotationZ(double appTime, D3DXMATRIX __nogc* pMatrix);

#define DEFMESHFILENAME L"dwarf\\dwarf.x"
#define MAX_NUM_LIGHTS 6
#define ADJACENCY_EPSILON 0.0001f
#define EXTRUDE_EPSILON 0.1f
#define AMBIENT 0.10f

enum RENDER_TYPE { RENDERTYPE_SCENE, RENDERTYPE_SHADOWVOLUME, RENDERTYPE_COMPLEXITY };

D3DXVECTOR4 g_vShadowColor[MAX_NUM_LIGHTS] =
{
    D3DXVECTOR4( 0.0f, 1.0f, 0.0f, 0.2f ),
    D3DXVECTOR4( 1.0f, 1.0f, 0.0f, 0.2f ),
    D3DXVECTOR4( 1.0f, 0.0f, 0.0f, 0.2f ),
    D3DXVECTOR4( 0.0f, 0.0f, 1.0f, 0.2f ),
    D3DXVECTOR4( 1.0f, 0.0f, 1.0f, 0.2f ),
    D3DXVECTOR4( 0.0f, 1.0f, 1.0f, 0.2f )
};


struct LIGHTINITDATA
{
    D3DXVECTOR3 Position;
    D3DXVECTOR4 Color;
public:
    LIGHTINITDATA() { }
    LIGHTINITDATA( D3DXVECTOR3 P, D3DXVECTOR4 C )
    {
        Position = P;
        Color = C;
    }
};
LIGHTINITDATA g_LightInit[MAX_NUM_LIGHTS] =
{
    LIGHTINITDATA( D3DXVECTOR3( -2.0f, 3.0f, -3.0f ), D3DXVECTOR4( 15.0f, 15.0f, 15.0f, 1.0f ) ),
#if MAX_NUM_LIGHTS > 1
    LIGHTINITDATA(  D3DXVECTOR3( 2.0f, 3.0f, -3.0f ), D3DXVECTOR4( 15.0f, 15.0f, 15.0f, 1.0f ) ),
#endif
#if MAX_NUM_LIGHTS > 2
    LIGHTINITDATA(  D3DXVECTOR3( -2.0f, 3.0f, 3.0f ), D3DXVECTOR4( 15.0f, 15.0f, 15.0f, 1.0f ) ),
#endif
#if MAX_NUM_LIGHTS > 3
    LIGHTINITDATA(  D3DXVECTOR3( 2.0f, 3.0f, 3.0f ), D3DXVECTOR4( 15.0f, 15.0f, 15.0f, 1.0f ) ),
#endif
#if MAX_NUM_LIGHTS > 4
    LIGHTINITDATA(  D3DXVECTOR3( -2.0f, 3.0f, 0.0f ), D3DXVECTOR4( 15.0f, 0.0f, 0.0f, 1.0f ) ),
#endif
#if MAX_NUM_LIGHTS > 5
    LIGHTINITDATA(  D3DXVECTOR3( 2.0f, 3.0f, 0.0f ), D3DXVECTOR4( 0.0f, 0.0f, 15.0f, 1.0f ) )
#endif
};

struct POSTPROCVERT
{
    float x, y, z;
    float rhw;

    const static D3DVERTEXELEMENT9 Decl[2];
};

const D3DVERTEXELEMENT9 POSTPROCVERT::Decl[2] =
{
    { 0, 0, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITIONT, 0 },
    D3DDECL_END()
};


struct SHADOWVERT
{
    D3DXVECTOR3 Position;
    D3DXVECTOR3 Normal;

    const static D3DVERTEXELEMENT9 Decl[3];
};

const D3DVERTEXELEMENT9 SHADOWVERT::Decl[3] =
{
    { 0, 0,  D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
    { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,   0 },
    D3DDECL_END()
};


struct MESHVERT
{
    D3DXVECTOR3 Position;
    D3DXVECTOR3 Normal;
    D3DXVECTOR2 Tex;

    const static D3DVERTEXELEMENT9 Decl[4];
};

const D3DVERTEXELEMENT9 MESHVERT::Decl[4] =
{
    { 0, 0,  D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
    { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL,   0 },
    { 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
    D3DDECL_END()
};


struct CEdgeMapping
{
    int m_anOldEdge[2];  // vertex index of the original edge
    int m_aanNewEdge[2][2]; // vertex indexes of the new edge
                            // First subscript = index of the new edge
                            // Second subscript = index of the vertex for the edge

public:
    CEdgeMapping()
    {
        FillMemory( m_anOldEdge, sizeof(m_anOldEdge), -1 );
        FillMemory( m_aanNewEdge, sizeof(m_aanNewEdge), -1 );
    }
};


struct CLight
{
    D3DXVECTOR3 m_Position;  // Light position
    D3DXVECTOR4 m_Color;     // Light color
    D3DXMATRIXA16 m_mWorld;  // World transform
};


//--------------------------------------------------------------------------------------
// Global variables
//--------------------------------------------------------------------------------------
ID3DXFont*              g_pFont = NULL;         // Font for drawing text
ID3DXSprite*            g_pTextSprite = NULL;   // Sprite for batching draw text calls
ID3DXEffect*            g_pEffect = NULL;       // D3DX effect interface
IDirect3DTexture9*      g_pDefaultTex = NULL;   // Default texture for faces without one
IDirect3DVertexDeclaration9* g_pMeshDecl = NULL; // Vertex declaration for the meshes
IDirect3DVertexDeclaration9* g_pShadowDecl = NULL;// Vertex declaration for the shadow volume
IDirect3DVertexDeclaration9* g_pPProcDecl = NULL;// Vertex declaration for post-process quad rendering
CFirstPersonCamera      g_Camera;               // Viewer's camera
CModelViewerCamera      g_MCamera;              // Camera for mesh control
CModelViewerCamera      g_LCamera;              // Camera for easy light movement control
D3DXHANDLE              g_hRenderShadow;        // Technique handle for rendering shadow
D3DXHANDLE              g_hShowShadow;          // Technique handle for showing shadow volume
D3DXHANDLE              g_hRenderScene;         // Technique handle for rendering scene
D3DXMATRIXA16           g_mWorldScaling;        // Scaling to apply to mesh
bool                    g_bShowHelp = true;     // If true, it renders the UI control text
bool                    g_bShowShadowVolume = false;  // Whether the shadow volume is visibly shown.
RENDER_TYPE             g_RenderType = RENDERTYPE_SCENE;  // Type of rendering to perform
int                     g_nNumLights = 2;       // Number of active lights
CDXUTMesh               g_Background[2];        // Background meshes
D3DXMATRIXA16           g_mWorldBack[2];        // Additional scaling and translation for background meshes
int                     g_nCurrBackground = 0;  // Current background mesh
CDXUTMesh               g_LightMesh;            // Mesh to represent the light source
CDXUTMesh               g_Mesh;                 // The mesh object
ID3DXMesh*              g_pShadowMesh = NULL;   // The shadow volume mesh
CDXUTDialogResourceManager g_DialogResourceManager; // manager for shared resources of dialogs
CD3DSettingsDlg         g_SettingsDlg;          // Device settings dialog
CDXUTDialog             g_HUD;                  // dialog for standard controls
CDXUTDialog             g_SampleUI;             // dialog for sample specific controls
D3DXMATRIXA16           g_mProjection;
CLight                  g_aLights[MAX_NUM_LIGHTS];  // Light objects
bool                    g_bLeftButtonDown = false;
bool                    g_bRightButtonDown = false;
bool                    g_bMiddleButtonDown = false;

//--------------------------------------------------------------------------------------
// UI control IDs
//--------------------------------------------------------------------------------------
#define IDC_TOGGLEFULLSCREEN    1
#define IDC_TOGGLEREF           3
#define IDC_CHANGEDEVICE        4
#define IDC_CHANGESCRIPT          5


//--------------------------------------------------------------------------------------
// Forward declarations 
//--------------------------------------------------------------------------------------
bool    CALLBACK IsDeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext );
bool    CALLBACK ModifyDeviceSettings( DXUTDeviceSettings* pDeviceSettings, const D3DCAPS9* pCaps, void* pUserContext );
HRESULT CALLBACK OnCreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext );
HRESULT CALLBACK OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext );
void    CALLBACK OnFrameMove( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
void    CALLBACK OnFrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext );
LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext );
void    CALLBACK KeyboardProc( UINT nChar, bool bKeyDown, bool bAltDown, void* pUserContext );
void    CALLBACK MouseProc( bool bLeftButtonDown, bool bRightButtonDown, bool bMiddleButtonDown, bool bSideButton1Down, bool bSideButton2Down, int nMouseWheelDelta, int xPos, int yPos, void* pUserContext );
void    CALLBACK OnGUIEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext );
void    CALLBACK OnLostDevice( void* pUserContext );
void    CALLBACK OnDestroyDevice( void* pUserContext );

void    InitApp();
HRESULT LoadMesh( IDirect3DDevice9* pd3dDevice, WCHAR* strFileName, ID3DXMesh** ppMesh );
void    RenderText();



//--------------------------------------------------------------------------------------
// Takes an array of CEdgeMapping objects, then returns an index for the edge in the
// table if such entry exists, or returns an index at which a new entry for the edge
// can be written.
// nV1 and nV2 are the vertex indexes for the old edge.
// nCount is the number of elements in the array.
// The function returns -1 if an available entry cannot be found.  In reality,
// this should never happens as we should have allocated enough memory.
int FindEdgeInMappingTable( int nV1, int nV2, CEdgeMapping *pMapping, int nCount )
{
    for( int i = 0; i < nCount; ++i )
    {
        // If both vertex indexes of the old edge in mapping entry are -1, then
        // we have searched every valid entry without finding a match.  Return
        // this index as a newly created entry.
        if( ( pMapping[i].m_anOldEdge[0] == -1 && pMapping[i].m_anOldEdge[1] == -1 ) ||

            // Or if we find a match, return the index.
            ( pMapping[i].m_anOldEdge[1] == nV1 && pMapping[i].m_anOldEdge[0] == nV2 ) )
        {
            return i;
        }
    }

    return -1;  // We should never reach this line
}


//--------------------------------------------------------------------------------------
// Takes a mesh and generate a new mesh from it that contains the degenerate invisible
// quads for shadow volume extrusion.
HRESULT GenerateShadowMesh( IDirect3DDevice9 *pd3dDevice, ID3DXMesh *pMesh, ID3DXMesh **ppOutMesh )
{
    HRESULT hr = S_OK;
    ID3DXMesh *pInputMesh;

    if( !ppOutMesh )
        return E_INVALIDARG;
    *ppOutMesh = NULL;

    // Convert the input mesh to a format same as the output mesh using 32-bit index.
    hr = pMesh->CloneMesh( D3DXMESH_32BIT, SHADOWVERT::Decl, pd3dDevice, &pInputMesh );
    if( FAILED( hr ) )
        return hr;

    DXUTTRACE( L"Input mesh has %u vertices, %u faces\n", pInputMesh->GetNumVertices(), pInputMesh->GetNumFaces() );

    // Generate adjacency information
    DWORD *pdwAdj = new DWORD[3 * pInputMesh->GetNumFaces()];
    DWORD *pdwPtRep = new DWORD[pInputMesh->GetNumVertices()];
    if( !pdwAdj || !pdwPtRep )
    {
        delete[] pdwAdj; delete[] pdwPtRep;
        pInputMesh->Release();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品超碰97尤物18| 日本视频在线一区| 一区二区三区免费在线观看| 伊人性伊人情综合网| 国产精品二区一区二区aⅴ污介绍| 中文字幕一区二区三区精华液| 国产精品理伦片| 亚洲人精品午夜| 日韩av一区二区三区| 国产成人超碰人人澡人人澡| 99久久免费精品高清特色大片| 欧美三区在线观看| 精品国产91久久久久久久妲己| 国产精品免费免费| 日本欧美大码aⅴ在线播放| 激情小说亚洲一区| 91国偷自产一区二区三区观看 | 韩国精品久久久| 成人国产精品免费观看视频| 欧美日韩电影一区| 中文字幕一区在线观看| 美国十次了思思久久精品导航| 成人福利在线看| 日韩免费观看高清完整版| 亚洲欧洲在线观看av| 六月丁香综合在线视频| 在线观看视频一区二区| 久久久久久久精| 日韩精品视频网站| 色哟哟日韩精品| 中文字幕第一区第二区| 亚洲成人tv网| 国产成人免费视频| 欧美成人一区二区| 一区二区激情视频| 一本久道久久综合中文字幕 | 精品久久人人做人人爱| 亚洲国产美女搞黄色| 99视频有精品| 亚洲欧洲性图库| 国产尤物一区二区在线| 日韩欧美中文一区二区| 亚洲视频一二区| 成人美女视频在线观看| 国产亚洲精品bt天堂精选| 久久99精品久久久久久久久久久久| 国产成人免费在线观看不卡| 国产亚洲一二三区| 国产精品正在播放| 欧美本精品男人aⅴ天堂| 日韩在线卡一卡二| 91 com成人网| 美女视频黄频大全不卡视频在线播放| 在线播放亚洲一区| 首页亚洲欧美制服丝腿| 欧美一区欧美二区| 日本v片在线高清不卡在线观看| 91天堂素人约啪| 亚洲精品va在线观看| 色综合天天综合网天天看片 | 欧美一区二区三区爱爱| 欧美aⅴ一区二区三区视频| 在线观看一区不卡| 图片区小说区国产精品视频| 欧美天堂亚洲电影院在线播放| 一区二区日韩av| 欧美精品v国产精品v日韩精品| 亚洲福利一区二区三区| 欧美一区二区精品在线| 黄一区二区三区| 中文字幕不卡在线观看| 色哟哟亚洲精品| 亚洲人成在线观看一区二区| 欧美专区在线观看一区| 亚洲久草在线视频| 91精品国产丝袜白色高跟鞋| 捆绑调教美女网站视频一区| 国产精品私人影院| 99久久伊人网影院| 亚洲欧洲精品一区二区精品久久久 | 久久精品网站免费观看| 不卡的av在线播放| 美日韩黄色大片| 亚洲黄网站在线观看| 国产亚洲欧洲一区高清在线观看| 欧美亚洲一区二区三区四区| 国产成人在线电影| 久草精品在线观看| 亚洲电影第三页| 亚洲男人的天堂一区二区 | 欧美性猛交xxxxxx富婆| 成人做爰69片免费看网站| 久久国产精品色婷婷| 舔着乳尖日韩一区| 亚洲欧美激情在线| 国产精品视频yy9299一区| 精品国产不卡一区二区三区| 欧美日韩激情一区| 欧日韩精品视频| 91麻豆国产福利在线观看| 成人一道本在线| 国产精品自拍毛片| 国产麻豆一精品一av一免费| 免费人成黄页网站在线一区二区 | 久久99久久精品| 人人狠狠综合久久亚洲| 亚洲h动漫在线| 亚洲国产一区视频| 亚洲国产日韩a在线播放性色| 亚洲激情欧美激情| 一区二区三区四区视频精品免费 | 日本v片在线高清不卡在线观看| 艳妇臀荡乳欲伦亚洲一区| 亚洲女爱视频在线| 亚洲色图丝袜美腿| 亚洲视频免费观看| 亚洲日本欧美天堂| 亚洲五码中文字幕| 日韩精品一二三四| 捆绑调教美女网站视频一区| 久久国产夜色精品鲁鲁99| 国内精品伊人久久久久av影院| 久久精品国产久精国产爱| 国产一区二区在线影院| 国产在线观看免费一区| 高清beeg欧美| 91小视频在线观看| 欧美色大人视频| 欧美一区二区三区视频在线| 日韩欧美国产电影| 久久久.com| 亚洲品质自拍视频网站| 亚洲成av人综合在线观看| 奇米影视一区二区三区小说| 国产一区二区三区在线观看免费| 国产黄人亚洲片| 91亚洲永久精品| 欧美一区二区性放荡片| 国产亚洲欧美激情| 一区二区三区美女| 麻豆91精品91久久久的内涵| 国产经典欧美精品| 色欧美片视频在线观看在线视频| 欧美日韩三级一区二区| 久久奇米777| 亚洲美女区一区| 青青草伊人久久| 成人a级免费电影| 欧美疯狂性受xxxxx喷水图片| 久久这里都是精品| 亚洲精品国产一区二区三区四区在线| 首页亚洲欧美制服丝腿| 成人h动漫精品一区二区| 欧美午夜影院一区| 26uuu精品一区二区在线观看| 最新中文字幕一区二区三区| 三级成人在线视频| 97超碰欧美中文字幕| 日韩午夜激情av| 亚洲精品久久7777| 粉嫩一区二区三区性色av| 欧美怡红院视频| 日本一区二区不卡视频| 日韩二区三区四区| 91麻豆精东视频| 国产色产综合产在线视频| 石原莉奈一区二区三区在线观看| 从欧美一区二区三区| 欧美成人三级电影在线| 一区二区三区在线免费| 国产suv精品一区二区6| 日韩欧美色电影| 亚洲综合在线电影| 国产91色综合久久免费分享| 8x福利精品第一导航| 亚洲制服丝袜一区| 97精品电影院| 国产精品久久久久aaaa樱花| 韩国v欧美v亚洲v日本v| 91精品一区二区三区在线观看| 亚洲乱码中文字幕综合| 成人黄色av电影| 国产午夜精品一区二区三区四区| 美女www一区二区| 91精品国产日韩91久久久久久| 亚洲人成亚洲人成在线观看图片| 成人美女在线视频| 国产精品三级av| 大桥未久av一区二区三区中文| 精品日韩欧美一区二区| 免费日韩伦理电影| 日韩精品一区二区三区中文不卡 | 激情av综合网| 欧美mv日韩mv亚洲| 精品影院一区二区久久久| 欧美大片在线观看| 韩国理伦片一区二区三区在线播放| 精品国产乱码久久久久久图片| 毛片一区二区三区| 精品国产凹凸成av人导航|