反射矩阵计算
反射只是翻轉攝影機,將場景渲染到Texture上,或使用STENCIL蒙板直接繪制。
具體計算查看了D3D的 Sample,如下:
D3DXMATRIXA16 matViewSaved;
m_pd3dDevice->GetTransform( D3DTS_VIEW, &matViewSaved ); //取得view matrix
//定義一個翻轉的參考平面,可根據需要自己定義位置及法線
D3DXVECTOR3 vPoint(0,0,0);
D3DXVECTOR3 vNormal(0,1,0)
;
D3DXMATRIXA16 matView, matReflect;
D3DXPLANE plane;
D3DXPlaneFromPointNormal( &plane, &vPoint, &vNormal ); //生成這個平面
D3DXMatrixReflect( &matReflect, &plane ); //取得該平面的反射矩陣
D3DXMatrixMultiply( &matView, &matReflect, &matViewSaved ); //使用反射矩陣翻轉view matrix,攝影機被翻轉到反射位置
m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); //設置view matrix,這樣攝影機渲染出的內容就是翻轉的了
//設置剪切平面,使反射面上的內容被渲染,面下的被丟棄
m_pd3dDevice->SetClipPlane( 0, plane );
m_pd3dDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, 0x01 );
//(不知在Shader里面,這個功能是否還起作用)
//如果渲染到材料上,需要使用投影矩陣把材料貼到實際反射的物體上。也可把物體點位先轉換為屏幕坐標再貼圖,原理是一樣的
具體計算查看了D3D的 Sample,如下:
D3DXMATRIXA16 matViewSaved;
m_pd3dDevice->GetTransform( D3DTS_VIEW, &matViewSaved ); //取得view matrix
//定義一個翻轉的參考平面,可根據需要自己定義位置及法線
D3DXVECTOR3 vPoint(0,0,0);
D3DXVECTOR3 vNormal(0,1,0)
;
D3DXMATRIXA16 matView, matReflect;
D3DXPLANE plane;
D3DXPlaneFromPointNormal( &plane, &vPoint, &vNormal ); //生成這個平面
D3DXMatrixReflect( &matReflect, &plane ); //取得該平面的反射矩陣
D3DXMatrixMultiply( &matView, &matReflect, &matViewSaved ); //使用反射矩陣翻轉view matrix,攝影機被翻轉到反射位置
m_pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); //設置view matrix,這樣攝影機渲染出的內容就是翻轉的了
//設置剪切平面,使反射面上的內容被渲染,面下的被丟棄
m_pd3dDevice->SetClipPlane( 0, plane );
m_pd3dDevice->SetRenderState( D3DRS_CLIPPLANEENABLE, 0x01 );
//(不知在Shader里面,這個功能是否還起作用)
//如果渲染到材料上,需要使用投影矩陣把材料貼到實際反射的物體上。也可把物體點位先轉換為屏幕坐標再貼圖,原理是一樣的
轉載于:https://www.cnblogs.com/wonderKK/archive/2011/11/07/2240279.html
總結
- 上一篇: C#3.0学习笔记(8)浅谈接口inte
- 下一篇: “java程序打成jar包 如何处理第三