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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? multitexture.cpp

?? 3d 游戲編程入門教程之例子源碼--飛機(jī)繞茶壺
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//-----------------------------------------------------------------------------
// File: multitexture.cpp
//
// Desc: Example code showing how to use a vertex structure with a vertex buffer
//       and how to map a texture.
//
// Last modification: December 25th, 2002
//
// Copyright (c) Wolfgang F. Engel (wolf@direct3d.net)
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#define STRICT
#include <Windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <math.h>
#include <D3DX9.h>
#include "DXUtil.h"
#include "D3DEnumeration.h"
#include "D3DSettings.h"
#include "D3DApp.h"
#include "D3DFile.h"
#include "D3DFont.h"
#include "D3DUtil.h"
#include "resource.h"


// A structure for our custom vertex type
struct VERTEX
{
    FLOAT x, y, z, rhw; // The transformed position for the vertex
    FLOAT tu, tv;
};

// Fixed-Function Vertex structure
const DWORD FVF = (D3DFVF_XYZRHW | D3DFVF_TEX1);

// cube vertex 
struct CUBEVERTEX
{
    D3DXVECTOR3 p;
    D3DXVECTOR3 n;
    FLOAT       tu, tv;
};

// cube FVF
const DWORD FVF_CUBEVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);

#define FILL_CUBEVERTEX( v, vertex, normal, atu, atv )  \
{   v.p.x = vertex.x; v.p.y = vertex.y; v.p.z = vertex.z; \
    v.n.x = normal.x; v.n.y = normal.y; v.n.z = normal.z; \
    v.tu = atu; v.tv = atv; \
}

#define NUM_CUBE_VERTICES (6*4)
#define NUM_CUBE_INDICES  (6*2*3)

//-----------------------------------------------------------------------------
// Name: class CMyD3DApplication
// Desc: Application class. The base class (CD3DApplication) provides the 
//       generic functionality needed in all Direct3D samples. CMyD3DApplication 
//       adds functionality specific to this sample program.
//-----------------------------------------------------------------------------
class CMyD3DApplication : public CD3DApplication
{
    CD3DFont* m_pFont;
    CD3DFont* m_pFontSmall;
    
	LPDIRECT3DVERTEXBUFFER9 m_pVB; // Buffer to hold vertices
    DWORD m_dwSizeofVertices;
    LPDIRECT3DTEXTURE9      m_pBackgroundTexture;

	LPDIRECT3DVERTEXBUFFER9 m_pCubeVB; // Buffer to hold vertices
    DWORD m_dwSizeofCubeVertices;
    LPDIRECT3DINDEXBUFFER9  m_pCubeIB;
    DWORD m_dwSizeofCubeIndices;

    LPDIRECT3DTEXTURE9      m_pWallTexture;
    LPDIRECT3DTEXTURE9      m_pEnvTexture;
    LPDIRECT3DTEXTURE9      m_pDetailTexture;

	// texture switches
	BOOL m_bTex1, m_bTex2, m_bTex3, m_bTex4, m_bTex5, m_bTex6, m_bTex7, m_bTex8;
	BOOL m_bAdd1, m_bAdd2, m_bAdd3;
	BOOL m_bFil1, m_bFil2;
    BOOL m_bDrawHelp;

	// for the cube
    CUBEVERTEX m_pCubeVertices[NUM_CUBE_VERTICES];
    WORD      m_pCubeIndices[NUM_CUBE_INDICES];


protected:
    HRESULT OneTimeSceneInit();
    HRESULT InitDeviceObjects();
    HRESULT RestoreDeviceObjects();
    HRESULT InvalidateDeviceObjects();
    HRESULT DeleteDeviceObjects();
    HRESULT FinalCleanup();
    HRESULT Render();
    HRESULT FrameMove();
    HRESULT ConfirmDevice( D3DCAPS9* pCaps, DWORD dwBehavior, 
		D3DFORMAT adapterFormat, D3DFORMAT backBufferFormat );
    LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );

    HRESULT CreateCube( CUBEVERTEX* pVertices, WORD* pIndices );
	HRESULT SetLights();

public:
    CMyD3DApplication();
};




//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: Entry point to the program. Initializes everything, and goes into a
//       message-processing loop. Idle time is used to render the scene.
//-----------------------------------------------------------------------------
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    CMyD3DApplication d3dApp;

    InitCommonControls();
    if( FAILED( d3dApp.Create( hInst ) ) )
        return 0;

    return d3dApp.Run();
}

//-----------------------------------------------------------------------------
// Name: CMyD3DApplication()
// Desc: Application constructor. Sets attributes for the app.
//-----------------------------------------------------------------------------
CMyD3DApplication::CMyD3DApplication()
{
    m_strWindowTitle  = _T("Multitexture");
    m_d3dEnumeration.AppUsesDepthBuffer = FALSE;
    m_dwCreationWidth		= 800;   // Width used to create window
    m_dwCreationHeight		= 600;
	m_pVB = NULL;
	m_pCubeVB = NULL;
	m_pCubeIB = NULL;
    m_pFont = new CD3DFont( _T("Arial"), 12, D3DFONT_BOLD );
    m_pFontSmall = new CD3DFont( _T("Arial"), 7, D3DFONT_BOLD );
	m_bTex1 = TRUE;
	m_bTex2 = m_bTex3 = m_bTex4 = m_bTex5 = m_bTex6 = m_bTex7 = m_bTex8 = FALSE;
	m_bFil1 = TRUE;
	m_bFil2 = FALSE;
	m_bAdd1 = TRUE;
	m_bAdd2 = m_bAdd3 = FALSE;

    m_bDrawHelp  = FALSE;
}

//-----------------------------------------------------------------------------
// Name: OneTimeSceneInit()
// Desc: Called during initial app startup, this function performs all the
//       permanent initialization.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::OneTimeSceneInit()
{
    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: FrameMove()
// Desc: Called once per frame, the call is the entry point for animating
//       the scene.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::FrameMove()
{
    FLOAT z=0;

    // Setup the world matrix to spin and translate the object
    D3DXMATRIX matSpinY, matSpinX, matWorld;
    D3DXMatrixRotationY( &matSpinY, m_fTime / 0.5f );
    D3DXMatrixRotationX( &matSpinX, m_fTime / 0.3f );
    D3DXMatrixTranslation( &matWorld, 0.0f, 0.0f, z );
    D3DXMatrixMultiply( &matWorld, &matSpinY, &matWorld );
    D3DXMatrixMultiply( &matWorld, &matSpinX, &matWorld );
    
    m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

    return S_OK;
}

//-----------------------------------------------------------------------------
// Name: Render()
// Desc: Called once per frame, the call is the entry point for 3d
//       rendering. This function sets up render states, clears the
//       viewport, and renders the scene.
//-----------------------------------------------------------------------------
HRESULT CMyD3DApplication::Render()
{
	// animate darkmap
	static int i=0;

    // Begin the scene
    if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
    {
		m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
	    m_pd3dDevice->SetTextureStageState( 2, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 2, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
	    m_pd3dDevice->SetTextureStageState( 3, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 3, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
	    m_pd3dDevice->SetTextureStageState( 4, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 4, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
	    m_pd3dDevice->SetTextureStageState( 5, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 5, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
	    m_pd3dDevice->SetTextureStageState( 6, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 6, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );
	    m_pd3dDevice->SetTextureStageState( 7, D3DTSS_COLOROP,   D3DTOP_DISABLE );
		m_pd3dDevice->SetTextureStageState( 7, D3DTSS_ALPHAOP,   D3DTOP_DISABLE );



		// switch to clamp texture addressing mode
		if (m_bAdd1 == TRUE)
		{
			m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU,  D3DTADDRESS_CLAMP);
			m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV,  D3DTADDRESS_CLAMP);
			m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSW, D3DTADDRESS_CLAMP );
		}

		// mirroronce
		if (m_bAdd2 == TRUE)
		{
			m_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRRORONCE);
			m_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRRORONCE);
			m_pd3dDevice->SetSamplerState(0, D3DSAMP_ADDRESSW, D3DTADDRESS_MIRRORONCE);
		}

		// border color
		if (m_bAdd3 == TRUE)
		{
			m_pd3dDevice->SetSamplerState (0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
			m_pd3dDevice->SetSamplerState (0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);
			m_pd3dDevice->SetSamplerState( 0, D3DSAMP_BORDERCOLOR, 0x00000000);
		}

		// Set up texture stage states for the background
		m_pd3dDevice->SetTexture( 0, m_pBackgroundTexture );
		m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
		m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );

		// Passing an FVF to IDirect3DDevice9::SetFVF specifies a legacy FVF with stream 0.
	    m_pd3dDevice->SetFVF(FVF ); 
		m_pd3dDevice->SetStreamSource( 0, m_pVB, 0, sizeof(VERTEX) );
	    m_pd3dDevice->DrawPrimitive (D3DPT_TRIANGLESTRIP, 0, 2);

		/*******************************************
		Dark mapping
		*******************************************/
		if (m_bTex1 == TRUE)
		{
		  m_pd3dDevice->SetTexture( 0, m_pWallTexture); 
		  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX,  0);
		  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
	 	  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP,   D3DTOP_SELECTARG1 );

		  m_pd3dDevice->SetTexture(1, m_pEnvTexture); 
		  m_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
		  m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
		  m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
		  m_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP,   D3DTOP_MODULATE );
		}

		/**************************************
		Animated Dark mapping
		***************************************/
		if (m_bTex2 == TRUE)
		{
		  // Set texture for the cube
		  m_pd3dDevice->SetTexture( 0, m_pWallTexture); 
		  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
		  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
		  m_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); 

		  // Set darkmap
		  m_pd3dDevice->SetTexture(1, m_pEnvTexture); 
		  m_pd3dDevice->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 0 );
		  m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
          m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT );  

		  // animate darkmap
		  if (i < 40)
		  {
			m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
		  }
 		  else if (i < 80)
		  {
			m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
		  }
		  else if (i < 120)
		  {
			m_pd3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE4X);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区在线视频| 一区免费观看视频| 色综合一区二区| 久久精品国产99国产| 亚洲欧美在线aaa| 欧美成人欧美edvon| 欧美中文字幕一二三区视频| 成人亚洲精品久久久久软件| 奇米一区二区三区| 亚洲aaa精品| 亚洲另类在线制服丝袜| 国产日产欧美一区二区视频| 91精品国产一区二区三区| 久久综合久久99| 欧美精品在线一区二区三区| 色综合婷婷久久| 成人美女视频在线看| 精品一区二区三区av| 男女男精品视频| 亚洲成年人影院| 一区二区三区国产精华| 亚洲欧洲日韩女同| 中文天堂在线一区| 国产视频911| 久久久青草青青国产亚洲免观| 91精品国产综合久久福利| 欧美美女喷水视频| 欧美性视频一区二区三区| 91网上在线视频| 91免费在线看| 91福利视频网站| 色成人在线视频| 色婷婷综合久久久中文字幕| 91丨porny丨蝌蚪视频| av电影天堂一区二区在线| 成人少妇影院yyyy| 成人激情图片网| av不卡免费电影| 色又黄又爽网站www久久| 色天使久久综合网天天| 日本精品免费观看高清观看| 91久久精品一区二区| 91久久国产综合久久| 欧美三级日本三级少妇99| 欧美群妇大交群的观看方式| 欧美麻豆精品久久久久久| 91精品欧美久久久久久动漫| 日韩视频123| 精品福利一二区| 国产性色一区二区| 最新国产成人在线观看| 亚洲欧美日韩国产另类专区| 亚洲一区二区三区在线| 日本 国产 欧美色综合| 久久黄色级2电影| 盗摄精品av一区二区三区| 成人免费毛片app| 色狠狠综合天天综合综合| 欧美另类高清zo欧美| 欧美大白屁股肥臀xxxxxx| 国产欧美精品一区| 中文字幕在线一区二区三区| 一区二区三区蜜桃| 日本欧美一区二区三区乱码| 国产一区二区三区黄视频 | 国内精品第一页| 日韩精品一二三四| 久久超碰97人人做人人爱| 国产精品18久久久久| 99视频精品在线| 欧美性大战xxxxx久久久| 欧美日韩电影在线| 精品理论电影在线观看| 亚洲国产精品成人久久综合一区| 国产精品超碰97尤物18| 午夜激情综合网| 国产精品伊人色| 91黄色激情网站| 欧美精品一区二区三区高清aⅴ | 91精品婷婷国产综合久久性色| 欧美mv和日韩mv的网站| 自拍偷拍欧美精品| 毛片av一区二区三区| 成人av中文字幕| 日韩一区二区三区在线| 亚洲欧美在线观看| 美日韩一区二区| 日本道在线观看一区二区| 精品久久99ma| 亚洲一二三专区| 国产成人自拍网| 91精品国产一区二区| 亚洲天堂av一区| 激情偷乱视频一区二区三区| 欧美亚洲高清一区二区三区不卡| 精品国产乱码久久久久久老虎| 亚洲乱码中文字幕综合| 国产乱码精品一区二区三区五月婷 | 欧美影片第一页| 久久精品夜色噜噜亚洲aⅴ| 天天操天天干天天综合网| 成人网男人的天堂| 一区二区三区四区亚洲| 狠狠色狠狠色综合| 欧美日韩一区久久| 国产精品久久久久久久久免费相片| 日本伊人午夜精品| 91福利在线播放| 综合久久国产九一剧情麻豆| 国产一区二区三区| 日韩免费一区二区三区在线播放| 一二三区精品视频| 99久久精品情趣| 久久久久久久综合狠狠综合| 免费成人在线观看视频| 欧美色图激情小说| 亚洲欧美日韩国产手机在线| 成人一级视频在线观看| 国产嫩草影院久久久久| 国产麻豆91精品| 精品久久久久久久久久久院品网 | 国产日产欧美一区二区视频| 久久国产福利国产秒拍| 欧美日韩不卡在线| 亚洲va在线va天堂| 欧美性生活一区| 一区二区三区日韩欧美| 97久久精品人人做人人爽| 中文字幕一区二区三区四区不卡| 成人的网站免费观看| 中文在线一区二区| av资源站一区| 亚洲人一二三区| 91美女片黄在线| 一区二区三区欧美视频| 欧美熟乱第一页| 日日摸夜夜添夜夜添国产精品| 欧美日免费三级在线| 亚洲国产精品综合小说图片区| 欧美影院午夜播放| 亚洲综合在线电影| 在线观看免费成人| 日韩在线一区二区| 日韩免费视频线观看| 国产一区二区福利| 国产欧美视频一区二区| 91在线视频免费91| 一区二区在线观看免费视频播放 | 国产农村妇女毛片精品久久麻豆| 福利电影一区二区| 亚洲欧美日韩国产一区二区三区| 91精品1区2区| 蜜臀av一区二区在线观看| 欧美精品一区二区三区一线天视频| 国产毛片一区二区| 国产精品久久久久久久久动漫 | 91丨porny丨中文| 亚洲国产综合人成综合网站| 91超碰这里只有精品国产| 久久精品国产免费| 久久久精品黄色| 色域天天综合网| 日韩av中文字幕一区二区三区| 日韩精品一区二区三区中文精品| 国产凹凸在线观看一区二区| 亚洲欧美在线视频观看| 91麻豆精品国产| 国产成人精品亚洲日本在线桃色| 综合欧美亚洲日本| 欧美另类久久久品| 粉嫩久久99精品久久久久久夜 | 懂色一区二区三区免费观看 | 免费在线观看不卡| 国产精品美女一区二区三区| 欧美日本一区二区三区四区| 久久99久久精品| 亚洲美女在线一区| 精品女同一区二区| 色一区在线观看| 激情久久久久久久久久久久久久久久 | 日韩一区二区在线播放| 成人毛片视频在线观看| 亚洲va国产天堂va久久en| 国产亚洲欧美日韩在线一区| 欧美色图片你懂的| 国产69精品久久久久777| 视频在线在亚洲| 国产精品伦理在线| 精品日本一线二线三线不卡| 一本色道亚洲精品aⅴ| 国产一区二区三区黄视频 | 无码av中文一区二区三区桃花岛| 欧美激情自拍偷拍| 欧美肥妇毛茸茸| 99re热这里只有精品视频| 久久精品国产秦先生| 亚洲大尺度视频在线观看| 国产欧美日韩卡一| 欧美一区二视频| 欧洲国内综合视频|