3D程式筆試題

2021-07-03 22:57:12 字數 3502 閱讀 1854

語言基礎

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...