+ -
当前位置:首页 → 问答吧 → 刚看direct,问下龙书中《1.3.1表面》中的一个问题!!!!

刚看direct,问下龙书中《1.3.1表面》中的一个问题!!!!

时间:2011-07-28

来源:互联网

C/C++ code

D3DSURFACE_DESCsurfaceDesc; 

    _surface->GetDesc(&surfaceDesc); 

    // 取得被锁定表面的像素数据的指针 

    D3DLOCKED_RECTlockedRect; 
_surface->LockRect( 
            &lockedRect,//指向被锁定表面的数据 

            0,//0表示锁定全部表面 

            0);//0表示没有指定锁定标记 

    // 遍例表面上的每个像素,将它们设为红色 

    DWORD*imageData=(DWORD*)lockedRect.pBits; 

    for(inti=0;i<surfaceDesc.Height;i++) 
    { 

        for(intj=0;j<surfaceDesc.Width;j++) 

        { 
            // 取得纹理索引, 注意我们用pitch 除以4是因为pitch的单位是像素, 

            // 并且一个DWORD类型占为4bytes空间 

            intindex=i*lockedRect.Pitch/4+j;                            这个地方为什么要除以4

            imageData[index]=0xffff0000;// 每个像素设为红色 

        } 

    } 



还有想问下DWORD是什么?

作者: lqb0013   发布时间: 2011-07-28

问题没明显标明,在贴一次:
C/C++ code

D3DSURFACE_DESCsurfaceDesc; 

    _surface->GetDesc(&surfaceDesc); 

    // 取得被锁定表面的像素数据的指针 

    D3DLOCKED_RECTlockedRect; 
_surface->LockRect( 
            &lockedRect,//指向被锁定表面的数据 

            0,//0表示锁定全部表面 

            0);//0表示没有指定锁定标记 

    // 遍例表面上的每个像素,将它们设为红色 

    DWORD*imageData=(DWORD*)lockedRect.pBits; 

    for(inti=0;i<surfaceDesc.Height;i++) 
    { 

        for(intj=0;j<surfaceDesc.Width;j++) 

        { 
            // 取得纹理索引, 注意我们用pitch 除以4是因为pitch的单位是像素, 

            // 并且一个DWORD类型占为4bytes空间 

            intindex=i*lockedRect.Pitch/4+j;                   [color=#FF0000]这个地方为什么要除以4[/color]

            imageData[index]=0xffff0000;// 每个像素设为红色 

        } 

    } 


作者: lqb0013   发布时间: 2011-07-28

DWORD双字节,你可以直接看他的定义处嘛。
typedef unsigned long DWORD;

为什么要除4,上面不都写了么“除以4是因为pitch的单位是像素”

32位的颜色吧,看下面0xffff0000

作者: HollyCpp   发布时间: 2011-07-28

写错了,DWORD是4字节,WORD是2字节......

作者: HollyCpp   发布时间: 2011-07-28

DWORD是双字,不是双字节,多了个“节”字,意思就不一样了.....

作者: HollyCpp   发布时间: 2011-07-28