r>[0049]例如,圖2中示意的是柱鏡豎貼且每個(gè)柱鏡覆蓋兩個(gè)像素的情況,此情況下,奇數(shù)列像素為右眼圖顯示區(qū),偶數(shù)列像素為左眼圖顯示區(qū)。
[0050]步驟102:調(diào)用3D引擎的繪圖指令,繪制預(yù)先獲取的三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖。
[0051]其中,3D左眼視圖為模擬人左眼看到的3D物體的視圖,3D右眼視圖為模擬人右眼看到的3D物體的視圖。繪制預(yù)先獲取的三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖,具體為在預(yù)設(shè)的顯示組件上繪制三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖,顯示組件為屏幕上的一個(gè)視頻窗口。
[0052]具體的,針對(duì)預(yù)設(shè)的用于模擬右眼位置的3D引擎相機(jī)位置參數(shù)和用于模擬人的右眼視線方向的3D引擎相機(jī)方向參數(shù)來調(diào)用3D引擎的繪圖指令,繪制三維數(shù)據(jù)的3D右眼視圖。針對(duì)預(yù)設(shè)的用于模擬左眼位置的3D引擎相機(jī)位置參數(shù)和用于模擬人的左眼視線方向的3D引擎相機(jī)方向參數(shù)來調(diào)用3D引擎的繪圖指令,繪制三維數(shù)據(jù)的3D左眼視圖。
[0053]其中,3D引擎可以為但不限于Anroid平臺(tái)中的opengl es引擎,3D引擎繪圖之前,會(huì)利用3D引擎接口,傳給3D引擎一些數(shù)據(jù),如在opengl es引擎中的如下數(shù)據(jù):三維坐標(biāo)數(shù)據(jù)、頂點(diǎn)法向量數(shù)據(jù)、紋理坐標(biāo)數(shù)據(jù)、照明光源的空間位置、物體各方向的位移、物體相對(duì)原始坐標(biāo)旋轉(zhuǎn)的角度、照相機(jī)的空間位置、照相機(jī)的朝向、顯示的空間范圍、顯示的投影方式,縮放系數(shù),紋理圖片等,3D引擎接收這些數(shù)據(jù)后,會(huì)自動(dòng)在專門的顯示組件上,畫出我需要的物體圖像。在opengl es引擎中,用于模擬人的右眼位置或左眼位置的3D引擎相機(jī)位置參數(shù)即為照相機(jī)的空間位置和用于模擬人的右眼視線或左眼視線方向的3D引擎相機(jī)方向參數(shù)即為照相機(jī)的朝向,在繪制三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖時(shí),opengl es引擎中其他參數(shù)均相同,僅照相機(jī)的空間位置和照相機(jī)的朝向有所不同,繪制出的3D左眼視圖和3D右眼視圖相差一個(gè)視差。
[0054]本實(shí)施例中,用于模擬左眼位置的3D引擎相機(jī)位置參數(shù)和用于模擬右眼位置的3D引擎相機(jī)位置參數(shù)與三維數(shù)據(jù)的物體預(yù)設(shè)中心的距離均為物體最大直徑的5至6倍,用于模擬人的左眼視線方向和用于模擬人的右眼視線方向均為從相機(jī)位置指向三維數(shù)據(jù)的物體預(yù)設(shè)中心的方向,且用于模擬人的左眼視線方向和用于模擬人的右眼視線方向相差2至8度,優(yōu)選相差6度左右。
[0055]例如,三維數(shù)據(jù)的物體預(yù)設(shè)中心為坐標(biāo)原點(diǎn),用于模擬右眼位置的3D引擎相機(jī)位置參數(shù)與三維數(shù)據(jù)的物體預(yù)設(shè)中心的距離為物體最大直徑的5倍,則用于模擬右眼位置的3D引擎相機(jī)位置參數(shù)A為:[sin (a) *5b,0,cos (a) *5b],用于模擬人的右眼視線方向的3D引擎相機(jī)方向參數(shù)為用于模擬左眼位置的3D引擎相機(jī)位置參數(shù)為,[sin(a+6° )*5b,0,cos (a+6° )*5b],其中,b為物體最大直徑,a為預(yù)設(shè)角度。
[0056]優(yōu)選的,調(diào)用3D引擎的繪圖指令之前,還包括步驟104:將獲取到的通過3D設(shè)計(jì)軟件導(dǎo)出的三維數(shù)據(jù)文件或3D掃描儀掃描得到的三維數(shù)據(jù)文件解析成與3D引擎匹配的格式的三維數(shù)據(jù),并傳送給3D引擎。
[0057]例如,將至少一個(gè)stl格式文件和/或至少一個(gè)obj格式文件解析成與opengl es引擎匹配的三維數(shù)據(jù),并傳送給opengl es引擎。具體的,讀取至少一個(gè)stl格式文件和/或至少一個(gè)obj格式文件,將其中的三維坐標(biāo)數(shù)據(jù)、紋理坐標(biāo)數(shù)據(jù)(如果有的話)、頂點(diǎn)法向量數(shù)據(jù),讀取到內(nèi)存重新組裝成opengl引擎接口可接收的數(shù)據(jù)形式(一種數(shù)組形式)。由于不同格式的數(shù)據(jù)組織方式不一樣,所以讀取的時(shí)候,會(huì)根據(jù)各格式的組織方式,找到顯示需要的數(shù)據(jù),讀進(jìn)opengl es引擎,便于應(yīng)用在3D設(shè)計(jì)的成果展示或3D打印的前期預(yù)覽中,且通過安卓平臺(tái)可以不受地理限制地,隨時(shí)隨地的進(jìn)行展示。將其解析方法為本領(lǐng)域技術(shù)人員可以實(shí)現(xiàn),在此不再贅述。
[0058]步驟103:將3D左眼視圖、3D右眼視圖分別對(duì)應(yīng)顯示在裸眼3D顯示屏的3D左眼圖顯示區(qū)、3D右眼圖顯示區(qū)上。
[0059]優(yōu)選的,判斷裸眼3D顯示屏的像素區(qū)域是否對(duì)應(yīng)裸眼3D顯示屏的3D左眼圖顯示區(qū),若是,則在該像素區(qū)域顯示3D左眼視圖的對(duì)應(yīng)區(qū)域,其中,對(duì)應(yīng)區(qū)域?yàn)榕c該像素區(qū)域的坐標(biāo)相同的3D左眼視圖區(qū)域,若不是,則在該像素區(qū)域顯示3D右眼視圖的對(duì)應(yīng)區(qū)域,其中,對(duì)應(yīng)區(qū)域?yàn)榕c該像素區(qū)域的坐標(biāo)相同的3D右眼視圖區(qū)域。
[0060]如上例中,判斷當(dāng)前繪制的像素區(qū)域?yàn)槠鏀?shù)列,則對(duì)應(yīng)裸眼3D顯示屏的3D右眼圖顯示區(qū),在該像素區(qū)域顯示3D左眼視圖的對(duì)應(yīng)區(qū)域;為偶數(shù)列,則對(duì)應(yīng)裸眼3D顯示屏的3D左眼圖顯示區(qū),在該像素區(qū)域顯示3D左眼視圖的對(duì)應(yīng)區(qū)域。
[0061]圖3示出根據(jù)本發(fā)明提供的一種三維數(shù)據(jù)的裸眼3D顯示方法第二個(gè)實(shí)施例的方法流程圖。本實(shí)施例的一種三維數(shù)據(jù)的裸眼3D顯示方法主要由智能終端來執(zhí)行。本實(shí)施例中,一邊判斷像素區(qū)域的對(duì)應(yīng)視圖邊繪制視圖,該智能終端為帶有柱鏡或光柵的顯示屏為裸眼3D顯示屏,該方法包括以下步驟:
[0062]步驟201:根據(jù)裸眼3D顯示屏上柱鏡或光柵的排列位置獲取裸眼3D顯示屏上的3D左眼圖顯示區(qū)和3D右眼圖顯示區(qū)。該步驟的執(zhí)行過程與步驟101相同。
[0063]步驟202:調(diào)用3D引擎的繪圖指令,繪制預(yù)先獲取的三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖。繪制3D左眼視圖和3D右眼視圖時(shí),判斷當(dāng)前繪制的像素區(qū)域是否對(duì)應(yīng)3D右眼視區(qū),若是,則在像素區(qū)域繪制3D右眼視圖,若不是,則在像素區(qū)域繪制3D左眼視圖。
[0064]繪制三維數(shù)據(jù)的3D左眼視圖時(shí),判斷當(dāng)前繪制的像素區(qū)域是否對(duì)應(yīng)3D右眼視區(qū),若不是,則針對(duì)預(yù)設(shè)的用于模擬左眼位置的3D引擎相機(jī)位置參數(shù)和用于模擬人的左眼視線方向的3D引擎相機(jī)方向參數(shù)來調(diào)用所述3D引擎的繪圖指令,繪制三維數(shù)據(jù)的3D左眼視圖。
[0065]繪制三維數(shù)據(jù)的3D右眼視圖時(shí),判斷當(dāng)前繪制的像素區(qū)域是否對(duì)應(yīng)3D右眼視區(qū),若是,則針對(duì)預(yù)設(shè)的用于模擬右眼位置的3D引擎相機(jī)位置參數(shù)和用于模擬人的右眼視線方向的3D引擎相機(jī)方向參數(shù)來調(diào)用3D引擎的繪圖指令,繪制三維數(shù)據(jù)的3D右眼視圖。
[0066]優(yōu)選的,調(diào)用3D引擎的繪圖指令之前,還包括步驟221:將獲取到的通過3D設(shè)計(jì)軟件導(dǎo)出的三維數(shù)據(jù)文件或3D掃描儀掃描得到的三維數(shù)據(jù)文件解析成與3D引擎匹配的格式的三維數(shù)據(jù),并傳送給所述3D引擎。
[0067]步驟203:將3D左眼視圖、3D右眼視圖分別對(duì)應(yīng)顯示在裸眼3D顯示屏的3D左眼圖顯示區(qū)、3D右眼圖顯示區(qū)上。
[0068]圖4示出根據(jù)本發(fā)明提供的一種三維數(shù)據(jù)的裸眼3D顯示方法第三個(gè)實(shí)施例的方法流程圖。本實(shí)施例的一種三維數(shù)據(jù)的裸眼3D顯示方法主要由智能終端來執(zhí)行。本實(shí)施例中加入了人機(jī)交互步驟,使通過獲取用戶的操作指令特征,繪制3D左眼視圖或3D右眼視圖,實(shí)現(xiàn)平移、旋轉(zhuǎn)、縮放等操作,該智能終端為帶有柱鏡或光柵的顯示屏為裸眼3D顯示屏,該方法包括以下步驟:
[0069]步驟301:根據(jù)裸眼3D顯示屏上柱鏡或光柵的排列位置獲取裸眼3D顯示屏上的3D左眼圖顯示區(qū)和3D右眼圖顯示區(qū)。該步驟的執(zhí)行過程與步驟101相同。
[0070]其中,繪制預(yù)先獲取的三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖,具體為在預(yù)設(shè)的顯示組件上繪制三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖,顯示組件為屏幕上的一個(gè)視頻窗口。
[0071]步驟302:調(diào)用3D引擎的繪圖指令,繪制預(yù)先獲取的三維數(shù)據(jù)的3D左眼視圖和3D右眼視圖。
[0072]優(yōu)選的,步驟302中還包括步驟321和步驟322。
[0073]步驟321:通過觸屏獲取到用戶輸入的操作指令特征,根據(jù)預(yù)置算法對(duì)操作指令特征進(jìn)行處理,更新3D引擎的相應(yīng)繪圖指令參數(shù)。
[0074]具體的,根據(jù)預(yù)置算法對(duì)操作指令特征進(jìn)行處理,更新3D引擎的相應(yīng)繪圖指令參數(shù),包括:
[0075]若通過觸屏實(shí)時(shí)獲取到用戶輸入的旋轉(zhuǎn)操作指令向量,根據(jù)預(yù)置的旋轉(zhuǎn)算法對(duì)旋轉(zhuǎn)操作指令特征向量進(jìn)行處理,更新3D引擎的相機(jī)位置參數(shù)和相機(jī)視線參數(shù)。
[0076]例如,在Anroid平臺(tái)中的opengl es引擎中,若通過觸屏實(shí)時(shí)獲取到用戶輸入的單手指滑動(dòng)向量,預(yù)設(shè)繞z軸旋轉(zhuǎn)(當(dāng)然也可以設(shè)置為繞其他軸旋轉(zhuǎn)),單手指滑動(dòng)向量的X軸分量的像素?cái)?shù)量乘以單位像素角度得到X軸旋轉(zhuǎn)角度,單手指滑動(dòng)向量的y軸分量的像素?cái)?shù)量乘以單位像素角度作為y軸旋轉(zhuǎn)角度,更新物體相對(duì)原始坐標(biāo)旋轉(zhuǎn)的角度,相當(dāng)于更新了 3D引擎的相機(jī)位置參數(shù)和相機(jī)視線參數(shù)。
[0077]若通過觸屏實(shí)時(shí)獲取到用戶輸入的平移操作指令向量,根據(jù)預(yù)置的平移算法對(duì)平移操作指令向量進(jìn)行處理,更新3D引擎的相機(jī)位置參數(shù)和縮放基準(zhǔn)點(diǎn)。
[0078]例如,在Anroid平臺(tái)中的opengl es引擎中,若選中屏幕中的平移工具后,通過觸屏實(shí)時(shí)獲取到用戶輸入的單手指滑動(dòng)向量,預(yù)設(shè)z軸固定不動(dòng),單手指滑動(dòng)向量的X軸分量的像素?cái)?shù)量乘以單位像素長(zhǎng)度得到X軸平移距離,單手指滑動(dòng)向量的I軸分量的像素?cái)?shù)量乘以單位像素長(zhǎng)度作為y軸平移距離,將照相機(jī)的空間位置向單手滑動(dòng)向量相反方向平移,分別沿X軸平移X軸平移距離和沿I軸平移I軸平移距離,縮放基準(zhǔn)點(diǎn)由于從前在3D物體上,也分別向相反方向沿X軸平移X軸平移距離和沿y軸平移y軸平移距離,最終得到更新3D引擎的照相機(jī)的空間位置和3D數(shù)據(jù)的縮放