#define STRICT
#define WIN32_LEAN_AND_MEAN
#include "stdafx.h"
LPDIRECT3DVERTEXBUFFER9 g_pBackgroundVB; //背景矩形顶点缓冲区
LPDIRECT3DTEXTURE9 g_pBackgroundTexture; //背景纹理
LPDIRECT3DVERTEXBUFFER9 g_pWaterVB; //水波网格模型顶点缓冲区
LPDIRECT3DTEXTURE9 g_psBumpMap; //凹凸纹理
D3DXMATRIXA16 g_matBumpMat; //世界矩阵
float ftime = 0.0f;
const UINT g_n = 2; //水波网格模型x轴方向的顶点数目
const UINT g_m = 2; //水波网格模型y轴方向的顶点数目
const UINT g_nTriangles = (g_n-1)*(g_m-1)*2; //水波网格模型的三角形数目
HWND g_hWnd = NULL; // 窗口句柄
LPDIRECT3D9 g_pD3D = NULL; // D3D对象
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // D3D设备对象
D3DPRESENT_PARAMETERS d3dpp; // D3D设备特性
Camera came;
CStaticMesh mesh1,mesh2,mesh3,mesh4,mesh5,mesh6,mesh7,mesh8,mesh9,mesh10,mesh11,mesh12,mesh13,mesh14,mesh15,mesh16,mesh17;
//CStaticMesh mesh18,mesh19,mesh20,mesh21,mesh22,mesh23,mesh24,mesh25,mesh26,mesh27,mesh28,mesh29,mesh30,mesh31,mesh32;
//CStaticMesh mesh33;
CStaticMesh mesh34;
CStaticMesh mesh35;
CStaticMesh mesh36;
CStaticMesh mesh37;
CStaticMesh mesh38;
CStaticMesh mesh39;
CStaticMesh mesh40;
CStaticMesh mesh41;
CStaticMesh mesh42;
CStaticMesh mesh43;
CStaticMesh mesh44;
CStaticMesh mesh45;
D3DXMATRIX matWorld,matWorld1,matWorld2,matWorld3;
struct VERTEX
{
D3DXVECTOR3 p;
float tu, tv;
static const DWORD FVF;
};
const DWORD VERTEX::FVF = D3DFVF_XYZ | D3DFVF_TEX1;
const int Width = 640; // 窗口宽
const int Height = 480; // 窗口高
double g_dCurTime; // 当前时间
double g_dLastTime; // 上衣帧的时间
LPD3DXFONT g_pd3dxFont = NULL; // 字体
bool m_bDeviceLost = false; // 设备是否丢失
bool state = true;
D3DXMATRIX Matrix1,Matrix2,Matrix,Matrix3,Matrix4;
// 函数原型
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow);
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void initD3D(void);
void shutDown(void);
void render(void);
void createFont( void );
void RenderText(char* fps);
inline DWORD F2DW( FLOAT f ) { return *((DWORD*)&f); }
// 功能:当丢失设备时释放设备
void InvalidateDeviceObjects(void)
{
g_pd3dxFont->OnLostDevice();
}
// 功能:重新获得设备
void RestoreDeviceObjects(void)
{
g_pd3dxFont->OnResetDevice();
}
HRESULT CreateBumpMap(IDirect3DDevice9* pd3dDevice)
{
HRESULT hr = S_OK;
UINT iWidth = 256;
UINT iHeight = 256;
//创建凹凸纹理
if( pd3dDevice->CreateTexture( iWidth, iWidth, 1, 0, D3DFMT_V8U8,
D3DPOOL_MANAGED, &g_psBumpMap, NULL ));
//填充纹理元素
D3DLOCKED_RECT d3dlr;
g_psBumpMap->LockRect( 0, &d3dlr, 0, 0 );
CHAR* pDst = (CHAR*)d3dlr.pBits;
CHAR iDu, iDv;
for( DWORD y=0; y<iHeight; y++ )
{
CHAR* pPixel = pDst;
for( DWORD x=0; x<iWidth; x++ )
{
float fx = x/(FLOAT)iWidth - 0.5f;
float fy = y/(FLOAT)iHeight - 0.2f;
float r = sqrtf( fx*fx + fy*fy );
iDu = (CHAR)( 64 * cosf( 300.0f * r ) * expf( -r * 5.0f ) );
iDu = iDu + (CHAR)( 32 * cosf( 150.0f * ( fx + fy ) ) );
iDu = iDu +(CHAR)( 16 * cosf( 140.0f * ( fx * 0.85f - fy ) ) );
iDv = (CHAR)( 64 * sinf( 300.0f * r ) * expf( -r * 5.0f ) );
iDv = iDv + (CHAR)( 32 * sinf( 150.0f * ( fx + fy ) ) );
iDv = iDv + (CHAR)( 16 * sinf( 140.0f * ( fx * 0.85f - fy ) ) );
*pPixel++ = iDu;
*pPixel++ = iDv;
}
pDst += d3dlr.Pitch;
}
g_psBumpMap->UnlockRect(0);
return hr;
}
HRESULT SetEMBMStates(IDirect3DDevice9* g_pd3dDevice, float fTime)
{
//设置纹理层 0 的纹理渲染状态
g_pd3dDevice->SetTexture( 0, g_psBumpMap );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_BUMPENVMAPLUMINANCE );
static float r = 0.04f;
g_matBumpMat._11 = r * cosf( (float)fTime * 9.0f );
g_matBumpMat._12 = -r * sinf( (float)fTime * 9.0f );
g_matBumpMat._21 = r * sinf( (float)fTime * 9.0f );
g_matBumpMat._22 = r * cosf( (float)fTime * 9.0f );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_BUMPENVMAT00, F2DW( g_matBumpMat._11 ) );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_BUMPENVMAT01, F2DW( g_matBumpMat._12 ) );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_BUMPENVMAT10, F2DW( g_matBumpMat._21 ) );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_BUMPENVMAT11, F2DW( g_matBumpMat._22 ) );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_BUMPENVLSCALE, F2DW(0.8f) );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_BUMPENVLOFFSET, F2DW(0.0f) );
//设置纹理层 1 的纹理渲染状态
g_pd3dDevice->SetTexture( 1, g_pBackgroundTexture );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, D3DTSS_TCI_CAMERASPACEPOSITION | 1 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT3|D3DTTFF_PROJECTED );
//设置纹理坐标变换矩阵
static D3DXMATRIXA16 mat;
mat._11 = 0.8f; mat._12 = 0.0f; mat._13 = 0.0f;
mat._21 = 0.0f; mat._22 = 0.8f; mat._23 = 0.0f;
mat._31 = 0.5f; mat._32 =-0.5f; mat._33 = 1.0f;
mat._41 = 0.0f; mat._42 = 0.0f; mat._43 = 0.0f;
g_pd3dDevice->SetTransform( D3DTS_TEXTURE1, &mat );
return S_OK;
}
// 功能:创建窗口
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
WNDCLASSEX winClass;
MSG uMsg;
memset(&uMsg,0,sizeof(uMsg));
winClass.lpszClassName = "MY_WINDOWS_CLASS";
winClass.cbSize = sizeof(WNDCLASSEX);
winClass.style = CS_HREDRAW | CS_VREDRAW;
winClass.lpfnWndProc = WindowProc;
winClass.hInstance = hInstance;
winClass.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_DIRECTX_ICON);
winClass.hIconSm = LoadIcon(hInstance, (LPCTSTR)IDI_ICON1);
winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winClass.lpszMenuName = NULL;
winClass.cbClsExtra = 0;
winClass.cbWndExtra = 0;
if( !RegisterClassEx(&winClass) )
return E_FAIL;
int AppLeft = (GetSystemMetrics(SM_CXFULLSCREEN) - Width) / 2;
int AppTop = (GetSystemMetrics(SM_CYFULLSCREEN) - Height) / 2;
g_hWnd = CreateWindowEx( NULL, "MY_WINDOWS_CLASS",
"ZZ_DirectX 框架程序",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,// WS_MINIMIZEBOX | WS_VISIBLE | WS_SYSMENU,
AppLeft, AppTop, Width, Height, NULL, NULL, hInstance, NULL );
if( g_hWnd == NULL )
return E_FAIL;
ShowWindow( g_hWnd, nCmdShow );
UpdateWindow( g_hWnd );
initD3D(); // 初始化D3D
//----------------------------------------------------------
//-----------------------------------------------------------
while( uMsg.message != WM_QUIT )
{
if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &uMsg );
DispatchMessage( &uMsg );
}
else
render(); // 渲染
}
shutDown();
UnregisterClass( "MY_WINDOWS_CLASS", winClass.hInstance );
return uMsg.wParam;
}
LRESULT CALLBACK WindowProc( HWND hWnd,
UINT msg,
WPARAM wParam,
LPARAM lParam )
{
switch( msg )
{
case WM_KEYDOWN:
{
switch( wParam )
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
}
break;
case WM_CLOSE:
{
PostQuitMessage(0);
}
case WM_DESTROY:
{
PostQuitMessage(0);
}
bre
没有合适的资源?快使用搜索试试~ 我知道了~
Direct3D实现的小场景

共123个文件
x:55个
tga:12个
obj:9个

需积分: 10 78 浏览量
2008-11-28
23:39:14
上传
评论
收藏 12MB RAR 举报
温馨提示
自己写得一个3D小场景,模型是自己做得。初学direct,做得不好之处多包涵。
资源详情
资源评论
资源推荐
收起资源包目录





































































































共 123 条
- 1
- 2



















LIONKING61
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制

评论0