//////////////////////////////////////////////////////////////////////////////////////////////////
//
// 文件: Example4_1.cpp
//
// 作者:秦春
//
// 系统: Windows Vista, VC++2008
//
// 描述: 演示在立方体每个表面添加一个单独的纹理
//
// 日期:2009.9.5
//
//////////////////////////////////////////////////////////////////////////////////////////////////
#include "d3dUtility.h"
//
// 全局变量
//
LPDIRECT3DDEVICE9 Device = 0; //D3D设备指针
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; //顶点缓存指针
LPDIRECT3DTEXTURE9 m_pTex[6] ={NULL}; //定义纹理指针数组
const int Width = 640;
const int Height = 480;
//自定义顶点格式
struct CUSTOMERVERTEX
{
FLOAT x, y, z; //三维坐标
DWORD colour; //顶点颜色
FLOAT tu, tv; //纹理坐标
static const DWORD FVF;
};
const DWORD CUSTOMERVERTEX::FVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1);
//
// 框架函数
//
//建立立方体,并给立方体加上纹理坐标信息
bool SetCube()
{
float length = 5.0; //立方体边长
// 设置顶点位置,颜色信息
CUSTOMERVERTEX g_Vertices[] =
{
//顶面顶点
{-length, length, -length, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 1.0f},
{-length, length, length, D3DCOLOR_XRGB(0, 255, 0), 0.0f, 0.0f},
{length, length, -length, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 1.0f},
{length, length, length, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0.0f},
//左面顶点
{-length, length, length, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 1.0f},
{-length, length, -length, D3DCOLOR_XRGB(0, 255, 0), 0.0f, 0.0f},
{-length, -length, length, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 1.0f},
{-length, -length, -length, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0.0f},
//正面顶点
{-length, -length, -length, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 1.0f},
{-length, length, -length, D3DCOLOR_XRGB(0, 255, 0), 0.0f, 0.0f},
{length, -length, -length, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 1.0f},
{length, length, -length, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0.0f},
//右面顶点
{length, length, -length, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 1.0f},
{length, length, length, D3DCOLOR_XRGB(0, 255, 0), 0.0f, 0.0f},
{length, -length, -length, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 1.0f},
{length, -length, length, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0.0f},
//背面顶点
{length, -length, length, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 1.0f},
{length, length, length, D3DCOLOR_XRGB(0, 255, 0), 0.0f, 0.0f},
{-length, -length, length, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 1.0f},
{-length, length, length, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0.0f},
//底面顶点
{length, -length, -length, D3DCOLOR_XRGB(255, 0, 0), 0.0f, 1.0f},
{length, -length, length, D3DCOLOR_XRGB(0, 255, 0), 0.0f, 0.0f},
{-length, -length, -length, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 1.0f},
{-length, -length, length, D3DCOLOR_XRGB(255, 255, 0), 1.0f, 0.0f},
};
VOID* pVertices;
//创建顶点缓存
if(FAILED(Device->CreateVertexBuffer(24*sizeof(CUSTOMERVERTEX), D3DUSAGE_SOFTWAREPROCESSING, CUSTOMERVERTEX::FVF, D3DPOOL_DEFAULT, &g_pVB, NULL)))
{
::MessageBox(0, "CreateVertexBuffer() - FAILED", 0, 0);
return false;
}
//锁定顶点缓存
if(FAILED(g_pVB->Lock(0, 0, (void**)&pVertices, 0)))
{
::MessageBox(0, "锁定顶点缓存失败", 0, 0);
return false;
}
//拷贝顶点信息
memcpy(pVertices, g_Vertices, sizeof(g_Vertices));
//解锁
g_pVB->Unlock();
return true;
}
//从磁盘文件获取纹理
bool CreateTexture()
{
if( FAILED(D3DXCreateTextureFromFile(Device, "1.jpg", &m_pTex[0])))
{
MessageBox(NULL, "纹理1初始化失败 !", "Errow", MB_OK);
return false;
};
if( FAILED(D3DXCreateTextureFromFile(Device, "2.jpg", &m_pTex[1])))
{
MessageBox(NULL, "纹理2初始化失败 !", "Errow", MB_OK);
return false;
};
if( FAILED(D3DXCreateTextureFromFile(Device, "3.jpg", &m_pTex[2])))
{
MessageBox(NULL, "纹理3初始化失败 !", "Errow", MB_OK);
return false;
};
if( FAILED(D3DXCreateTextureFromFile(Device, "4.jpg", &m_pTex[3])))
{
MessageBox(NULL, "纹理4初始化失败 !", "Errow", MB_OK);
return false;
};
if( FAILED(D3DXCreateTextureFromFile(Device, "5.jpg", &m_pTex[4])))
{
MessageBox(NULL, "纹理5初始化失败 !", "Errow", MB_OK);
return false;
};
if( FAILED(D3DXCreateTextureFromFile(Device, "6.jpg", &m_pTex[5])))
{
MessageBox(NULL, "纹理6初始化失败 !", "Errow", MB_OK);
return false;
};
return true;
}
//进行组合变换
void SetupRotation(float timeDelta)
{
//定义变换矩阵
D3DXMATRIX matWorld, matWorldX, matWorldY, matWorldZ;
D3DXMATRIX matTranslate, matScale;
//缩放变换
D3DXMatrixScaling(&matScale, 1, 1, 1);
//平移变换
D3DXMatrixTranslation(&matTranslate, 0, 0, 0);
//旋转变换
D3DXMatrixRotationX(&matWorldX, timeGetTime() / 400.0f);
D3DXMatrixRotationY(&matWorldY, timeGetTime() / 400.0f);
D3DXMatrixRotationZ(&matWorldZ, timeGetTime() / 400.0f);
//组合变换
D3DXMatrixMultiply(&matWorld, &matWorldX, &matWorldY);
D3DXMatrixMultiply(&matWorld, &matWorld, &matWorldZ);
D3DXMatrixMultiply(&matWorld, &matWorld, &matTranslate);
D3DXMatrixMultiply(&matWorld, &matWorld, &matScale);
Device->SetTransform(D3DTS_WORLD, &matWorld);
}
bool Setup()
{
//建立立方体
SetCube();
//加载纹理
CreateTexture();
// 设置摄像机位置.
D3DXVECTOR3 position(0.0f, 0.0f, -20.0f);
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &up);
Device->SetTransform(D3DTS_VIEW, &V);
// 设置投影矩阵.
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(
&proj,
D3DX_PI * 0.5f, // 90 - degree
(float)Width / (float)Height,
1.0f,
1000.0f);
Device->SetTransform(D3DTS_PROJECTION, &proj);
//设置禁止光线
Device->SetRenderState(D3DRS_LIGHTING, false);
//设置渲染着色方式
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
//设置纹理过滤方式
Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
//将数据源设置到顶点缓存
Device->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMERVERTEX));
//设置自定义顶点格式
Device->SetFVF(CUSTOMERVERTEX::FVF);
return true;
}
//释放建立的对象
void Cleanup()
{
for(int i = 0; i<6; i++)
d3d::Release(m_pTex[i]);
d3d::Release(g_pVB);
d3d::Release(Device);
}
bool Display(float timeDelta)
{
if( Device ) // 如果已经有有效设备Device,则使用 Device 进行图形显示.
{
//进行组合变换
SetupRotation(timeDelta);
// 清空3D设备,通知设备将后缓存中每个像素设置为黑色 - D3DCLEAR_TARGET: D3DCOLOR_XRGB(0, 0, 0)
Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(255,255, 255), 1.0f, 0);
//进行实际的绘制工作
Device->BeginScene();
//绘制立方体并渲染纹理
for(int i = 0; i < 6; i++)
{
//设置第i个面的纹理
Device->SetTexture(0, m_pTex[i]);
//渲染顶点缓存中第i个面的顶点
Device->DrawPrimitive(D3DPT_TRIANGLESTRIP, i*4, 2);
}
//结束绘制
Device->EndScene();
// 将后台缓存内容复制到前台缓存.
Device->Present(0, 0, 0, 0);
}
return true;
}
//
// WndProc
//
LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch( msg )
{
case WM_DESTROY:
::PostQuitMessage(0);
break;
case WM_KEYDOWN:
if( wParam == VK_ESCAPE )
::DestroyWindow(hwnd);
break;
}
return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
//
// WinMain
//
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE prevInstance,
PSTR cmdLine,
int showCmd)
{
if(!d3d::InitD3D(hinstance,
Width, Height, true, D3DDEVTYPE_HAL, &Device))
{
::MessageBox(0, "InitD3D() - FAILED", 0, 0);
return 0;
}
if(!Setup())
{
::MessageBox(0, "Setup() - FAILED", 0, 0);
return 0;
}
d3d::EnterMsgLoop( Display );
Cleanup();
// 注销窗口类
UnregisterClass("base", hinstance);
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
《网络游戏客户端编程》第4章示例程序
共79个文件
jpg:11个
cpp:9个
obj:9个
需积分: 10 60 下载量 96 浏览量
2009-09-08
06:47:39
上传
评论
收藏 5.12MB RAR 举报
温馨提示
日前我已上传了《网络游戏客户端编程》第2、3章的示例程序,今再上传第4章的示例程序,望能对初学者有所帮助,也希望能得到朋友的指教。
资源推荐
资源详情
资源评论
收起资源包目录
4.rar (79个子文件)
Example4
Example4.ncb 16.37MB
Example4_1
5.jpg 985B
3.jpg 941B
d3dUtility.cpp 4KB
4.jpg 948B
2.jpg 953B
Debug
Example4_1.exe.intermediate.manifest 621B
vc90.idb 667KB
BuildLog.htm 6KB
d3dUtility.obj 53KB
mt.dep 63B
vc90.pdb 388KB
Example4_1.obj 70KB
1.jpg 832B
Example4_1.vcproj.秦春.user.user 1KB
6.jpg 978B
d3dUtility.h 1KB
Example4_1.cpp 8KB
Example4_1.vcproj 4KB
Example4.sln 2KB
Example4.suo 18KB
Debug
Example4_3.exe 37KB
Example4_1.exe 37KB
Example4_4.ilk 416KB
Example4_3.ilk 385KB
Example4_2.exe 34KB
Example4_1.pdb 723KB
Example4_4.exe 56KB
Example4_4.pdb 755KB
Example4_1.ilk 393KB
Example4_2.pdb 715KB
Example4_2.ilk 376KB
Example4_3.pdb 723KB
Example4_4
Example4_4.vcproj 4KB
3.jpg 941B
d3dUtility.cpp 5KB
cube.h 662B
4.jpg 948B
2.jpg 953B
Debug
cube.obj 53KB
Example4_4.obj 84KB
Example4_4.exe.intermediate.manifest 621B
vc90.idb 683KB
BuildLog.htm 6KB
d3dUtility.obj 75KB
mt.dep 63B
vc90.pdb 388KB
1.jpg 832B
Example4_4.vcproj.秦春.user.user 1KB
Example4_4.cpp 5KB
vertex.h 821B
d3dUtility.h 2KB
cube.cpp 3KB
Example4_3
d3dUtility.cpp 4KB
Example4_3.vcproj.秦春.user.user 1KB
Example4_3.vcproj 4KB
Debug
Example4_3.obj 68KB
vc90.idb 667KB
BuildLog.htm 6KB
d3dUtility.obj 53KB
mt.dep 63B
vc90.pdb 388KB
Example4_3.exe.intermediate.manifest 621B
Example4_3.cpp 6KB
d3dUtility.h 1KB
crate1.JPG 6KB
Example4_2
d3dUtility.cpp 4KB
Example4_2.vcproj.秦春.user.user 1KB
Example4_2.vcproj 4KB
dx5_logo.bmp 65KB
Example4_2.cpp 6KB
Debug
Example4_2.exe.intermediate.manifest 621B
vc90.idb 667KB
BuildLog.htm 6KB
Example4_2.obj 63KB
d3dUtility.obj 53KB
mt.dep 63B
vc90.pdb 388KB
d3dUtility.h 1KB
共 79 条
- 1
资源评论
qinchunlf
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功