【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3595|回复: 1

2005年OpenGL游戏程序设计专业试题

[复制链接]
发表于 2005-7-11 23:04:43 | 显示全部楼层 |阅读模式

Direct3D图形编程期末试题

一,    选择题:

1,          下列函数中与创建窗口无关的是______

A  ValidateRect(hWnd, NULL);   B   RegisterClassEx( &wc );

C   CreateWindow();           D   CreateWindowEx();

2,    有关设置窗口函数的说法错误的是:

     A  窗口函数是回调函数。       B   窗口函数名可以随便起。

        C  在定义窗口类中设置窗口所对应的窗口函数。

        D  在主函数中调用窗口函数。

        E  在窗口函数中处理各种消息也可以处里自定义消息。

 3,  以下与消息处理无直接关系的函数是:

     A  TranslateMessage( );       B   DispatchMessage();

        C  PostQuitMessage( );        D   DefWindowProc();

        E  GetMessage();

 4,    选出消息结构体MSG 中不包含的分量是哪一个:

     A  HWND;                       B  WPARAM;

        C  HINSTANCE                   D  UINT;

        E  LPARAM;

 5,  下列说法错误的是:

           A  创建完窗口后通过调用 ShowWindow();和 UpdateWindow();把窗口显示出来。

           B  程序中我们使用结构 WNDCLASSEX 来定义窗口类。

           C  当窗口销毁时 会发送 WM_DESTORY 消息,在相应的消息处理中我们会处理Direct3D 相关实例的释放;

           D  通常我们不会在处理 WM_DESTORY 消息中调用PostQuitMessage();

6,    下列说法错误的是:

     A  Direct3DCreate9( D3D_SDK_VERSION );此函数返回D3D实例;

        B  DIRECT3DDEVICE9::CreateDevice(); 次函数创建设备实例;

        C  DIRECT3DDEVICE9::BeginScene()与DIRECT3DDEVICE9::EndScene();要求

成对使用,但可以嵌套使用。

           D  在绘制图形之后必须调用函数DIRECT3DDEVICE9:resent();把后台缓存里的数据处理到前台,才能显示出图形。

7, 对函数HRESULT  IDirect3DDevice9:: Clear(   

    DWORD Count, constD3DRECT *pRects,   DWORD Flags, 

  D3DCOLOR Color,    float Z,  DWORD Stencil ); 的参数说明正确的有那几项:______________。(多选)

A   参数1,用来指出表示更新区域的矩形数目;

B   参数2,表示更新区域的矩形;

C   参数 1,和参数2,通常设置为NULL,表示更新区域未知;

D   参数3,指出清空的缓冲区标志;可取多种标志的组合;

E   参数6,指重置的模板值;

8, 以下叙述错误的是_____.

     A   IDirect3DDevice9:resent()函数将后台缓冲区的数据复制到前台。

        B   结构 D3DPRESENT_PARAMETERS 定义了Direct3D设备相关信息;在创建设备实例之前,我们会定义一个此类型的变量并赋值,传给IDirect3D9::CreateDevice();函数,用来定制我们想获得的设备实例。

        C   IDirect3DDevice9::SetStreamSource();函数设置渲染数据流;

        D   IDirect3DDevice9::SetFVF(DWORD FVF);函数设置当前的渲染数据流中的顶点格式;但不强制要求FVF的格式与当前渲染数据流中相链接的顶点缓冲区中的顶点格式相同。

 9,有关顶点缓冲区与索引缓冲区的说法正确的是__________

     (多选)

      A   LPDIRECT3DVERTEXBUFFER9 g_pVB=NULL;定义了顶点缓冲区指针;

            IDirect3DDevice9::CreateVertexBuffer();此函数用来创建顶点缓冲区。

        B   对顶点缓冲区变量和索引缓冲区变量赋值时都要调用 Lock()函数给缓冲区加锁;并且在结束赋值时调用 Unlock()解锁。

        C   索引缓冲区创建后,绘制前应使用函数IDirect3DDevice9::SetIndices();设置索引数组。

        D   顶点缓冲区与索引缓冲区可单独使用,也可一同使用。

 10,已知:索引数组中存储了9个索引值,通过函数DrawIndexedPrimitive();从第四个索引值开始,绘制两个三角形;下列实现正确的是:_____.

         A   DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,4,9,3,2);

         B   DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP,0,9,0,3,2);

           C   DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,9,0,4,2);

           D   DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,9,3,2);

 11,下列叙述错误的是:

        A    Direct3D标准的图形显示过程可分两个阶段,一,坐标变换和应用纹理,二,光栅化处理;

           B    坐标变换不仅可以对物体的顶点位置变换,还可以包括顶点法线向量,纹理坐标;

           C    在光栅化处理阶段,以纹理贴图的颜色和物体的颜色值决定最终的颜色值

           D    坐标变换有有世界变换,观察变换,投影变换,和视区变换;

  12,图形a 本地坐标,图形 b 为世界坐标;请选出正确描述这一变换过程的选项:

                         Y                                    Y

                        Z                              Z

                                   X                                      X

         A  把物体先缩放在平移最后旋转;

           B  把物体先平移再缩放最后旋转;

           C  把物体先旋转再平移最后缩放;

           D  把物体先平移再旋转最后缩放;

13,  下列叙述正确的是:多选

           A  在程序中应按,世界变换,观察变换,投影变换的顺序进行;

           B  函数SetTransform(D3DTS_WORLD,&mat);设置了世界变换;

           C  函数D3DXMatrixLookAtLH();把以世界坐标系表示的物体,处理到观察坐标系中。

           D  函数D3DXMatrixLookAtLH();参数2,3,4分别为:观察点,被观察点,向上向量。

14, 有关视区变换说法错误的是:

           A  视区变换是变换流水线的最后一步;

           B  他将顶点从投影坐标系转换为屏幕坐标;

           C  设置视区的函数为SetViewport();

           D  对视区变换可设置多个矩形区;

15,        有关光照的说法错误的是:

           A  环境光会照亮整个场景;

           B  使用漫反射光时,要求点格式中包含法向量;

           C  镜面反射计算量较大,因此缺省状态下不对物体进行镜面反射计算;

           D  在场景中对光源的数量没有限制;

16,        下列说法正确的是:多选

           A  光源属性定义了光的类型,位置,方向,衰减等信息;

           B  相同的光源可以根据物体表面的材质的不同,通过不同的光照模型来显示;

           C  光源类型包括点光源,聚光灯,方向光;

           D  点光源由于不考虑方向和衰减所以计算量最小;

17,        下列说法错误的是:多选

A  光属性中Ambient,Diffuse,Specular 分别表示光在以不同的光照模型计算时的光源的颜色;

B  一个光源只能具有一个光照模型;

C  物体材质的反射系数在0-1之间取值;

D  函数SetRenderState(D3DRS_LIGHTING,TRUE);激活光照运算;

18,        有关纹理的说法错误的是:

A  纹理坐标一般用v ,u 来表示,分别对应文理的宽和高;

B  bmp,tga,jpg类型的文件都可以加载到文理变量中;

C  网格若想贴上纹理需有纹理坐标;

D  在自定义点格式中可以提供多组纹理坐标;

19,        下列说法错误的是:

A  Direct3D 支持多重纹理;

B  Direct3D 最多支持8层纹理;

C  使用SetTextureStageState();设置纹理渲染状态;

D  若要是纹理起作用,调用SetRenderState();函数启用纹理;

20,        下列选项中设置线性纹理过滤的是:

A  SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_ANISOTROPIC);

B  SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_LINEAR);

C  SetSamplerState(0,D3DSAMP_MINFILTER,D3DTEXF_POINT);

D  SetSamplerState(0,D3DSAMP_MAXANISOTROPY,4);

21,  下列说法错误的是:

        A  函数SetTextureStageState();的参数2 的值为D3DTSS_TEXCOORDINDEX时可用来设置纹理坐标生成的方法;

        B  当纹理坐标生成的标志为 D3DTSS_TCI_SPHEREMAP 时,输出球面反射的纹理坐标;

        C  当纹理坐标生成的标志为 D3DTSS_TCI_CAMERASPACENORMAL 时,以观察坐标系中的点坐标为该纹理层的纹理坐标输出;

        D  SetTextureStageState(0,D3DTSS_TEXTURETRANSFORMFLAGS,D3DTTFF_COUNT2);

           设置纹理坐标以2维输出;

22,    列说法错误的是:

A  SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);设置纹理颜色混合方法为颜色相乘输出;

B  SetTextureStageState(0,D3DTSS_ALPHAOP,D3DTOP_DISABLE);禁用纹理层0的

   Alpha 通道;

C  SetTextureStageState(0, D3DTSS_TEXCOORDINDEX,0);设置第0层纹理不使用文理坐标;

D  #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX2)

表示自定义点格式中包含两组纹理坐标;

23,    有关雾化说法正确的是:多选

A  通过设置渲染状态D3DRS_FOGENABLE 激活雾化处理;

B  雾化分顶点雾化和像素雾化;

C  线性雾化需设置雾密度,雾化起始距离和雾化终止距离;

D  雾化分:呈线性增加和呈指数增加;

24,    下列说法有误的是:

A  SetRenderState(D3DRS_FILMODE,D3DFILL_POINT);

设置多边形填充模式为点渲染模式;

B  多边形填充模式包括:渲染点,渲染线,渲染面;

C  着色渲染分FLAT和 GOURAUD 渲染;

D  着色渲染默认为 FLAT 渲染;

25,    下列说法正确的有:多选

A  Alpha 测试,不能实现半透明;

B  Alpha 测试在速度上优于Alpha 混合;

C  SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATER);设置Alpha混合的混合函数;

D  Alpha 混合可以生成半透明效果;

E  Alpha 测试中通过测试则绘制像素,否则不绘制;

26,    下列说法正确的是:多选

A  矩阵乘和向量乘前者满足交换率;即:A*B 等于 B*A;

B  向量有方向和大小;

C  模长为1的向量为单位向量;

D  对任意矩阵A 乘以 单位矩阵 B 有 A*B 等于 A;

27,  下列说法正确的是:多选

A  向量 A 与向量 B 的叉积为零,表示 A 垂直于B;

B  向量 A 与向量 B 的点积为零,表示 A 平行于B;

C  矩阵 A 除以矩阵 B 等于 A 乘以 B 的逆;

D  矩阵的加减运算是对应元素相加减;

28,    列矩阵中表示绕x 轴旋转的是:

A       B

C    D

29,    下列函数中哪一个是求逆矩阵:

A  D3DXMatrixMultiply();      B  D3DXMatrixInverse();

C  D3DXMatrixRotationAxis();  D  D3DXMatrixTranslation();

30,    列函数中哪一个是求向量叉积:

A  D3DXVec3Cross();           B  D3DXVec3Length();

C  D3DXVec3Lerp();            D  D3DXVec3Dot();

31, 下列说法错误的是:

        A  用四元数处理旋转时比单纯用矩阵快;

B  四元数 Q=COSθ+ A * Sinθ;表示绕 A 轴旋转θ角;

C  若想用四元数Q旋转点P 运算 (QP)/Q 即可;

D  用矩阵式处理旋转有可能出现错误,但四元数不会出现错误;

32, 选出实现球面线性内插的函数是哪一个:

A  D3DXQuaternionInverse();  B  D3DXQuaternionRotationMatrix();

C  D3DXQuaternionSlerp();    D  D3DXMatrixRotationQuaternion();

33,  下列说法错误的是:

A  广告牌技术使应用此技术的2维网格始终朝向相机;

B  法线映射技术,使低多边形网格看上去像高多边形网格一样;

C  桢动画技术通过给定起点和终点,自动生成中间画面;

D  层动画中子层的运动会影响到父层;

34, 有关皮肤说法错误的是:

A  使用皮肤技术,可以防止关节和关节之间脱离;

B  使用单一网格比使用单一网格 + 加重值效果好;

C  每个定点最多可受四个加重值影响;

D  矩形调色板中的矩阵个数不超过256个;

 楼主| 发表于 2005-7-11 23:05:18 | 显示全部楼层

二,    解释,写出下列代码的含义或功用;

1,      #define D3DFVF_CUSTOM(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1)

 

 

 

2,  GetAdapterDisplayMode();

 

 

3,  GetTransform();

 

   

4,  SetRenderState(D3DRS_AMBIENT,D3DCOLOR_RGB(255,0,0));

 

 

5,  D3DXMatrixPerspectiveFovLH();

 

 

6,  SetTransform(D3DTS_PROJECTION,&mat);

 

 

 

7,  SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);

 

 

 

8, D3DXMATRIX *D3DXMatrixScaling( D3DXMATRIX *pout, FLOAT sx, FLOAT sy,

         FLOAT sz);

 

 

9, D3DXUATERNION* D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, CONST

                                                D3DXQUATERNION *pQ);

 

 

 

10,D3DXMatrixIdentity();和D3DXMatrixRotationYawPitchRoll();

 

 

 

 

三,    按要求写出程序代码:

1,  声明D3D实例,设备实例;

 

2,  声明纹理实例,声明网格实例;

 

3,  设置点格式的函数;

 

4,  设置材质;

 

5,  创建纹理;设置纹理;

 

6,  初始化单位向量;

 

7,  创建顶点缓冲区;

 

   8,写出生成围绕Y 轴旋转的函数;

 

四,    问答题:

1,  GetMessage();和PeekMessage();有什么异同点?

 

 

2,  写出缩放,平移的矩阵表示?

 

 

3,  mtrl 为材质变量,

mtrl.Diffuse.r =0.0f; mtrl.Ambient.r = 1.0f;

   mtrl.Diffuse.g = 1.0f;mtrl.Ambient.g = 1.0f;

   mtrl.Diffuse.b = 0.5f;mtrl.Ambient.b = 0.0f;

mtrl.Diffuse.a = mtrl.Ambient.a = 1;

(1)当灯光属性的漫反射如下设置时,

light.Diffuse.r=1.0f;

light.Diffuse.g=0;

light.Diffuse.b=1.0;

物体的颜色?

(2)当灯光属性的漫反射值和环境光如下设置时,

light.Diffuse.r=1.0f;

light.Diffuse.g=1.0;

light.Diffuse.b=0.0;

light.Ambient.r=1.0f;

light.Ambient.g=0;

light.Ambient.b=1.0;

    物体的颜色?

 

 

 

  4,  设矩阵A=  2  3     B=  3  4  1    求A*B ?

                 1  5        2  1  0 

 

 

 

  5,  已知向量 A,B 求 A+B 和A-B

             Y                              Y

                  A            

                             X                            X

                          B

          

Y

 

                  X

 

 

   6,纹理寻址有哪几种方式?

  

 

 

 

以下两幅图个是何种寻址方式?

 

 

 

 

 

  7, 我们可以使用层动画的技术来处理复杂的运动关系;以下是在处理 太阳,地球,月球 运动时的一些设置;

太阳TM  为matSL,单位矩阵

      地球的 TM 为 matWL 单位矩阵 ,地球的平移矩阵为 matWT,旋转矩阵为matWR,

      月亮的TM 为 matML 单位矩阵,月球的平移矩阵为 matMT,旋转矩阵为matMR,

      请写出当三者的运动关系为月球以地球为中心旋转,而地球

      又以太阳为中心旋转时的,月球的世界变换矩阵和地球的世界变换矩阵?

 

  

 

 

 

 

 

 

 

 

 

                         

五,    按要求填写程序:以下为加载网格的程序片断,

HRESULT InitGeometry()

{

    LPD3DXBUFFER pD3DXMtrlBuffer;

    // 加载网格

    if( FAILED( ______①______( "Tiger.x", D3DXMESH_SYSTEMMEM,  g_pd3dDevice, NULL,

                                   &pD3DXMtrlBuffer, NULL, &g_dwNumMaterials,  &g_pMesh ) ))

    {

            MessageBox(NULL, "Could not find tiger.x", "Meshes.exe", MB_OK);

            return E_FAIL;

    }

D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();

//为下便两个变量分配空间

    g_pMeshMaterials = ___________②_______________________

    g_pMeshTextures  = ______________③____________________

    for( DWORD i=0; i<g_dwNumMaterials; i++ )

    {             // 拷贝材质

        g_pMeshMaterials = __________④________________

   

        g_pMeshMaterials.Ambient = g_pMeshMaterials.Diffuse;

        g_pMeshTextures = NULL;

        if( d3dxMaterials.pTextureFilename != NULL &&

            lstrlen(d3dxMaterials.pTextureFilename) > 0 )

        {         // 创建纹理

            if( FAILED( _______________⑤______________________) )

            {

                 MessageBox(NULL, "Could not find texture map", "Meshes.exe", MB_OK);

            }

        }

    }

    pD3DXMtrlBuffer->Release();

return S_OK;

}

1,

2,

3,

4,

5,

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-6-22 12:18

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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