#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 45 下载量 154 浏览量
2008-11-28
23:39:14
上传
评论 1
收藏 12MB RAR 举报
温馨提示
自己写得一个3D小场景,模型是自己做得。初学direct,做得不好之处多包涵。
资源详情
资源评论
资源推荐
收起资源包目录
Direct3D实现的小场景 (123个子文件)
dx9_initialization.aps 14KB
lake.bmp 192KB
dx5_logo.bmp 65KB
cloud.bmp 17KB
01 dx9_initialization.bsc 7.66MB
dx9_initialization.cpp 21KB
Dixing.cpp 6KB
camera.cpp 5KB
StaticMesh.cpp 4KB
stdafx.cpp 21B
Thumbs.db 23KB
mt.dep 67B
dx9_initialization.exe 604KB
dx9_initialization.exe 38KB
StaticMesh.h 1KB
camera.h 1KB
resource.h 1KB
Dixing.h 807B
stdafx.h 476B
BuildLog.htm 9KB
codesampler.ico 7KB
A.ico 2KB
vc80.idb 419KB
dx9_initialization.ilk 1.32MB
1.jpg 162KB
dx9_initialization.exe.intermediate.manifest 145B
dx9_initialization.ncb 11.83MB
StaticMesh.obj 298KB
dx9_initialization.obj 152KB
CWater.obj 114KB
camera.obj 74KB
CDolphin.obj 68KB
Dixing.obj 65KB
Clude.obj 61KB
stdafx.obj 49KB
CDirectInput.obj 32KB
dx9_initialization.pdb 2.39MB
vc80.pdb 300KB
E05O0504.png 39KB
dx9_initialization.rc 4KB
dx9_initialization.res 10KB
CDirectInput.sbr 0B
CWater.sbr 0B
dx9_initialization.sbr 0B
camera.sbr 0B
Dixing.sbr 0B
StaticMesh.sbr 0B
stdafx.sbr 0B
Clude.sbr 0B
dx9_initialization.sln 903B
dx9_initialization.suo 64KB
地面.tga 1013KB
房子4副本.tga 988KB
房子3副本.tga 952KB
桥1副本.tga 943KB
房子2副本.tga 941KB
房子7副本.tga 936KB
房子1副本.tga 910KB
房子6.tga 907KB
小东西 拷贝.tga 809KB
船副本.tga 755KB
房子5副本.tga 740KB
墙副本.tga 690KB
dx9_initialization.vcproj.C467C4776FD747A.Administrator.user 1KB
dx9_initialization.vcproj.40B94CAC0C6E47A.JUJUMAO.user 1KB
dx9_initialization.vcproj.ZZPROGRAM.Administrator.user 1KB
dx9_initialization.vcproj.JF121.Administrator.user 1KB
dx9_initialization.vcproj 6KB
屋23.X 304KB
屋28.X 298KB
屋24.X 298KB
船1.X 254KB
屋27.X 236KB
屋25.X 223KB
屋29.X 219KB
桌椅.X 176KB
屋21.X 172KB
车1.X 169KB
桥.X 169KB
屋7.X 167KB
车.X 165KB
屋10.X 159KB
屋14.X 159KB
屋3.X 159KB
屋12.X 159KB
屋5.X 159KB
屋1.X 159KB
屋22.X 156KB
桌椅1.X 154KB
屋15.X 151KB
屋20.X 151KB
屋26.X 137KB
门.X 127KB
屋11.X 122KB
屋4.X 122KB
屋18.X 122KB
屋16.X 122KB
护拦1.X 111KB
墙1.X 107KB
护拦6.X 104KB
共 123 条
- 1
- 2
LIONKING61
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0