freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

頭部跟蹤系統(tǒng)設(shè)計在虛擬聽覺的應(yīng)用-資料下載頁

2025-05-18 15:40本頁面

【導(dǎo)讀】頭部跟蹤系統(tǒng)設(shè)計。在虛擬聽覺的應(yīng)用。完成年月:20xx年06月。上海大學(xué)畢業(yè)論文(設(shè)計)

  

【正文】 光有 HRTF 是不足夠的,因為 HRTF 只是記錄了聲音的方位信息,對于一個 具體的場景,聲音不僅有方向,聲音還會在場景中反射、折射, 聲源 離 聽者的距離也會不固定。 于是,我們提 出 使用光線 追蹤 來模擬聲音 的傳播 , 并 模擬 聲線與聽者的碰撞, 碰撞時記錄每個聲線此時的傳播時間、強度和方位, 最終使用這些信息,生成 雙耳 房間沖擊響應(yīng) BRIR。通過 BRIR 與 原始 聲音的卷積,我們可以 模擬 在房間里,從聲源到聽者 發(fā)出的聲音。 這樣方式產(chǎn)生的聲音 可以給用戶更加的沉浸感, 3D聲音聽起來也越真實。 上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 27 光線追蹤 算法 光線追蹤( Ray tracing),又稱為光線跟蹤,來自于幾何光學(xué)的一項通用技術(shù),它通過跟蹤與光學(xué)表面發(fā)生交互作用的光線從而得到光線經(jīng)過路徑的模型 [6]。 光線追蹤 廣泛 用于計算機圖形學(xué)中,使用這樣的方法,可以比光柵化圖像生成 達到 更加 好的光學(xué) 的效果。 同時,光線追蹤 對于折射和反射都有非常好的效果,所以在對圖像質(zhì)量要求高的場合,例如電源渲染中,常常會采用這種方法。 圖 32 光線追蹤示例 在實際應(yīng)用中,可以將各種電磁波或者微小粒子看成光線 , 我們可以 利用光線追跡來計算 微小粒子 在介質(zhì)中傳播的情況。首先發(fā)射一條光線到空間中,當(dāng)光線碰撞到障礙物時,原光線傳播方向改變 ,沿著反射角 方向傳播 。 聲音是波,不過考慮到聲波的 波 長 遠(yuǎn)小于房間 中墻壁的尺寸, 我們認(rèn)為使用光線追蹤這樣粒子性較強的算法是合適的。 每個聲線在 房間 中傳播,遇到 墻壁會反射,在空氣中傳播會有損耗, 最終會撞上聽者的聲音是我們所需要關(guān)注的 ,使用這些聲音的方位、時延、強度,我們可以獲得 BRIR。 要實現(xiàn)光線追蹤,首先需要定義幾個類: Primitive:場景的基元,本質(zhì)上是 一個三角形, 類中有檢測碰撞、求交、渲染三角形等功能 。 Ray:聲線 ,類中記錄 聲線的起點、方向、 強度、傳播距離等信息。 Scene:場景類,是 Primitive 的集合, 包含讀取 Obj 模型、整個場景渲染等功能。 Vector:向量類 Plane:平面類 ,包含法相 N和距離 D 上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 28 光線追蹤偽代碼: 對于每一個基元 { 如果光線與該基元碰撞 { 光線強度根據(jù)光線起點到碰撞位置的距離衰減 將原光線的設(shè)為反射的方向 光線強度再減去碰撞的衰減 } 如果光線的強度為 0,將光線設(shè)為不活躍狀態(tài) } 重復(fù)上面過程直到活躍光線數(shù)目為 0 在 Primitive 類中,主要的計算是: ( 1) 根據(jù)三個頂點計算平面方程 ;( 2) 光線與三角形求交。 根據(jù)三個頂點計算平面方程: 設(shè)有三個點 p1,p2,p3, p12 = p1? p2, p23 = p2 ?p3,則平面的法相量為 normal = p12 p23 平面方程的 D參數(shù)為: D = normal ?p3 代碼示意: vector3 p12,p23。 p12=p1p2。 p23=p2p3。 vector3 normal = (p23)。 ()。 float D = DOT( normal, p3 )。 =normal。 =D。 上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 29 光線與三角形求交 分為 2步 ,計算距離 對于 1, 設(shè)有光線 P = ??0 + ????,平面 P? N +d = 0,約掉 P,則有 (??0 +tV) ?N + d = 0 其 解為: t = ?(??0 ?N +d)/(V? N) 示例代碼: float dist = DOT((()),)/(DOT((),))。 圖 33 三角形與光線碰撞示例 之后檢測交點是否在三角形內(nèi)部 , 對于三角形的每一條邊, ??1 = ??1? ?? ??2 = ??2? ?? ??1 = ??1??2 ??????????????????(??1) ?? = ???0 ???1 如果對每條邊 (?? ???1+ ??1) 0,則交點在三角形內(nèi)部 。 示例代碼: if (dist 0) { if (dist distance) { 上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 30 if(isInside(()+()*dist)) { distance = dist。 return HIT。 } } } bool Primitive::isInside(vector3 p) { if (sameSide(p, p1, p2, p3) amp。amp。 sameSide(p,p2, p1, p3) amp。amp。 sameSide(p, p3, p1, p2)) return true。 else return false。 } bool Primitive::sameSide(vector3 p1,vector3 p2,vector3 a,vector3 b) { vector3 cp1 = (ba).Cross(p1a)。 vector3 cp2 = (ba).Cross(p2a)。 if (DOT(cp1, cp2) = 0) return true。 else return false。 } Scene 類 主要存儲了一個 Primitive 列表 std::vectorPrimitive primList。 當(dāng)聲線 Ray做碰撞檢測時都是訪問 Scene里的 intersect接口進行碰撞檢測 , Scene里的 intersect負(fù)責(zé)返回被碰撞的 Primitive 的 id與從聲線起點到該 Primitive 的距離。 同時 Scene 負(fù)責(zé) Primitive 的產(chǎn)生。 為了使系統(tǒng)支持復(fù)雜的場景, Scene 可以讀取 OBJ模型,并將 OBJ 中的三角片面轉(zhuǎn)換成系統(tǒng)所需要的 Primitive 列表 。 OBJ 模型文件是Wavefront Technologies 為 Advanced Visualizer animation package 開發(fā)的幾何定義文件。這種文件格式是開放的,被很多 3D圖像開發(fā)商使用,這是一種被廣泛接受的 3D文件格式。OBJ 文件由一行行文本組成,注釋行以符號 “”為開頭。 每行開頭都會有個關(guān)鍵字表明此行數(shù)據(jù)的類型 。 對于我們的系統(tǒng),主要用到的 OBJ 中的數(shù)據(jù)有: 關(guān)鍵詞 V: vertex頂點信息 關(guān)鍵詞 F: face 片面信息 Scene中的 bool Scene::loadObj(std::string filename)首先讀取 OBJ的頂點信息,然后再讀取片面信息,之后根據(jù)片面和頂點坐標(biāo)重新生成 基于 Primitive的 場景 。 Scene也負(fù)責(zé)場景的渲染, Scene::render()中,函數(shù)循環(huán)調(diào)用每個 Primitive的渲染函數(shù),從而將整個場景渲染出來。 為了讓場景看起來更方便直觀,渲染時候 開起來 OpenGL的混上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 31 合模式, Blending可以 從 Fragment Shader中取出渲染結(jié)果并且將其用于 混合 新的 場景 。 首先把場景不透明的部分渲染出來,之后 開啟混合模式并關(guān)閉深度測試,再渲染透明的場景 。 代碼示例: glEnable(GL_BLEND)。 glDepthMask(GL_FALSE)。 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)。 ()。 glDepthMask(GL_TRUE)。 glDisable(GL_BLEND)。 Ray類主要是記錄聲線信息 ,其包含以下成員 float strength:聲線的強度 bool active:該條聲線是否活躍,不活躍的聲線不會用來做光線追蹤 int microseconds:該條聲線已經(jīng)傳播的時間 float totalDist:該條聲線已經(jīng)傳播的距離,此項與上一項等價 std::vectorfloat distList:使用 vector 記錄每次碰撞 時 所經(jīng)過的距離 vector3 m_Origin:聲線的起點位置 vector3 m_Direction:聲線的方向 Ray還包含以下幾個函數(shù) void SetOrigin( vector3amp。 a_Origin ) { m_Origin = a_Origin。 }//設(shè)置起點 void SetDirection( vector3amp。 a_Direction ) { m_Direction = a_Direction。 }//設(shè)置方向 vector3amp。 GetOrigin() { return m_Origin。 }//獲取起點 vector3amp。 GetDirection() { return m_Direction。 }//獲取方向 圖 34 球坐標(biāo)中的 theta和 phi 首先, 系統(tǒng)會在聲源位置 產(chǎn)生 theta方向 60份, phi 方向 60份,一共 60*60=3600條的光線, 這 3600條光線在場景中傳播、碰撞,其中一部分會最終撞上聽者,此時,這個聲線就是代表可以被聽者聽到的一份聲音能量 ,并且具有聲源的位置信息。 當(dāng) Ray碰撞到物體時,首先把 Ray的方向設(shè)為原來方向關(guān)于反射面的反射方向,然后,上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 32 將聲強衰減去碰撞的損失 ,同時,把起點位置到物體的距離加到 totalDist里,把這個距離也 push到 distList向量中 。 vector 向量類 對常用向量計算封裝 ,包含 向 量的點乘、取模、歸一化、叉乘、向量加法、向量減法、向量乘法等。 房間沖擊響應(yīng)計算 正如 , 3D聲音渲染本質(zhì)是拿原始聲音與沖擊響應(yīng)做卷積, 于是生成 房間的沖擊響應(yīng)是 3D聲音渲染中的關(guān)鍵 。 HRTF 數(shù)據(jù)庫介紹 MIT的 KEMAR HRTF數(shù)據(jù)庫 是 MIT開 發(fā) 的一個 HRTF數(shù)據(jù)庫 。 MIT使用 DSP卡 輸出通過放大器去驅(qū)動揚聲器 , 在 一個稱為 KEMAR 的 假人 模型 (僅包含頭部和軀 干 ) 的頭內(nèi)放置麥克風(fēng) 。 揚聲器 中播放沖擊,麥克風(fēng)記錄沖擊響應(yīng), 麥克風(fēng)和前置放大器的輸出通過DSP卡的輸入端子輸入到計算機中。 圖 35 消聲室中的 KEMAR假人模型 MIT將 KEMAR假人放置在消音室中,圍繞著假人模型把 架設(shè)用于移動揚聲器的軌道,用電腦可以控制揚聲器所在的位置 。 測量某方位的 HRTF時,首先把揚聲器移動到期望的仰角,然后轉(zhuǎn)動 KEMAR假人, 以獲取不同的水平角方向。 具體 MIT KEMAR測量了 哪 些方位上的 HRTF信息請參見下表: 上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 33 表 31 KEMAR每個方向上的采樣信息 MIT媒體實驗室提供了兩套數(shù)據(jù) : (1) Full Data Full Data是 MIT測量的完整數(shù)據(jù), 每個目錄都以“ elev”開頭跟上一個數(shù)值,這個數(shù)值代表的是 仰角值。 在每個目錄里都有多個形如 “ ”的文件,這些都是沖擊響應(yīng)的錄音。 文件名中的“ L”指的是左聲道,相應(yīng)的如果這個數(shù)值為“ R”,那么指的是右聲道。 “ 10e”指的是仰角是 10 度。 “ 005a”指的是偏轉(zhuǎn)角為 5 度?!?”這個文件所描述的就是左耳聽到的來自 10度仰角 5度偏角方向的沖擊的響應(yīng)。 在 這些 wav 文件中, 采樣頻率 44100Hz, 采樣點數(shù)是 512 個,每個采樣點是 位長 16bit的有符號整數(shù) , 為 單聲道文件 。 (2) Compact Data Compact Data 中也是每個目錄以仰角方位分開。與 Full Data 不同的地方是 Compact Data里每個 wav文件都是雙聲道的,即同時包含某方位的左右耳響應(yīng) 。另一個區(qū)別是Compact Data 中每個聲道中的采樣點數(shù)是 128個,是 Full 版的 1/4。 上 海 大 學(xué) 畢 業(yè) 論 文 (設(shè) 計 ) 34 圖 36 HRTF數(shù)據(jù)庫中 某角度的沖擊響應(yīng) 本
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1