D3D加载纹理渲染
来源:互联网 发布:齐博cms模板 编辑:程序博客网 时间:2024/06/05 11:15
class CIndexBufferTest
{
public:
CIndexBufferTest(void);
virtual ~CIndexBufferTest(void);
public:
HRESULT D3DCreate( LPDIRECT3DDEVICE9 pd3dDevice );
void Render( LPDIRECT3DDEVICE9 pd3dDevice );
void SetMatrix( LPDIRECT3DDEVICE9 pd3dDevice );
private:
IDirect3DVertexBuffer9* m_pVB;
IDirect3DTexture9* m_pTexture;
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////struct Vertex
{
Vertex( float x, float y, float z, float nx, float ny, float nz, float u, float v )
{
_x = x;
_y = y;
_z = z;
_nx = nx;
_ny = ny;
_nz = nz;
_u = u;
_v =v;
}
float _x, _y, _z;
float _nx, _ny, _nz;
float _u, _v; // texture coordinates
static const DWORD FVF;
};
const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;
CIndexBufferTest::CIndexBufferTest(void)
{
m_pVB = NULL;
m_pTexture = NULL;
}
CIndexBufferTest::~CIndexBufferTest(void)
{
SAFE_RELEASE( m_pVB );
SAFE_RELEASE( m_pTexture );
}
HRESULT CIndexBufferTest::D3DCreate( LPDIRECT3DDEVICE9 pd3dDevice )
{
if( FAILED( pd3dDevice->CreateVertexBuffer( 6 * sizeof(Vertex), D3DUSAGE_WRITEONLY, Vertex::FVF, D3DPOOL_MANAGED, &m_pVB, 0 ) ) )
return E_FAIL;
Vertex* v;
m_pVB->Lock(0, 0, (void**)&v, 0);
// quad built from two triangles, note texture coordinates:
v[0] = Vertex(-1.0f, -1.0f, 1.25f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
v[1] = Vertex(-1.0f, 1.0f, 1.25f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f);
v[2] = Vertex( 1.0f, 1.0f, 1.25f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);
v[3] = Vertex(-1.0f, -1.0f, 1.25f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f);
v[4] = Vertex( 1.0f, 1.0f, 1.25f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f);
v[5] = Vertex( 1.0f, -1.0f, 1.25f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f);
m_pVB->Unlock();
if( FAILED( D3DXCreateTextureFromFile( pd3dDevice, L"Dwarf\\Body.dds", &m_pTexture ) ) )
return E_FAIL;
pd3dDevice->SetTexture( 0, m_pTexture );
pd3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
pd3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
//
// Don't use lighting for this sample.
//
pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);
// 照相机位置(视图矩阵)
D3DXVECTOR3 position(0.0f, 0.0f, -5.0f);
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &up);
pd3dDevice->SetTransform(D3DTS_VIEW, &V);
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH(
&proj,
D3DX_PI * 0.5f, // 90 - degree
1.0f,
1.0f,
1000.0f);
pd3dDevice->SetTransform(D3DTS_PROJECTION, &proj);
pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
pd3dDevice->SetRenderState(D3DRS_LIGHTING, false);
return S_OK;
}
void CIndexBufferTest::SetMatrix( LPDIRECT3DDEVICE9 pd3dDevice )
{
D3DXMATRIX Rx, Ry;
D3DXMatrixRotationX(&Rx, 3.14f / 4.0f);
static float y = 0.0f;
D3DXMatrixRotationY(&Ry, y);
y += 0.01f;
//当y轴旋转2周时,重新回到0弧度
if( y >= 6.28f )
y = 0.0f;
D3DXMATRIX p = Rx * Ry;
pd3dDevice->SetTransform(D3DTS_WORLD, &p);
}
void CIndexBufferTest::Render( LPDIRECT3DDEVICE9 pd3dDevice )
{
SetMatrix( pd3dDevice );
pd3dDevice->SetStreamSource(0, m_pVB, 0, sizeof(Vertex)); // 设置资源流
pd3dDevice->SetFVF(Vertex::FVF); // 设置顶点格式
pd3dDevice->SetTexture(0, m_pTexture);
// 利用索引缓存绘制
pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////HRESULT D3DXCreateTextureFromFile //创建纹理
(
LPDIRECT3DDEVICE9 pDevice, //有效的3D设置指针
LPCTSTR pSreFile, //图形文件的路径及文件名
LPDIRECT3DTEXTURE9 *ppTexture //存储3D纹理的指针地址
);
HRESULT SetTextrue //指定纹理
(
DWORD Stage, //指定关联的纹理层
IDirect3DBaseTextrue9 *pTexture //IDirect3D纹理接口指针
)
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_POINT );//设置最近采样过滤
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );//设置线性纹理过滤
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC );//设置异性纹理过滤
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_MAXANISOTROPY, 4 );//需调用GetDeviceCaps()检测最大异性值
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP );//设置重叠纹理寻址
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR );//设置镜像纹理寻址
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP );//设置夹取纹理寻址
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP );
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER );//设置边框纹理寻址
m_pd3dDevice->SetSamplerState( 0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER );
m_pd3dDevice->SetSamplerState( 0, D3DTADDRESS_BORDER, 0xffff0000 );
- D3D加载纹理渲染
- D3D中的渲染到纹理
- D3D中的渲染到纹理
- D3D中的渲染到纹理
- D3D加载纹理的步骤(1)
- D3D中的一项高级技术---渲染到纹理
- (D3D)dx9实现渲染到纹理(Render To Texture, RTT)
- D3D纹理
- D3D纹理
- Lessong 7 纹理加载和渲染
- 利用DSHOW中的VMR9 filter 将视频渲染成纹理 供D3D使用
- 【D3D Review】4 纹理
- d3d纹理过滤
- D3D学习笔记:纹理
- D3D纹理基础
- D3D纹理混合方式
- D3D纹理混合
- D3D 纹理映射
- jsp对同名checkbox的处理
- 【最大二分匹配匈牙利算法】hdu 3729
- 使SHOP++支持 JDK1.5、Websphere 、Oracle
- Ubuntu 完全卸载Firefox 的办法
- 项目管理学习笔记之四成本管理过程总结
- D3D加载纹理渲染
- ASP.NET网站发布-允许更新此预编译站点 .
- WinCE BSP的BIB文件介绍
- Listry:试图颠覆Wiki和Digg的内容创作终极模式
- “五险一金”的深入解析
- Ubuntu 中 Firefox 安装 Flash Player
- 学习,anychart xml文件详解
- maven
- Java IO reader and writer