首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Directx9 shadowvolume 的有关问题 分不多 全给了

2013-01-09 
Directx9 shadowvolume 的问题 分不多 全给了!代码出自directx9 自带的例子 shadow volume以下的代码段是

Directx9 shadowvolume 的问题 分不多 全给了!
代码出自directx9 自带的例子 shadow volume
以下的代码段是在shadow volume.fx里面的一段shader,求指教

void VertShadowVolume( float4 vPos : POSITION,
                       float3 vNormal : NORMAL,
                       out float4 oPos : POSITION )
{
    // Compute view space normal
    float3 N = mul( vNormal, (float3x3)g_mWorldView );//vNormal是面法线,在前面将面法线当作顶点法线赋值了
//g_mWorldView = g_mWorldScaling * *g_MCamera.GetWorldMatrix() * *g_Camera.GetViewMatrix()

    // Obtain view space position
    float4 PosView = mul( vPos, g_mWorldView );

    // Light-to-vertex vector in view space
    float3 LightVecView = PosView - g_vLightView;//光源到点的向量

    // Perform reverse vertex extrusion
    // Extrude the vertex away from light if it's facing away from the light.
    if( dot( N, -LightVecView ) < 0.0f )//面的法线与点到光源的的夹角大于90,即该面是背光面 需要将其拉伸
    {
        if( PosView.z > g_vLightView.z )
            PosView.xyz += LightVecView * ( g_fFarClip - PosView.z ) / LightVecView.z;
        else
            PosView = float4( LightVecView, 0.0f );

        // Transform the position from view space to homogeneous projection space
        oPos = mul( PosView, g_mProj );
    } else
        oPos = mul( vPos, g_mWorldViewProjection );
}

这个代码段的用途是将 背光面进行拉伸,在下不明白,下面这段的意思 ,请大牛指教

    if( dot( N, -LightVecView ) < 0.0f )//面的法线与点到光源的的夹角大于90,即该面是背光面 需要将其拉伸
    {
        if( PosView.z > g_vLightView.z )
            PosView.xyz += LightVecView * ( g_fFarClip - PosView.z ) / LightVecView.z;
        else
            PosView = float4( LightVecView, 0.0f );

        // Transform the position from view space to homogeneous projection space
        oPos = mul( PosView, g_mProj );



另外。585行到723行的 填补漏洞的代码 看得不是很懂,只明白了2 == nVertShared时,表示这2条边是物体正面与背面的交界边。

还有一个问题。在535行
                    hr = D3DXCreateMesh( nNextIndex / 3 + nNumMaps * 7,// nNextIndex / 3表示pdwNewIBData中的面数,即经过退化 


                                         ( pInputMesh->GetNumFaces() + nNumMaps ) * 3,
                                         D3DXMESH_32BIT,
                                         SHADOWVERT::Decl,
                                         pd3dDevice,
                                         &pPatchMesh );


为什么D3DXCreateMesh的第一个参数要加上nNumMaps * 7,为什么要乘以7呢?



最后一个问题
ConvertAdjacencyToPointReps() 经过该函数变换后的邻接信息 究竟是表示什么意思?


问题很多,麻烦大家了。。 百度和google里的相关资料我都看了。。希望大家别复制
[解决办法]
引用:
代码出自directx9 自带的例子 shadow volume
以下的代码段是在shadow volume.fx里面的一段shader,求指教
C/C++ code?12345678910111213141516171819202122232425262728void VertShadowVolume( float4 vPos : POSITION,        ……


3D的东西,真心不懂

热点排行
Bad Request.