D3D中透明渲染的总结

原创 2006年06月04日 17:54:00
1.渲染的先决条件
打开ALPHA渲染
m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);

 

对于通过程序顶点构造的多边形渲染时必须开启ALPHA通道
m_pd3dDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

设置为普通Alpha混合
m_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
m_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); 

2.Mesh透明渲染时
修改材质的Diffuse的Alpha值
D3DMATERIAL9* mat
mat.Diffuse.a=...;

开灯渲染
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING,true);

3.顶点多边形透明渲染
修改VB所指向的TLF顶点格式的Color(自己定义的)
struct TLV
{
   float x,y,z;
   DWORD color;
   float u,v;
}* pVertices;

m_pVB->Lock(0, m_dwVertexCount*sizeof(TLV), (void * *) &pVertices, 0);
for( DWORD i=0;i< m_dwVertexCount; i++)
{
      (pVertices+i)->dwColor=m_dwColor;
}
m_pVB->Unlock();

顶点多边形透明渲染必须关灯渲染
m_pd3dDevice->SetRenderState(D3DRS_LIGHTING,false);

4.调节渲染次序
  从半透明混合的原理知道,首先需要一个基础颜色,然后和另一个颜色进行混合。而在有时将3D物体渲染次序和在3D空间里的位置搞错时,就会发现透明物体后面的物体会消失的情况。这就需要对透明物体进行排序。
  排序所基于的原则是:
  远的物体先画,近的物体后画。
  先画不透明体,再画透明物体。

这里远的物体指的是离摄像机远的物体,这里只简单介绍得到物体远近的方法
构造8个视锥平面的顶点
通过PROJECTION矩阵映射到世界矩阵
从顶点构造出视锥体的XY平面(靠摄像机最近的XY平面)
将物体的XYZ代入下式即可得出距离视锥平面的远近了
D3DXPLANE plane;
plane.a*x+plane.b*y+plane.c*z+plane.d
结果为正时表示在摄像机前方,反之在后方

具体视锥面操作可以参考DXSDK里的Culling例子

DX11 3D半透明渲染

  • 2014年07月10日 00:03
  • 5.95MB
  • 下载

Direct3D 半透明渲染

Direct3D半透明渲染图片文件
  • bwmwm
  • bwmwm
  • 2011年05月27日 15:17
  • 2581

D3D中透明渲染的总结

1.渲染的先决条件 打开ALPHA渲染 m_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true); 对于通过程序顶点构造的多边形渲染时必须开...

SuperMap iClient for 3D透明面板

  • 2017年12月13日 17:27
  • 380KB
  • 下载

css3-3D透明照片墙

1.准备n张照片div放入照片,在同一个父级容器下设置父类的transform-style:preserve-3d和persepective六个div设置成绝对定位,重叠在一起2.子元素做简单的变换,...

【Unity3D Shader编程】之十三 单色透明Shader & 标准镜面高光Shader

本次更新放出的Shader为透明系列的3个Shader和标准的镜面高光Shader的两个Shader。由易到难,由入门级到应用级,难度梯度合理。 依然是先放出游戏场景的exe和运行截图。 ...
  • zhmxy555
  • zhmxy555
  • 2016年03月13日 16:48
  • 20863
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:D3D中透明渲染的总结
举报原因:
原因补充:

(最多只允许输入30个字)