游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2021|回复: 3

动态立方体环境贴图生成问题

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-11-9 13:08:00 | 显示全部楼层 |阅读模式
HRESULT RenderSceneIntoEnvMap()
{    HRESULT hr;            // 设置投影矩阵
     D3DXMATRIXA16 matProj;
         D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI * 0.5f, 1.0f, 0.5f, 1000.0f );
         // 得到当前观察矩阵
         D3DXMATRIXA16 matViewDir( m_matView );
         matViewDir._41 = 0.0f; matViewDir._42 = 0.0f; matViewDir._43 = 0.0f;
         // 把场景绘制到Cube Map上
         if( m_pCubeMap )
                 hr = m_pRenderToEnvMap->BeginCube( m_pCubeMap );
         if(FAILED(hr))
                 return hr;
         for( UINT i = 0; i < 6; i++ )
         {  
                 // 设置Cube Map中的一个面为当前的渲染目标   
                 m_pRenderToEnvMap->Face( (D3DCUBEMAP_FACES) i, 0 );
                 // 计算新的观察矩阵
                 D3DXMATRIXA16 matView;   
                 matView = D3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) i );
                 D3DXMatrixMultiply( &matView, &matViewDir, &matView );
                 // 设置投影和观察矩阵并渲染场景(省略)。注意:这里的渲染场景中的物体并不包括使用环境贴图的物体。... ...            }
                 m_pRenderToEnvMap->End( 0 );
                 return S_OK;
         }

上面是动态生成立方体贴图的代码部分,不知道   D3DXMatrixMultiply( &matView, &matViewDir, &matView )这个函数,为什么是matViewDir乘以matView而不是matView乘以matViewDir,还有为什么视图矩阵不直接用matView就行了,干嘛还和当前眼睛视图矩阵相乘。 [em1]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-11-10 17:42:00 | 显示全部楼层

Re:动态立方体环境贴图生成问题

我的意思是说直接用D3DUtil_GetCubeMapViewMatrix( (D3DCUBEMAP_FACES) i )这个函数得到的矩阵来作为观察矩阵不就行了,干吗还要和当前的观察矩阵相乘,这具体有什么含义哪,乘就乘呗,干吗是用matViewDir乘以 matView 而不是反过来, 也就是为什么是当前观察矩阵乘以上面函数生成的矩阵,而不是上面函数生成的矩阵乘以当前矩阵,这又具体什么含义哪,我的理解应该是上面函数生成的矩阵乘以当前观察矩阵才对,我的依据是其实我们是想在当前观察方向的前后左右上下方向构件一个观察矩阵。根据矩阵相成的意义,假如当前观察矩阵是M1,如果我们想在M1的基础上执行一个变换矩阵M2,那么应该是M2*M1才对,但是干吗上面却不是?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2007-11-12 13:23:00 | 显示全部楼层

Re:动态立方体环境贴图生成问题

matViewDir 是 world 坐标系下的 view matrix 的旋转矩阵(去掉了 Translate 分量),D3DUtil_GetCubeMapViewMatrix 函数返回的是应该是 local 的 view matrix,我们需要的是 world 下的 face view matrix,而 d3d9 是左乘优先顺序,所以是 matWorldFaceView = matWorldViewDir * matLocalFaceView,相当于先旋转,再平移。

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-11-13 13:14:00 | 显示全部楼层

Re:动态立方体环境贴图生成问题

谢谢,我忽略了这里是视图矩阵了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-19 03:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表