首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

请教D3D怎么实现水面倒影效果(不用shader和模板检测)

2012-03-31 
请问D3D如何实现水面倒影效果(不用shader和模板检测)初学者,找不到详尽的实例作参考。我看到好多书都是将周

请问D3D如何实现水面倒影效果(不用shader和模板检测)
初学者,找不到详尽的实例作参考。

我看到好多书都是将周围环境 渲染到纹理(render-to-texuture)。然后将纹理贴到水面上。但都讲得不清楚。

请问如何实现将环境渲染到纹理?

这个效果不用SHADER实现可以吗?

CUBEMAPS又是什么用处?

请各位指教。

[解决办法]
原理就是对水面的贴图纹理进行扰动,以产生波光玲玲的效果。
不用shader你可以手工对每个顶点的uv坐标作随机的扰动也可以,
但是很慢,需要很多顶点,效果也不好看
用shader可以通过GPU在像素级别作扰动,效果细腻,需要的顶点少,速度快

CubeMap是一种贴图,有上下左右前后6个面都是贴图,通常用来模拟一个无限远的充满四周的环境,比如天空。
[解决办法]
现在一般都是用这种技术
给你一个官方的教程

希望对你有帮助

http://developer.nvidia.com/object/gdc_oglrtt.html
[解决办法]
#pragma once
#include "Stdafx.h"
class CShadowVolume
{
struct VERTEX_SHADOW
{
D3DXVECTOR3 p;
FLOATrhw;
D3DCOLOR color;

enum FVF
{
FVF_Flags = D3DFVF_XYZRHW | D3DFVF_DIFFUSE
};
};

LPDIRECT3DDEVICE9 m_pDevice;
// 阴影体的顶点数据
D3DXVECTOR3 *m_pVertices;
// 顶点数量
DWORD m_dwNumVertices;

DWORD m_dwStencilCaps;
LPDIRECT3DVERTEXBUFFER9 m_pBigSquareVB;

public:
CShadowVolume(void);
~CShadowVolume(void);

bool Init(LPDIRECT3DDEVICE9 pDevice);
/** 根据光源从模型创建阴影体
*/
void BuildFromMesh( LPD3DXMESH pMesh, const D3DXVECTOR3 &vLight );
/** 渲染阴影体到模板缓冲区
*/
void Render(void);
/** 绘制阴影到颜色缓冲区,把模板缓冲区内容表现在颜色缓冲区
*/
void DrawShadow(void);
/** 渲染阴影体到颜色缓冲区
*/
void RenderVolume(void);
};

热点排行