direct3d实现金属光泽

mmx2008 2009-07-30 10:25:37

看到很多金属光泽的例子,很酷,请教高手,direct3d是如何实现金属光泽的?

或者说图形学上,金属光泽是如何实现的哪?

...全文
265 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingzhe2001 2009-07-30
  • 打赏
  • 举报
回复
xingzhe2001 2009-07-30
  • 打赏
  • 举报
回复
如果你不想用shader,用固定管线实现一个sphere map效果也足够了。directx7里有一个sphere map 的例子。参考这个实现

// Get the current world-view matrix
D3DMATRIX matWorld, matView, matWV;
m_pd3dDevice->GetTransform( D3DTRANSFORMSTATE_VIEW, &matView );
m_pd3dDevice->GetTransform( D3DTRANSFORMSTATE_WORLD, &matWorld );
D3DMath_MatrixMultiply( matWV, matWorld, matView );

// Extract world-view matrix elements for speed
FLOAT m11 = matWV._11, m21 = matWV._21, m31 = matWV._31;
FLOAT m12 = matWV._12, m22 = matWV._22, m32 = matWV._32;
FLOAT m13 = matWV._13, m23 = matWV._23, m33 = matWV._33;

// Loop through the vertices, transforming each one and calculating
// the correct texture coordinates.
for( WORD i = 0; i < dwNumVertices; i++ )
{
FLOAT nx = pvVertices[i].nx;
FLOAT ny = pvVertices[i].ny;
FLOAT nz = pvVertices[i].nz;

// Check the z-component, to skip any vertices that face backwards
if( nx*m13 + ny*m23 + nz*m33 > 0.0f )
continue;

// Assign the spheremap's texture coordinates
pvVertices[i].tu = 0.5f * ( 1.0f + ( nx*m11 + ny*m21 + nz*m31 ) );
pvVertices[i].tv = 0.5f * ( 1.0f - ( nx*m12 + ny*m22 + nz*m32 ) );
}



http://www.gamasutra.com/features/20000811/wyatt_l1.htm拷贝的。 不过我觉得在d3d9中用SetTranform(D3DTS_TEXTURE0,mat)更好。
张赐 2009-07-30
  • 打赏
  • 举报
回复
如果只是调节物体材质的反射,漫反射等,不能达到真正想金属一样的效果。

这个需要用GPU来实现,cg
zwqxin 2009-07-30
  • 打赏
  • 举报
回复
的确.....那些例子比较普遍的应该就是用了环境映射之类的....cube mapping,
可选择一张黑-白集中的纹理作为附加纹理叠加或混合原纹理
xingzhe2001 2009-07-30
  • 打赏
  • 举报
回复
加个环境映射会使物体看起来像光滑金属的反光。
mmx2008 2009-07-30
  • 打赏
  • 举报
回复

谢谢
xingzhe2001 2009-07-30
  • 打赏
  • 举报
回复
[img=http://xingzhe2001.bokee.com/inc/sphere_map.JPG ]这是我做的实验[/img]
xingzhe2001 2009-07-30
  • 打赏
  • 举报
回复
更简单的方法是,你只加这么两句

g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS,
D3DTTFF_COUNT2 );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX,
D3DTSS_TCI_SPHEREMAP );

就可以实现sphere map
xingzhe2001 2009-07-30
  • 打赏
  • 举报
回复
是啊
mmx2008 2009-07-30
  • 打赏
  • 举报
回复

请问,5楼的图片就是4楼的代码的显示吗?

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧