⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tex.cpp

📁 VC++ DEMO, used for the beginners and the amour
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// tex.cpp : Defines the entry point for the application.
//
#include "Stdafx.h"
#include "resource.h"
#include "texargs.h"
#include "tex.h"

////////////////////////////////////////////////////////////////////
//Construction.
////////////////////////////////////////////////////////////////////
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "d3d8.lib")
#pragma comment(lib, "d3dx8.lib")

LPDIRECT3D8				g_pD3D			= NULL;
LPDIRECT3DDEVICE8		g_pd3dDevice	= NULL;
LPDIRECT3DVERTEXBUFFER8	g_pVB   		= NULL; 
LPDIRECT3DTEXTURE8      g_pTextureArg0     = NULL;
LPDIRECT3DTEXTURE8      g_pTextureArg1     = NULL;
LPDIRECT3DTEXTURE8      g_pTextureArg2     = NULL;


//-----------------------------------------------------------------------------
// 纹理参数变量.
//-----------------------------------------------------------------------------
WORD  g_wT0COp,   g_wT1COp,   g_wT2COp;
WORD  g_wT0CArg1, g_wT1CArg1, g_wT2CArg1;
WORD  g_wT0CArg2, g_wT1CArg2, g_wT2CArg2;
WORD  g_wT0AOp,   g_wT1AOp,   g_wT2AOp;
WORD  g_wT0AArg1, g_wT1AArg1, g_wT2AArg1;
WORD  g_wT0AArg2, g_wT1AArg2, g_wT2AArg2;
WORD  g_wT0AddrU,  g_wT1AddrU,  g_wT2AddrU;
WORD  g_wT0AddrV,  g_wT1AddrV,  g_wT2AddrV;

double  g_wMaxAddressU,g_wMaxAddressV;
DWORD g_dwTextureFactor         = 0xffffffff;
DWORD g_dwDiffuseColor          = 0xff00ff00;
DWORD g_dwMaxTextureBlendStages = 0;

bool  g_bTex0Changed = false;
bool  g_bTex1Changed = false;
bool  g_bTex2Changed = false;

TCHAR g_strTexture0[256];
TCHAR g_strTexture1[256];
TCHAR g_strTexture2[256];
TCHAR g_strFileName[MAX_PATH];
TCHAR g_strInitialDir[MAX_PATH];

//-----------------------------------------------------------------------------
// 定义一种顶点格式
//-----------------------------------------------------------------------------
struct FACEVERTEX
{
    D3DXVECTOR3 p;
    DWORD dwColor;
    FLOAT tu1, tv1;
    FLOAT tu2, tv2;
    FLOAT tu3, tv3;
};

#define D3DFVF_FACEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX3 )

#define FILL_FACEVERTEX( v, ax, ay, az, acolor, atu1, atv1, atu2, atv2, atu3, atv3 )  \
{   v.p.x = ax; v.p.y = ay; v.p.z = az; v.dwColor  = acolor; \
    v.tu1 = atu1; v.tv1 = atv1; v.tu2 = atu2; v.tv2 = atv2;\
    v.tu3 = atu3; v.tv3 = atv3;\
}

////////////////////////////////////////////////////////////////////
//UIControls define.
////////////////////////////////////////////////////////////////////
HWND g_hWndTex0AlphaArg1,g_hWndTex0AlphaOp,g_hWndTex0AlphaArg2;
HWND g_hWndTex1AlphaArg1,g_hWndTex1AlphaOp,g_hWndTex1AlphaArg2;
HWND g_hWndTex2AlphaArg1,g_hWndTex2AlphaOp,g_hWndTex2AlphaArg2;
HWND g_hWndTex0ColorArg1,g_hWndTex0ColorOp,g_hWndTex0ColorArg2;
HWND g_hWndTex1ColorArg1,g_hWndTex1ColorOp,g_hWndTex1ColorArg2;
HWND g_hWndTex2ColorArg1,g_hWndTex2ColorOp,g_hWndTex2ColorArg2;
HWND g_hWndTex0Name,g_hWndTex1Name,g_hWndTex2Name;
HWND g_hWndTex0AddrModeU,g_hWndTex1AddrModeU,g_hWndTex2AddrModeU;
HWND g_hWndTex0AddrModeV,g_hWndTex1AddrModeV,g_hWndTex2AddrModeV;
HWND g_hWndTexAddrMaxU,g_hWndTexAddrMaxV;
HWND g_hWndTexBlendFactor;
////////////////////////////////////////////////////////////////////
//Construction.
////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
// Name: Main_OnDestroy()
// Desc: ....
//-----------------------------------------------------------------------------
void Main_OnDestroy( HWND hWnd )
{
	PostQuitMessage(0);
	return;
}
//-----------------------------------------------------------------------------
// Name: Main_OnCommand()
// Desc: 各控件的消息处理.
//-----------------------------------------------------------------------------
void Main_OnCommand( HWND hWnd, int iCmd, HWND hwndCtrl, UINT nCode)
{
	switch( iCmd )
	{
	case IDC_TEX0_SELECT:
		if (nCode == BN_CLICKED )
		Main_OnSelectTex0Name();break;
	case IDC_TEX1_SELECT:
		if (nCode == BN_CLICKED)
		Main_OnSelectTex1Name();break;
	case IDC_TEX2_SELECT:
		if (nCode == BN_CLICKED)
		Main_OnSelectTex2Name();break;
	case IDC_TEX0_ALPHA_ARG1:
	case IDC_TEX0_ALPHA_ARG2:
	case IDC_TEX0_ALPHA_OP:
	case IDC_TEX1_ALPHA_ARG1:
	case IDC_TEX1_ALPHA_ARG2:
	case IDC_TEX1_ALPHA_OP:
	case IDC_TEX2_ALPHA_ARG1:
	case IDC_TEX2_ALPHA_ARG2:
	case IDC_TEX2_ALPHA_OP:
	case IDC_TEX0_COLOR_ARG1:
	case IDC_TEX0_COLOR_ARG2:
	case IDC_TEX0_COLOR_OP:
	case IDC_TEX1_COLOR_ARG1:
	case IDC_TEX1_COLOR_ARG2:
	case IDC_TEX1_COLOR_OP:
	case IDC_TEX2_COLOR_ARG1:
	case IDC_TEX2_COLOR_ARG2:
	case IDC_TEX2_COLOR_OP:
		if (nCode == CBN_SELCHANGE )
			Main_OnChangeStageArgs();break;
	case IDC_ADDR_U:
	case IDC_ADDR_V:
		if (nCode == EN_CHANGE)
			Main_OnChangeAddrMax();break;
	case IDC_TEX0_ADDR_MODE_U:
	case IDC_TEX1_ADDR_MODE_U:
	case IDC_TEX2_ADDR_MODE_U:
	case IDC_TEX0_ADDR_MODE_V:
	case IDC_TEX1_ADDR_MODE_V:
	case IDC_TEX2_ADDR_MODE_V:
		if (nCode == CBN_SELCHANGE)
			Main_OnChangeAddrMode();break;
	case IDC_TEX_BLEND_FACTOR:
		if (nCode == EN_CHANGE)
			Main_OnChangeBlendFactor();break;
	default:break;
	}
	return;
}
//-----------------------------------------------------------------------------
// Name: Main_OnSelectTex0Name()
// Desc:....
//-----------------------------------------------------------------------------
void Main_OnSelectTex0Name()
{

    TCHAR strTextureName[MAX_PATH] = _T("");

    // Display the OpenFileName dialog. Then, try to load the specified file
    OPENFILENAME ofn = { sizeof(OPENFILENAME), NULL, NULL,
                         _T("Texture Files (.bmp;.tga)\0*.bmp;*.tga\0\0"), 
                         NULL, 0, 1, strTextureName, MAX_PATH, g_strFileName, MAX_PATH, 
                         g_strInitialDir, _T("Open Texture File"), 
						 OFN_FILEMUSTEXIST, 0, 1, NULL, 0, NULL, NULL };

    if( TRUE == GetOpenFileName( &ofn ) )
    {
		Edit_SetText(g_hWndTex0Name,g_strFileName );
		g_bTex0Changed = true;
        Main_OnChangeTex();
    }

}
//-----------------------------------------------------------------------------
// Name: Main_OnSelectTex1Name()
// Desc:....
//-----------------------------------------------------------------------------
void Main_OnSelectTex1Name()
{
    TCHAR strTextureName[MAX_PATH] = _T("");
	
    // Display the OpenFileName dialog. Then, try to load the specified file
    OPENFILENAME ofn = { sizeof(OPENFILENAME), NULL, NULL,
		_T("Texture Files (.bmp;.tga)\0*.bmp;*.tga\0\0"), 
		NULL, 0, 1, strTextureName, MAX_PATH, g_strFileName, MAX_PATH, 
		g_strInitialDir, _T("Open Texture File"), 
		OFN_FILEMUSTEXIST, 0, 1, NULL, 0, NULL, NULL };
	
    if( TRUE == GetOpenFileName( &ofn ) )
    {
		Edit_SetText(g_hWndTex1Name,g_strFileName );
		g_bTex1Changed = true;
        Main_OnChangeTex();
    }
}
//-----------------------------------------------------------------------------
// Name: Main_OnSelectTex2Name()
// Desc:....
//-----------------------------------------------------------------------------
void Main_OnSelectTex2Name()
{
   TCHAR strTextureName[MAX_PATH] = _T("");
	
    // Display the OpenFileName dialog. Then, try to load the specified file
    OPENFILENAME ofn = { sizeof(OPENFILENAME), NULL, NULL,
		_T("Texture Files (.bmp;.tga)\0*.bmp;*.tga\0\0"), 
		NULL, 0, 1, strTextureName, MAX_PATH, g_strFileName, MAX_PATH, 
		g_strInitialDir, _T("Open Texture File"), 
		OFN_FILEMUSTEXIST, 0, 1, NULL, 0, NULL, NULL };
	
    if( TRUE == GetOpenFileName( &ofn ) )
    {
		Edit_SetText(g_hWndTex2Name,g_strFileName );
		g_bTex2Changed = true;
        Main_OnChangeTex();
    }
}
//-----------------------------------------------------------------------------
// Name: Main_OnChangeBlendFactor()
// Desc: 
//-----------------------------------------------------------------------------
void Main_OnChangeBlendFactor()
{
	TCHAR strValue[11];
	Edit_GetText(g_hWndTexBlendFactor,strValue,11);
    const TCHAR* strColor = (LPCTSTR)strValue;
    if( (strColor[0] == '0') && ((strColor[1] == 'x') || (strColor[1] == 'X')) )
        strColor += 2;
    sscanf( strColor, _T("%x"), &g_dwTextureFactor );
}
//-----------------------------------------------------------------------------
// Name: Main_OnChangeTex()
// Desc: 更新纹理对象.
//-----------------------------------------------------------------------------
void Main_OnChangeTex()
{
    TCHAR strName0[MAX_PATH], strName1[MAX_PATH], strName2[MAX_PATH];
	
	Edit_GetText(g_hWndTex0Name,strName0,MAX_PATH);
	Edit_GetText(g_hWndTex1Name,strName1,MAX_PATH);
	Edit_GetText(g_hWndTex2Name,strName2,MAX_PATH);
    SetTextureMaps( (LPCTSTR)strName0, (LPCTSTR)strName1, (LPCTSTR)strName2);
}
//-----------------------------------------------------------------------------
// Name: Main_OnChangeAddrMode()
// Desc: 更新纹理地址模式U——V.
//-----------------------------------------------------------------------------
void Main_OnChangeAddrMode()
{
	g_wT0AddrU = aTexAddr[ ComboBox_GetCurSel(g_hWndTex0AddrModeU) + 1 ];
	g_wT1AddrU = aTexAddr[ ComboBox_GetCurSel(g_hWndTex1AddrModeU) + 1 ];
	g_wT2AddrU = aTexAddr[ ComboBox_GetCurSel(g_hWndTex2AddrModeU) + 1 ];
	g_wT0AddrV = aTexAddr[ ComboBox_GetCurSel(g_hWndTex0AddrModeV) + 1 ];
	g_wT1AddrV = aTexAddr[ ComboBox_GetCurSel(g_hWndTex1AddrModeV) + 1 ];
	g_wT2AddrV = aTexAddr[ ComboBox_GetCurSel(g_hWndTex2AddrModeV) + 1 ];
}
//-----------------------------------------------------------------------------
// Name: InitDialogUIControls()
// Desc: 控件初始化.
//-----------------------------------------------------------------------------
void InitDialogUIControls( HWND hWnd)
{
	//保存各控件的窗口句柄
	g_hWndTex0AlphaArg1 = GetDlgItem( hWnd,IDC_TEX0_ALPHA_ARG1);
	g_hWndTex1AlphaArg1 = GetDlgItem( hWnd,IDC_TEX1_ALPHA_ARG1);
	g_hWndTex2AlphaArg1 = GetDlgItem( hWnd,IDC_TEX2_ALPHA_ARG1);	
	g_hWndTex0AlphaOp = GetDlgItem( hWnd,IDC_TEX0_ALPHA_OP);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -