/*
#############################################################################
D3DHelperFuncs.cpp - a set of my (Mason's) helper functions for dealing
with Direct3D.
#############################################################################
*/
// Include Directives ///////////////////////////////////////////////////////
#include "D3DHelperFuncs.h"
// Local Constants, namespace usage /////////////////////////////////////////
// Local Variables / functions //////////////////////////////////////////////
/****************************************************************************
SurfFormatToString: converts a D3DFMT_ enumeration into a string.
****************************************************************************/
char *SurfFormatToString(D3DFORMAT srcformat)
{
switch(srcformat) {
case D3DFMT_UNKNOWN: return("D3DFMT_UNKNOWN");
case D3DFMT_R8G8B8: return("D3DFMT_R8G8B8");
case D3DFMT_A8R8G8B8: return("D3DFMT_A8R8G8B8");
case D3DFMT_X8R8G8B8: return("D3DFMT_X8R8G8B8");
case D3DFMT_R5G6B5: return("D3DFMT_R5G6B5");
case D3DFMT_X1R5G5B5: return("D3DFMT_X1R5G5B5");
case D3DFMT_A1R5G5B5: return("D3DFMT_A1R5G5B5");
case D3DFMT_A4R4G4B4: return("D3DFMT_A4R4G4B4");
case D3DFMT_R3G3B2: return("D3DFMT_R3G3B2");
case D3DFMT_A8: return("D3DFMT_A8");
case D3DFMT_A8R3G3B2: return("D3DFMT_A8R3G3B2");
case D3DFMT_X4R4G4B4: return("D3DFMT_X4R4G4B4");
case D3DFMT_A8P8: return("D3DFMT_A8P8");
case D3DFMT_P8: return("D3DFMT_P8");
case D3DFMT_L8: return("D3DFMT_L8");
case D3DFMT_A8L8: return("D3DFMT_A8L8");
case D3DFMT_A4L4: return("D3DFMT_A4L4");
case D3DFMT_V8U8: return("D3DFMT_V8U8");
case D3DFMT_L6V5U5: return("D3DFMT_L6V5U5");
case D3DFMT_X8L8V8U8: return("D3DFMT_X8L8V8U8");
case D3DFMT_Q8W8V8U8: return("D3DFMT_Q8W8V8U8");
case D3DFMT_V16U16: return("D3DFMT_V16U16");
//case D3DFMT_W11V11U10: return("D3DFMT_W11V11U10");
case D3DFMT_UYVY: return("D3DFMT_UYVY");
case D3DFMT_YUY2: return("D3DFMT_YUY2");
case D3DFMT_DXT1: return("D3DFMT_DXT1");
case D3DFMT_DXT2: return("D3DFMT_DXT2");
case D3DFMT_DXT3: return("D3DFMT_DXT3");
case D3DFMT_DXT4: return("D3DFMT_DXT4");
case D3DFMT_DXT5: return("D3DFMT_DXT5");
case D3DFMT_D16_LOCKABLE: return("D3DFMT_D16_LOCKABLE");
case D3DFMT_D32: return("D3DFMT_D32");
case D3DFMT_D15S1: return("D3DFMT_D15S1");
case D3DFMT_D24S8: return("D3DFMT_D24S8");
case D3DFMT_D16: return("D3DFMT_D16");
case D3DFMT_D24X8: return("D3DFMT_D24X8");
case D3DFMT_D24X4S4: return("D3DFMT_D24X4S4");
case D3DFMT_VERTEXDATA: return("D3DFMT_VERTEXDATA");
case D3DFMT_INDEX16: return("D3DFMT_INDEX16");
case D3DFMT_INDEX32: return("D3DFMT_INDEX32");
default: return("**UNKNOWN**");
};
return("");
}
HRESULT CreateQuad(LPDIRECT3DVERTEXBUFFER9 *pVB, D3DPOOL pool, float fSize,
DWORD dwColor, LPDIRECT3DDEVICE9 pDev,
float fTexTileX, float fTexTileY)
{
HRESULT hr;
if(FAILED(hr = pDev->CreateVertexBuffer(6*sizeof(VERTEX_XYZ_DIFFUSE_TEX1),
0, D3DFVF_XYZ_DIFFUSE_TEX1, pool, pVB,NULL)))
return hr;
/*
首先创建了顶点缓存接口。这里面的fTexTileX、fTexTileY使用了默认的值,都为1。
*/
VERTEX_XYZ_DIFFUSE_TEX1 *pVertices;
float fSizeDiv2 = fSize/2;
if( FAILED( hr = (*pVB)->Lock( 0, 6*sizeof(VERTEX_XYZ_DIFFUSE_TEX1), (void**)&pVertices, 0 ) ) )
return hr;
// first triangle
pVertices[0].position = D3DXVECTOR3(-fSizeDiv2, fSizeDiv2, 0.0f);
pVertices[0].color = dwColor;
pVertices[0].tu = 0.0f;
pVertices[0].tv = 0.0f;
pVertices[1].position = D3DXVECTOR3(fSizeDiv2, fSizeDiv2, 0.0f);
pVertices[1].color = dwColor;
pVertices[1].tu = fTexTileX;
pVertices[1].tv = 0.0f;
pVertices[2].position = D3DXVECTOR3(fSizeDiv2, -fSizeDiv2, 0.0f);
pVertices[2].color = dwColor;
pVertices[2].tu = fTexTileX;
pVertices[2].tv = fTexTileY;
// second triangle
pVertices[3].position = D3DXVECTOR3(-fSizeDiv2, fSizeDiv2, 0.0f);
pVertices[3].color = dwColor;
pVertices[3].tu = 0.0f;
pVertices[3].tv = 0.0f;
pVertices[4].position = D3DXVECTOR3(fSizeDiv2, -fSizeDiv2, 0.0f);
pVertices[4].color = dwColor;
pVertices[4].tu = fTexTileX;
pVertices[4].tv = fTexTileY;
pVertices[5].position = D3DXVECTOR3(-fSizeDiv2, -fSizeDiv2, 0.0f);
pVertices[5].color = dwColor;
pVertices[5].tu = 0.0f;
pVertices[5].tv = fTexTileY;
if( FAILED( hr = (*pVB)->Unlock() ) ) return hr;
return(S_OK);
}
HRESULT CreateVertexGrid(LPDIRECT3DVERTEXBUFFER9 *pVB, LPDIRECT3DINDEXBUFFER9 *pIB,
D3DPOOL pool, float fTotalSize, DWORD dwColor,
int iNumVerticesX, int iNumVerticesY, LPDIRECT3DDEVICE9 pDev)
{
HRESULT hr;
// create and fill vertex buffer
{
if(FAILED(hr = pDev->CreateVertexBuffer(iNumVerticesX*iNumVerticesY*sizeof(VERTEX_XYZ_DIFFUSE_TEX1),
0, D3DFVF_XYZ_DIFFUSE_TEX1, pool, pVB,NULL)))
return hr;
VERTEX_XYZ_DIFFUSE_TEX1 *pVertices;
float fSizeDiv2 = fTotalSize/2;
if( FAILED( hr = (*pVB)->Lock( 0, iNumVerticesX*iNumVerticesY*sizeof(VERTEX_XYZ_DIFFUSE_TEX1), (void**)&pVertices, 0 ) ) )
return hr;
for (int x=0; x < iNumVerticesX; x++) {
for (int y=0; y < iNumVerticesY; y++) {
pVertices[(y*iNumVerticesX)+x].position = D3DXVECTOR3(
(iNumVerticesX > 1) ? (((float)x/(float)(iNumVerticesX-1))*fTotalSize)-fSizeDiv2 : 0,
(iNumVerticesY > 1) ? (((float)(iNumVerticesY-1-y)/(float)(iNumVerticesY-1))*fTotalSize)-fSizeDiv2 : 0,
0.0f);
pVertices[(y*iNumVerticesX)+x].color = dwColor;
pVertices[(y*iNumVerticesX)+x].tu = (float)x/(float)(iNumVerticesX-1);
pVertices[(y*iNumVerticesX)+x].tv = (float)y/(float)(iNumVerticesY-1);
}
}
}
// create index buffer
{
if(FAILED(hr = pDev->CreateIndexBuffer(
iNumVerticesX*iNumVerticesY*2*3*2, // *2 (tris) *3 (indicies per tri) * 2 (bytes per index)
D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,
D3DPOOL_MANAGED, pIB,NULL)))
return hr;
// lock and fill index buffer
WORD *pIndices;
if(FAILED(hr = (*pIB)->Lock(0, iNumVerticesX*iNumVerticesY*2*3*2, ( void **)&pIndices,
0)))
return hr;
WORD *pIndex = pIndices;
for (int x=0; x < iNumVerticesX-1; x++) {
for (int y=0; y < iNumVerticesY-1; y++) {
// first triangle
*(pIndex++) = ((y)*iNumVerticesX)+x;
*(pIndex++) = ((y)*iNumVerticesX)+x+1;
*(pIndex++) = ((y+1)*iNumVerticesX)+x+1;
// second triangle
*(pIndex++) = ((y)*iNumVerticesX)+x;
*(pIndex++) = ((y+1)*iNumVerticesX)+x+1;
*(pIndex++) = ((y+1)*iNumVerticesX)+x;
}
}
if(FAILED(hr = (*pIB)->Unlock())) return hr;
if(FAILED(hr = (*pVB)->Unlock())) return hr;
}
return(S_OK);
}
HRESULT CreateVertexFrame(LPDIRECT3DVERTEXBUFFER9 *pVB, LPDIRECT3DINDEXBUFFER
没有合适的资源?快使用搜索试试~ 我知道了~
perlin噪声生成的云
共39个文件
cpp:7个
obj:7个
h:6个
需积分: 41 14 下载量 108 浏览量
2013-10-02
21:13:47
上传
评论
收藏 3.44MB RAR 举报
温馨提示
这是书上的directx direct8.0的程序,我修改为d9的,但是,没有想到会是这样子的,书上说是云,我觉得一点都不像。感觉完全是混乱的。重点是这个思想,所以,我先发程序了。
资源推荐
资源详情
资源评论
收起资源包目录
Perlin_cloud.rar (39个子文件)
Perlin_cloud
Cloud.cpp 13KB
camera.opt 51KB
d3dUtility.h 4KB
camera.plg 927B
Debug
vc60.pdb 236KB
D3DHelperFuncs.obj 57KB
camera.sbr 1.16MB
pSystem.obj 64KB
vc60.idb 377KB
d3dUtility.obj 70KB
camera.ilk 395KB
CommonFuncs.obj 53KB
camera.obj 40KB
desert.bmp 768KB
camera.exe 264KB
cameraApp.sbr 0B
d3dUtility.sbr 0B
Cloud.obj 62KB
cameraApp.obj 57KB
camera.pch 6.33MB
camera.pdb 737KB
camera.bsc 3.67MB
camera.h 1KB
cameraApp.cpp 4KB
D3DHelperFuncs.cpp 18KB
~VC16C.tmp 0B
Cloud.h 2KB
camera.ncb 209KB
CommonFuncs.cpp 4KB
camera.dsw 520B
d3dUtility.cpp 10KB
camera.dsp 4KB
D3DHelperFuncs.h 5KB
desert.bmp 768KB
pSystem.h 1KB
pSystem.cpp 5KB
camera.cpp 4KB
CommonFuncs.h 3KB
~VC16B.tmp 0B
共 39 条
- 1
资源评论
a03910
- 粉丝: 134
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Vue和TypeScript的房地产管理系统前端设计源码
- 基于微信小程序的通用订票系统设计源码
- 基于ThinkPHP的轻量级PHP开发框架设计源码
- 基于CSS的响应式鲜花网站全屏效果设计源码
- 基于JavaScript的访客预约系统设计源码
- 基于Vue和ECharts的工作租房数据可视化系统设计源码
- 1040g0cg310ravpiu6ibg5pg00tsipsln3ju2d0g 2
- 基于Python的SAR图像去噪CNN-NLM设计源码
- redhat6升级到redhat7,过程redhat6.x-> redhat6.10->rehat7.9 主版本最高版本
- 基于Django的流程引擎设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功