“Bump In The Stack” (BITS) and “Bump In The Wire” (BITW)

Three different architectures or implementation models are defined for IPSec. The best is integrated architecture, where IPSec is built into the IP layer of devices directly. The other two are “Bump In The Stack” (BITS) and “Bump In The Wire” (BITW), which both are ways of layering IPSec underneath regular IP, using software and hardware solutions respectively.

Bump in the Stack: http://www.tcpipguide.com/free/t_IPSecArchitecturesandImplementationMethods-2.htm

Bump in the Wire:http://www.tcpipguide.com/free/t_IPSecArchitecturesandImplementationMethods-3.htm

用在其它地方基本也是这个含义,只是稍微变通一下就好了。

阅读更多

关于bump贴图的问题

03-31

在王德才的DX9书籍中介绍了一种制作bump贴图的方法,即由原贴图生成轮廓贴图(事先已经生成好的),再由轮廓贴图用其给出的算法生成一个Bump贴图,即用到的凹凸贴图,最后用纹理混合的方法进行渲染。但是我很知道如何由元贴图生成轮廓贴图(貌似也叫灰度图,待求证)。我试了用PS的模式——>灰度方法,但是生成的只有180KB,而作者给出的轮廓图有385KB,貌似丢失了不少信息。而且经过测试效果也比原图要差很多,整个图上有很大斑点。请问轮廓贴图应该如何制作。另外,轮廓贴图中每一个像素还是由4个Byte构成么(从算法上推测应该是),那么每一个Byte里面存储了什么信息呢?最后附上代码,里面添加了我的注释,但是对于核心的计算步骤还是不懂,希望各位能对以上问题一一解答。rn[code=c]rn//加载原纹理rn D3DXCreateTextureFromFile( m_pd3dDevice, (*pBumpTex)[0], &m_pTexture);rn rn //创建轮廓纹理rn D3DXCreateTextureFromFile( m_pd3dDevice, (*pBumpTex)[1], &m_pEarthBumpTexture);rn rn //创建环境纹理rn D3DXCreateTextureFromFile( m_pd3dDevice, (*pBumpTex)[2], &m_pEnvMapTexture);rnrn //根据轮廓纹理计算得出凹凸纹理rn LPDIRECT3DTEXTURE9 psBumpSrc = m_pEarthBumpTexture;rn D3DSURFACE_DESC d3dsd;rn D3DLOCKED_RECT d3dlr;rn D3DFORMAT m_BumpMapFormat= D3DFMT_X8L8V8U8 ;rn psBumpSrc->GetLevelDesc( 0, &d3dsd ); //返回第0层(MIPMAP)的描述信息到d3dsd结构中rnrn //创建凹凸纹理对象rn m_pd3dDevice->CreateTexture( d3dsd.Width, d3dsd.Height, 1, 0,rn m_BumpMapFormat, D3DPOOL_MANAGED, &m_RealBumpMap, NULL );rn rn psBumpSrc->LockRect( 0, &d3dlr, 0, 0 );rn DWORD dwSrcPitch = (DWORD)d3dlr.Pitch; //一个纹理Surface的一行中有多少个字节rn BYTE* pSrcTopRow = (BYTE*)d3dlr.pBits; //初值指向LOCK的首地址,也就是首行第一个字节的地址rn BYTE* pSrcCurRow = pSrcTopRow;rn BYTE* pSrcBotRow = pSrcTopRow + (dwSrcPitch * (d3dsd.Height - 1) ); //指向最后一行第一个字节的地址rnrn m_RealBumpMap->LockRect( 0, &d3dlr, 0, 0 );rn DWORD dwDstPitch = (DWORD)d3dlr.Pitch;rn BYTE* pDstTopRow = (BYTE*)d3dlr.pBits;rn BYTE* pDstCurRow = pDstTopRow;rnrn for( DWORD y=0; y1 ) ? 63 : 127; ([color=#FF0000]63, 127分别代表了什么,为什么要赋给这个值?[/color])rn *(pDstT++) = (BYTE)iDu; //每一个bump贴图的像素第一个字节存储了左右像素的差值rn *(pDstT++) = (BYTE)iDv; //第二个字节存储上下像素的差值rn *(pDstT++) = (BYTE)uL; //第三个字节存储uL,其值为亮度值,63或者127(为什么是这两个?)rn *(pDstT++) = (BYTE)0L; //第四个字节为0rnrn // Move one pixel to the right //向右移一个像素rn pSrcB0+=4; rn pSrcB1+=4;rn pSrcB2+=4;rn rnrn // 移动到下一行rn pSrcCurRow += dwSrcPitch;rn pDstCurRow += dwDstPitch;rn rnrn m_RealBumpMap->UnlockRect(0);rn psBumpSrc->UnlockRect(0);rnrn[/code]

没有更多推荐了,返回首页