語言基礎
1.是不是乙個父類寫了乙個virtual 函式,如果子類覆蓋它的函式不加virtual ,也能實現多型?
2.輸入乙個字串,將其逆序後輸出。
3.#include "stdafx.h"
#define sqr(x) x*x
int main(int argc, char* argv)
這道題目的結果是什麼?
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)
}7.寫出執行結果:
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
;struct matrix44
;請實現以下函式(用偽碼大致描述即可)
選做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應用程式都需要小數型別的支援,對此有什麼解決方案?
不要為3d而3d
和以前的幾個朋友聊天,也有做game的。發現大家對3d技術都非常熱衷,但是這種熱衷顯得刻意的 為3d而3d,就有點捨本逐末。1 遊戲最重要的是策劃,需要具體的滿足人心底的某種需求,2 3d需要 好顯示卡的支援,這樣就將一部分使用者排斥在外面了。3 現在3d engine已經 很成熟了,通過這些上面的...
用NVPerfHUD來分析3D程式
nvperfhud 是乙個很好的3d 程式除錯工具,它是nvperfkit 的一部分,由nvidia 開發,在寫d3d 程式時 它不能檢視opengl 程式 加入簡單的語句就可以利用nvperfhud 來除錯察看顯示卡的工作情況了。最近在使用時,感覺越來越方便,所以在這裡說一下最近用的最多的兩個功能...
用NVPerfHUD來分析3D程式
nvperfhud是乙個很好的3d程式除錯工具,它是nvperfkit的一部分,由nvidia開發,在寫d3d程式時 它不能檢視opengl程式 加入簡單的語句就可以利用nvperfhud來除錯察看顯示卡的工作情況了。最近在使用時,感覺越來越方便,所以在這裡說一下最近用的最多的兩個功能。1 用fra...