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

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

?? multitexture.cpp

?? 3d 游戲編程入門教程之例子源碼--飛機繞茶壺
?? 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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲中文字幕精品| 成人99免费视频| 久久精品国产精品青草| 午夜视频一区二区| 日韩制服丝袜av| 国产精品18久久久久久久久| 国产一区二区美女| 色综合欧美在线| 91精品国产一区二区三区蜜臀| 91首页免费视频| 91麻豆精品国产91久久久更新时间 | 日本不卡免费在线视频| 樱桃国产成人精品视频| 日韩国产欧美在线播放| 免费高清在线一区| eeuss鲁片一区二区三区| 不卡欧美aaaaa| 欧美蜜桃一区二区三区| 久久婷婷国产综合国色天香| 久久欧美中文字幕| 亚洲一区二区三区不卡国产欧美| 精品一区二区在线免费观看| 日韩中文字幕亚洲一区二区va在线| 久久av老司机精品网站导航| 欧美三级韩国三级日本一级| 亚洲欧美日韩国产综合| 不卡欧美aaaaa| 国产欧美中文在线| av在线播放成人| 26uuu成人网一区二区三区| 亚洲尤物在线视频观看| 91亚洲精品一区二区乱码| 精品日韩在线观看| 日韩电影一区二区三区四区| 91激情在线视频| 亚洲免费成人av| 欧美色视频一区| 亚洲一区在线免费观看| 在线观看免费亚洲| 亚洲精品中文在线| 色哟哟亚洲精品| 亚洲不卡av一区二区三区| 欧美日韩一区二区三区四区| 亚洲伊人伊色伊影伊综合网| 欧美久久久久久蜜桃| 久久国产精品色婷婷| 日本一区二区免费在线| av动漫一区二区| 亚洲综合色视频| 精品国产一区二区三区久久影院| 久久草av在线| 亚洲欧美国产77777| 欧美日韩日日摸| 紧缚捆绑精品一区二区| 亚洲视频综合在线| 欧美一级精品在线| av电影在线观看一区| 天天影视色香欲综合网老头| wwwwww.欧美系列| 色婷婷亚洲综合| 精品亚洲porn| 亚洲成av人片在线观看| 国产精品美女久久久久久久久久久| 色婷婷综合久久久久中文 | 日本不卡不码高清免费观看| 精品处破学生在线二十三| 波多野结衣亚洲| 久久精品国产**网站演员| 亚洲无线码一区二区三区| 欧美极品另类videosde| 91精选在线观看| 欧美在线观看视频一区二区三区| 激情综合色播激情啊| 亚洲国产精品久久人人爱蜜臀| 中文字幕精品在线不卡| 久久这里只有精品6| 日韩一级片在线播放| 欧美日韩亚洲高清一区二区| 91蜜桃婷婷狠狠久久综合9色| 国产精品中文有码| 国产精品一卡二卡| 国产成人av一区二区| 黄色日韩三级电影| 韩国av一区二区三区| 精品一区二区国语对白| 久久精品国产成人一区二区三区| 视频一区在线播放| 美日韩黄色大片| 久久国产综合精品| 国产精品1区2区3区在线观看| 看片的网站亚洲| 韩国女主播一区二区三区| 国产福利一区在线| 97国产一区二区| 欧美老年两性高潮| 精品国产自在久精品国产| 欧美一级一级性生活免费录像| 日韩情涩欧美日韩视频| 中文字幕不卡三区| 亚洲一区二区视频在线| 蜜乳av一区二区三区| 99久久精品国产麻豆演员表| 色拍拍在线精品视频8848| 色婷婷综合久久久| 9191久久久久久久久久久| 久久你懂得1024| 亚洲婷婷综合色高清在线| 玉米视频成人免费看| 日韩国产在线一| 精品一区中文字幕| 成人黄页在线观看| 欧美日韩国产精选| 国产亚洲精品7777| 亚洲午夜精品久久久久久久久| 秋霞成人午夜伦在线观看| 国产成人av电影在线| 日本高清无吗v一区| 久久综合狠狠综合| 亚洲小说春色综合另类电影| 色94色欧美sute亚洲13| 国产午夜精品久久久久久免费视| 国产精品国产精品国产专区不蜜| 午夜av一区二区| av电影天堂一区二区在线观看| 激情图片小说一区| 欧美色综合影院| 国产精品动漫网站| 国产成人免费网站| 91精品啪在线观看国产60岁| 久久精品一区二区| 韩国毛片一区二区三区| 日韩欧美色综合网站| 亚洲成在人线在线播放| 色婷婷久久99综合精品jk白丝| 欧美成人艳星乳罩| 韩国一区二区视频| 日韩欧美电影在线| 蜜桃精品视频在线观看| 欧美一区二区女人| 另类专区欧美蜜桃臀第一页| 日韩午夜电影av| 久久aⅴ国产欧美74aaa| 久久亚洲精精品中文字幕早川悠里| 日韩中文字幕av电影| 91精品国产综合久久久久| 麻豆一区二区在线| 日韩欧美一区二区视频| 国产在线精品一区在线观看麻豆| 欧美一级艳片视频免费观看| 亚洲五月六月丁香激情| 国产精品久久毛片av大全日韩| 懂色av一区二区三区免费观看 | 国产成人一区在线| 国产精品视频免费| 成人激情小说乱人伦| 一区二区三区四区蜜桃| 欧美日韩视频一区二区| 成人黄色小视频在线观看| 亚洲五码中文字幕| 亚洲午夜激情av| 日本一区二区久久| 日韩一区二区精品| a美女胸又www黄视频久久| 亚洲综合另类小说| 欧美国产激情二区三区| 欧美一区中文字幕| 国产电影一区在线| 日韩福利视频导航| 一区二区三区久久| 国产欧美日韩在线看| 日韩视频在线一区二区| 国产凹凸在线观看一区二区| 日产欧产美韩系列久久99| 一区二区三区四区国产精品| 国产农村妇女毛片精品久久麻豆 | 激情综合色播五月| 日韩成人精品在线观看| 午夜精品视频在线观看| 欧美精品一区二区在线播放| 日韩亚洲电影在线| 日韩亚洲国产中文字幕欧美| 欧美日韩一区 二区 三区 久久精品| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产不卡视频一区二区三区| 懂色av一区二区在线播放| 国产精品自拍一区| 不卡视频在线看| 91视频一区二区三区| 欧美性受xxxx黑人xyx| 这里只有精品视频在线观看| 91麻豆精品久久久久蜜臀| 欧美日韩国产综合一区二区三区| 欧美日韩精品一区视频| 欧美精三区欧美精三区| 精品福利一区二区三区免费视频| 2020国产成人综合网| 一区二区三区四区蜜桃| 久久精品国产久精国产爱| 国产成人综合精品三级| 色狠狠综合天天综合综合|