水纹特效vc++源码


 /头文件/
#pragma once
#include "Node.h"
struct WaterUpVertex 
{
float x, y, z;
float tu, tv;

enum FVF
{
FVF_Flags = D3DFVF_XYZ | D3DFVF_TEX1
};
};
struct WaterDownVertex
{
float x, y, z;
float nx, ny, nz;

enum FVF
{
FVF_Flags = D3DFVF_XYZ | D3DFVF_NORMAL
};
};

class Water : public CNode
{
public:


LPDIRECT3DVERTEXBUFFER9 m_pWaterDownVB;//材质面顶点缓冲
LPDIRECT3DINDEXBUFFER9 m_pWaterDownIB;//材质面索引缓冲
LPDIRECT3DTEXTURE9 m_pWaterTextures[30];//贴图面纹理数组
WaterUpVertex m_WaterUpVertices[4];//贴图面顶点数组
LPDIRECT3DDEVICE9 m_pDevice;

float m_fWidth;//水面尺寸
float m_fLength;
float m_fTileLength;//水面单元格大小s
UINT m_uiNumXTile;//单元格行数
UINT m_uiNumYTile;//单元格列数
UINT m_uiNumTiles;//单元格总数
UINT m_uiNumVertices;//材质面顶点数
UINT m_uiNumIndices;//材质面索引数
UINT m_uiNumXWrap;//贴图面U向贴图数
UINT m_uiNumYWrap;//贴图面V向贴图数
UINT m_iCurrenrtFrame;//显示帧的当前帧
UINT m_fLifeTime;//换帧计时器

D3DMATERIAL9 m_WaterMaterial;


Water(void);
~Water(void);

// @param fWidth 水面的宽度
// @param fLength 水面的长度
// @param fTileLength 下层水面的格子长度
// @param uiNumWrap 上层水面的纹理包装次数
void Init(float fWidth, float fLength, float fTileLength, UINT uiNumXWrap, 
UINT uiNumYWrap,  TCHAR* pWaterPrefix,float height ,LPDIRECT3DDEVICE9 pDevice );

void Render( float fElapsedTime ); //换帧时间


};
///

源文件///
#include "StdAfx.h"
#include "Water.h"


Water::Water(void) 
{
m_pWaterDownVB=NULL;
m_pWaterDownIB=NULL;
m_pDevice=NULL;

m_uiNumXTile=0;
m_uiNumYTile=0;
m_uiNumTiles=0;
m_uiNumVertices=0;
m_uiNumIndices=0;
m_fTileLength=0.f;
m_fWidth=0.f;
m_fLength=0.f;
m_uiNumXWrap=0;
m_uiNumYWrap=0;
m_iCurrenrtFrame=0;
m_fLength=0;
}

Water::~Water(void)
{
for( int i = 0; i < 30; ++i )
{
SAFE_RELEASE(m_pWaterTextures[i]);
}
SAFE_RELEASE(m_pWaterDownVB);
SAFE_RELEASE(m_pWaterDownIB);
}

void Water::Init(float fWidth, float fLength, float fTileLength, UINT uiNumXWrap,
   UINT uiNumYWrap, TCHAR* pWaterPrefix,float height, LPDIRECT3DDEVICE9 pDevice )
{
m_pDevice = pDevice;

m_fWidth = fWidth;
m_fLength = fLength;
m_fTileLength = fTileLength;

m_uiNumXTile = (UINT)(m_fWidth / m_fTileLength);
m_uiNumYTile = (UINT)(m_fLength / m_fTileLength);
m_uiNumTiles = m_uiNumXTile * m_uiNumYTile;
m_uiNumVertices = m_uiNumTiles * 4;
m_uiNumIndices = m_uiNumTiles * 6;

m_uiNumXWrap = uiNumXWrap;
m_uiNumYWrap = uiNumYWrap;

for( int i = 0; i < 30; ++i )//图片的相关信息
{
TCHAR cWaterIdx[255];
wsprintf(cWaterIdx,_T("%s%d.tga"),pWaterPrefix,i+1);//%s:pWaterPrefix   %d:i+1
D3DXCreateTextureFromFile( pDevice, cWaterIdx, &m_pWaterTextures[i] );
}
//水面贴图面4个顶点的初始化
float fHalfWidth = m_fWidth * 0.5f;
float fHalfLength = m_fLength * 0.5f;
m_WaterUpVertices[0].x = m_pos.x-fHalfWidth;
m_WaterUpVertices[0].y = height;
m_WaterUpVertices[0].z = m_pos.y-fHalfLength;
m_WaterUpVertices[0].tu = 0.f;
m_WaterUpVertices[0].tv = (float)m_uiNumYWrap;

m_WaterUpVertices[1].x = m_pos.x+fHalfWidth;
m_WaterUpVertices[1].y = height;
m_WaterUpVertices[1].z = m_pos.y-fHalfLength;
m_WaterUpVertices[1].tu = (float)m_uiNumXWrap;
m_WaterUpVertices[1].tv = (float)m_uiNumYWrap;

m_WaterUpVertices[2].x = m_pos.x-fHalfWidth;
m_WaterUpVertices[2].y = height;
m_WaterUpVertices[2].z = m_pos.y+fHalfLength;
m_WaterUpVertices[2].tu = 0.f;
m_WaterUpVertices[2].tv = 0.f;

m_WaterUpVertices[3].x = m_pos.x+fHalfWidth;
m_WaterUpVertices[3].y = height;
m_WaterUpVertices[3].z = m_pos.y+fHalfLength;
m_WaterUpVertices[3].tu = (float)m_u
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值