📄 tex.cpp
字号:
// 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 + -