您的位置:首页 > 其它

3D程序笔试题

2015-07-20 20:08 225 查看
语言基础

1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?

2.输入一个字符串,将其逆序后输出。

3.

#include "stdafx.h"

#define SQR(X) X*X

int main(int argc, char* argv[])

{

int a = 10;

int k = 2;

int m = 1;

a /= SQR(k+m)/SQR(k+m);

printf("%d\n",a);

return 0;

}

这道题目的结果是什么?

4.

const 符号常量;

(1)const char *p

(2)char const *p

(3)char * const p

说明上面三种描述的区别;

5.下面是C语言中两种if语句判断方式。请问哪种写法更好?为什么?

int n;

if (n == 10) // 第一种判断方式

if (10 == n) // 第二种判断方式

6.下面的代码有什么问题?并请给出正确的写法。

void DoSomeThing(char* p)

{

char str[16];

int n;

assert(NULL != p);

sscanf(p, "%s%d", str, n);

if (0 == strcmp(str, "something"))

{

...

}

}

7.写出运行结果:

{// test2

union V {

struct X {

unsigned char s1:2;

unsigned char s2:3;

unsigned char s3:3;

} x;

unsigned char c;

} v;

v.c = 100;

printf("%d", v.x.s3);

}

8.static变量和static 函数各有什么特点?

9.用C 写一个输入的整数,倒着输出整数的函数,要求用递归方法 ;

3D基础

0. 智力题
(1)如何不使用递归和移位,就能判断一个无符号整数为2的N次方?(power of 2)

1. 矢量代数基础
(1)求矢量v1(x1,y1,z1)与矢量v2(x2,y2,z2)的点积。结果为矢量还是标量?解释其几何意义。

(2)求矢量v1(x1,y1,z1)与矢量v2(x2,y2,z2)的叉积。结果为矢量还是标量?解释其几何意义。

(3)求矢量v(x,y,z)的模,并对其单位化。

(4)求矢量v1(x1,y1,z1)与矢量v2(x2,y2,z2)的夹角。并由此判断v1和v2的方向关系。

2. 线性代数基础
若有
Struct Vector4
{
Float x, y, z, w;
};
Struct Matrix44
{
Float _11, _12, _13, _14;
Float _21, _22, _23, _24;
Float _31, _32, _33, _34;
Float _41, _42, _43, _44;
};
请实现以下函数(用伪码大致描述即可)
选做2题即可:
(1) Vector4 * Matrix44
(2) Matrix44 * Matrix44
(3) Matrix44 + Matrix44
(4) Matrix44 * Float
(5) Matrix44的转置
附加题:实现下面的函数接口(任选一个实现即可)
(6) void Matrix44RotationX( Matrix44& mOut, Float fRot );
(7) void Matrix44Scaling(Matrix44& mOut, Float fX, Float fY, Float fZ );
(8) void Matrix44Translation(Matrix44&mOut, Float fX, Float fY, Float fZ );

3. 空间解析几何基础
(1)试解释空间平面方程 aX + bY + cZ + d = 0 中,参数a,b,c,d的含义。
(2)求空间点p1(x1,y1,z1)与p2(x2,y2,z2)间距离。
(3)已知平面上一个点的坐标,以及一个三角形三个顶点的坐标。如何判断这个点在这个三角形的内部?你能想到多少算法就写多少算法。

附加题:
下面(4),(5)两题,选做1题即可:
(4)若已知空间直线L上一点p1和方向向量v1; 求空间点p2到L的距离。
且若距离不为零,请求出p2到L的垂线与L的交点。
设v1已经单位化过。
请用伪码表示即可。注:请用dot表示二矢量点积,cross表示二矢量叉积,|v|表示矢量v的模。
(5)若已知空间直线L上一点p1和方向向量v1,空间平面PL的法线n,当前坐标系原点到平面PL的距离d,请判断L与PL的位置关系。
且若L与PL平行,请求出L到PL的距离;若L与PL相交,请求出L与PL的交点。
设v1和n已经单位化过。
请用伪码表示即可。注:请用dot表示二矢量点积,cross表示二矢量叉积,|v|表示矢量v的模。
4. 计算机图形学基础
下面(1)至(4)题选做2题即可:
(1)用自己的话大致描述Vertex及Fragment流水线,可以画图表达。
答: (能够大致表达即可,对于Vertex Pipeline,能够标示出几个坐标系及其变换关系最佳)



(2)用公式解释说明phone光照模型。(可以忽略attenuation和spotfactor)
(3)什么是骨骼-皮肤动画?它与区段动画有何区别?请大致描述骨骼-皮肤动画的实现。
(4)试说明第一人称视角和第三人称视角下,Camera参数设置的差异。当在一个狭窄的室内环境下应用第三人称视角的Camera系统,可能会遇到哪些问题?你能想到哪些解决方法呢?
附加题:
(5)请用自己的话大致描述BSP Tree的创建,Portal生成,以及PVS的计算过程。(能说多少就说多少)

优化试题
一般性问题:
1. 构造函数采用初始化列表总能提高性能吗? 为什么?
2. 前置++运算符总比后置++效率更高吗?为什么?
3. 如果一个函数参数列表很长,那么会带来怎样的负担?你有什么解决方案?
4. 请大致描述CPU Cache的工作原理,描述Cache Miss会带来怎样的代价,并进而给出对应的基本优化思路。
5. 请大致描述CPU流水线结构的工作特点,并给出对应的基本优化思路。

关于ARM:
1. MOV r0, #0x3FFFC0 这句指令有错误吗?为什么?如果有错请提出修改意见。
2. 请解释 ORR r0, r0, r1, LSR #16 的含义,并指出这句指令中的LSR#16会不会带来额外的开销。
3. 解释下面的指令:
<1>MLA r0, r1, r2
<2>SMULL r0, r1, r2, r3
<3>BL Label
4. 把下面的指令翻译成C代码,并说出MOVLT与MOV的执行效率是否相同?
asm volatile ( "CMP r8,#0" : : );
asm volatile ( "MOVLT r8,#0" : : : "r8" );
asm volatile ( "MOVGE r8,%0" : : "r"(val) : "r8" );
5. ARM寄存器一共有哪些?其中哪些可以放心使用,哪些应该小心使用甚至不使用?
6. 常见的ARM指令集中不包括除法指令,那么对于程序中出现的除法,你认为应该如何处理?(请分为内存紧张与不紧张两种情况讨论)
7. 目前大部分手机采用的ARM的芯片,都没有浮点数协处理器,然而几乎所有的3D应用程序都需要小数类型的支持,对此有什么解决方案?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: