本發(fā)明涉及一種3d視覺技術(shù),特別涉及一種基于內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng)和方法,尤其涉及對一個房間內(nèi)某一墻面的紋理進行設(shè)置后,此房間內(nèi)其他尚未設(shè)置紋理的墻面都復(fù)制加載此墻面的紋理。
背景技術(shù):
在視覺設(shè)計技術(shù)中,尤其在3d房屋的設(shè)計領(lǐng)域中,人們需要時常對房間里的各個墻面的紋理進行設(shè)置,當前的視覺技術(shù)中,對一個房間內(nèi)的尚未設(shè)置紋理的各個墻面,仍需要挨個設(shè)置紋理而導(dǎo)致操作成本高的問題。如現(xiàn)有的3d渲染引擎0pengl和direct3d等皆實現(xiàn)此挨個設(shè)置紋理技術(shù)方案。
技術(shù)實現(xiàn)要素:
1.發(fā)明要解決的技術(shù)問題
針對現(xiàn)在技術(shù)所提及對一個房間內(nèi)的未有紋理的墻面需要挨個設(shè)置紋理而導(dǎo)致操作成本高的問題,本發(fā)明提供了一種基于內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng)和方法,即公開了對一個房間內(nèi)某一墻面的紋理進行設(shè)置后,此房間內(nèi)其他尚未設(shè)置紋理的墻面都復(fù)制加載此墻面的紋理的方法。
2.技術(shù)方案
一種基于內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng),包括內(nèi)墻對象記錄器、紋理設(shè)置器、紋理復(fù)制器和3d模型渲染器;
內(nèi)墻對象記錄器:負責以房間為單元并將同一個房間內(nèi)的所有內(nèi)墻對象按內(nèi)墻對象數(shù)據(jù)模型進行記錄,記錄后的信息即為內(nèi)墻對象數(shù)據(jù)模型信息;內(nèi)墻對象數(shù)據(jù)模型信息包括:內(nèi)墻對象標識(此標識為區(qū)別其他內(nèi)墻的唯一標識,即通過此標識可以找到唯一一個內(nèi)墻對象),房間標識(此標識記錄了此內(nèi)墻所屬的房間,通過此標識可以找到唯一一個房間對象),以及紋理對象(此記錄紋理繪制所需的圖案信息);
紋理設(shè)置器:負責從內(nèi)墻對象記錄器中獲取內(nèi)墻對象數(shù)據(jù)模型信息,并對此內(nèi)墻對象的紋理進行設(shè)置,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻對象數(shù)據(jù)模型信息;然后將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給紋理復(fù)制器;
紋理復(fù)制器:負責從紋理設(shè)置器中獲取新設(shè)置(設(shè)置后)的內(nèi)墻對象數(shù)據(jù)模型信息以及從內(nèi)墻對象記錄器中獲取同一個房間內(nèi)的其他內(nèi)墻對象數(shù)據(jù)模型信息,并根據(jù)新設(shè)置的內(nèi)墻對象中的紋理對房間內(nèi)其他內(nèi)墻對象進行紋理設(shè)置,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新內(nèi)墻對象數(shù)據(jù)模型信息;
3d模型渲染器:負責根據(jù)內(nèi)墻對象記錄器中的內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象對對應(yīng)的內(nèi)墻進行紋理繪制;
一種基于內(nèi)墻對象記錄器的3d房間紋理加載的方法,其步驟包括:
步驟1.初始化內(nèi)墻數(shù)據(jù)模型。內(nèi)墻對象記錄器以房間為單元并將同一個房間內(nèi)的所有內(nèi)墻的內(nèi)墻對象數(shù)據(jù)模型進行記錄,記錄后的信息即為內(nèi)墻對象數(shù)據(jù)模型信息;內(nèi)墻對象數(shù)據(jù)模型信息包括但不限于:內(nèi)墻對象標識(此標識為區(qū)別其他內(nèi)墻的唯一標識,即通過此標識可以找到唯一一個內(nèi)墻對象),房間標識(此標識記錄了此內(nèi)墻所屬的房間,通過此標識可以找到唯一一個房間對象),紋理對象(此記錄了此內(nèi)墻被設(shè)置的紋理圖案,如果紋理未被設(shè)置,則紋理對象為空值);
步驟2.設(shè)置內(nèi)墻的紋理。通過紋理設(shè)置器從內(nèi)墻對象記錄器選取一個內(nèi)墻對象,并對此內(nèi)墻設(shè)置紋理,即更新內(nèi)墻數(shù)據(jù)模型信息中的紋理對象信息,假設(shè)被設(shè)置后的新的紋理對象為texture_new,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,由內(nèi)墻對象記錄器更新對應(yīng)的內(nèi)墻數(shù)據(jù)模型信息,即根據(jù)內(nèi)墻對象標識和房間標識從內(nèi)墻對象記錄器查找到唯一個內(nèi)墻對象,并將查找到的內(nèi)墻對象的紋理對象設(shè)置為texture_new;然后將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給紋理復(fù)制器;
步驟3、更新單個內(nèi)墻的數(shù)據(jù)模型信息:內(nèi)墻對象記錄器從紋理設(shè)置器獲取更新后的對象數(shù)據(jù)模型信息,從根據(jù)對象數(shù)據(jù)模型信息中的內(nèi)墻對象標識、房間標識查詢到唯一一個內(nèi)墻對象,再將更新后的對象數(shù)據(jù)模型信息中的新紋理對象texture_new覆蓋此內(nèi)墻對應(yīng)的舊紋理對象;
步驟4、復(fù)制內(nèi)墻紋理。紋理復(fù)制器根據(jù)從紋理設(shè)置器中獲取被設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息,并根據(jù)此內(nèi)墻對象數(shù)據(jù)模型信息中的房間標識從內(nèi)墻對象記錄器中查找出與此房間標識相同的所有內(nèi)墻對象數(shù)據(jù)模型信息,對這些被查出的內(nèi)墻對象數(shù)據(jù)模型信息中所有的內(nèi)墻對象標識與被設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息中的內(nèi)墻對象標識進行比較,取與被設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息中的對象標識不相等的內(nèi)墻對象數(shù)據(jù)模型信息,這些被過濾出的內(nèi)墻對象數(shù)據(jù)模型信息即為與被設(shè)置的內(nèi)墻對象屬于同一房間的所有其他內(nèi)墻對象數(shù)據(jù)模型信息,即為內(nèi)墻對象數(shù)據(jù)模型信息組,假設(shè)此被過濾出的內(nèi)墻對象數(shù)據(jù)模型信息組為group_others,并將被過濾出的內(nèi)墻對象數(shù)據(jù)模型信息組group_others中的所有內(nèi)墻對象模型信息中的紋理對象挨個更新為新紋理對象texture_new,再將更新后的內(nèi)墻對象數(shù)據(jù)模型信息組group_others傳輸給內(nèi)墻對象記錄器;
紋理復(fù)制的方案分為兩種,即過濾復(fù)制和全復(fù)制。這兩種技術(shù)方案是相互排斥的,在實施過程中任選其一即可。
過濾復(fù)制,對內(nèi)墻對象數(shù)據(jù)模型信息組group_others中的每個內(nèi)墻對象的內(nèi)墻數(shù)據(jù)模型信息中的紋理對象進行判斷,如果此內(nèi)墻對象的紋理對象不為空值,即已經(jīng)被設(shè)置了紋理,則不對此內(nèi)墻對象的紋理對象進行設(shè)置;如果此內(nèi)墻對象的紋理對象為空值,即沒有設(shè)置任何紋理,則將此內(nèi)墻數(shù)據(jù)模型中的紋理對象信息更新為新紋理texture_new,再將設(shè)置后的內(nèi)墻信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻數(shù)據(jù)模型信息;
全復(fù)制,將內(nèi)墻對象數(shù)據(jù)模型信息組group_others中的每個內(nèi)墻對象的內(nèi)墻數(shù)據(jù)模型信息中的紋理對象信息更新為新紋理texture_new,再將設(shè)置后的內(nèi)墻信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻數(shù)據(jù)模型信息;
步驟5、更新其他內(nèi)墻的數(shù)據(jù)模型信息:內(nèi)墻對象記錄器從紋理復(fù)制器中獲取更新后的內(nèi)墻對象數(shù)據(jù)模型信息組group_others,從group_others中獲取每一個內(nèi)墻對象數(shù)據(jù)模型信息,再對每個內(nèi)墻對象數(shù)據(jù)模型信息的新紋理對象texture_new進行更新,更新單個內(nèi)墻的數(shù)據(jù)模型信息參見步驟3;
步驟6、繪制內(nèi)墻紋理。3d模型渲染器根據(jù)內(nèi)墻對象記錄器中的內(nèi)墻對象數(shù)據(jù)模型信息,并從內(nèi)墻對象數(shù)據(jù)模型信息中獲取紋理對象,然后根據(jù)此紋理對象對對應(yīng)的內(nèi)墻進行紋理繪制(紋理繪制的具體技術(shù)方案在現(xiàn)有技術(shù)中已有公開,本發(fā)明不再贅述);
上述的步驟6與步驟2或者步驟4沒有嚴格的先后次序。
3.有益效果
在3d房屋的設(shè)計領(lǐng)域中,人們需要時常需要對房間里的各個墻面的紋理進行設(shè)置,當前對一個房間內(nèi)的尚未設(shè)置紋理的墻面需要挨個設(shè)置紋理而導(dǎo)致操作成本高的問題。本發(fā)明公開一種內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng)和方法的突出效果體現(xiàn)在:
本發(fā)明提供了內(nèi)墻對象記錄器,以房間為單元將各內(nèi)墻建立一個整體的信息模型,即將一個房間內(nèi)的所有內(nèi)墻對應(yīng)的內(nèi)墻對象數(shù)據(jù)模型進行記錄,使得當對任意一個內(nèi)墻對象對紋理設(shè)置時都可以查找到同一房間內(nèi)其他所有的內(nèi)墻對象數(shù)據(jù)模型,解決了現(xiàn)有技術(shù)中各墻內(nèi)墻相互孤立的紋理設(shè)置問題;
本發(fā)明提供了紋理復(fù)制器,即通過對房間內(nèi)某一內(nèi)墻進行一次紋理設(shè)置,房間其他內(nèi)墻紋理同步復(fù)制的技術(shù)方案,解決了現(xiàn)有技術(shù)中需要對各墻內(nèi)墻進行紋理挨個設(shè)置問題;
本發(fā)明提供了紋理復(fù)制器,即通過對房間內(nèi)的內(nèi)墻對象數(shù)據(jù)模型的紋理對象進行過濾復(fù)制,解決了現(xiàn)有技術(shù)中對已有紋理的直接覆蓋的問題;
綜上,本發(fā)明提供了一種基于內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng)和方法,實現(xiàn)了對一個房間內(nèi)某一墻面的紋理進行設(shè)置后,此房間內(nèi)其他尚未設(shè)置紋理的墻面都復(fù)制加載此墻面的紋理的方法,很好地解決了對一個房間內(nèi)的尚未設(shè)置紋理的墻面需要挨個設(shè)置紋理而導(dǎo)致操作成本高的問題。
附圖說明
圖1為基于內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng)示意圖。
圖2為基于內(nèi)墻對象記錄器的3d房間紋理加載方法的模塊設(shè)計圖。
具體實施方式
下面結(jié)合附圖對本發(fā)明做進一步的詳細說明,以令本領(lǐng)域技術(shù)人員參照說明書文字能夠據(jù)以實施,如圖1和圖2所示:一種基于內(nèi)墻對象記錄器的3d房間紋理加載的系統(tǒng),包括內(nèi)墻對象記錄器、紋理設(shè)置器、紋理復(fù)制器和3d模型渲染器;其中內(nèi)墻對象記錄器負責以房間為單元并將同一個房間內(nèi)的所有內(nèi)墻對象按內(nèi)墻對象數(shù)據(jù)模型進行記錄,記錄后的信息即為內(nèi)墻對象數(shù)據(jù)模型信息;內(nèi)墻對象數(shù)據(jù)模型信息包括:內(nèi)墻對象標識(此標識為區(qū)別其他內(nèi)墻的唯一標識,即通過此標識可以找到唯一一個內(nèi)墻對象),房間標識(此標識記錄了此內(nèi)墻所屬的房間,通過此標識可以找到唯一一個房間對象),以及紋理對象(此記錄紋理繪制所需的圖案信息);
紋理設(shè)置器負責從內(nèi)墻對象記錄器中獲取內(nèi)墻對象數(shù)據(jù)模型信息,并對此內(nèi)墻對象的紋理進行設(shè)置,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻對象數(shù)據(jù)模型信息;然后將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給紋理復(fù)制器;
紋理復(fù)制器負責從紋理設(shè)置器中獲取新設(shè)置(設(shè)置后)的內(nèi)墻對象數(shù)據(jù)模型信息以及從內(nèi)墻對象記錄器中獲取同一個房間內(nèi)的其他內(nèi)墻對象數(shù)據(jù)模型信息,并根據(jù)新設(shè)置的內(nèi)墻對象中的紋理對房間內(nèi)其他內(nèi)墻對象進行紋理設(shè)置,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新內(nèi)墻對象數(shù)據(jù)模型信息;
3d模型渲染器負責根據(jù)內(nèi)墻對象記錄器中的內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象對對應(yīng)的內(nèi)墻進行紋理繪制。
一種基于內(nèi)墻對象記錄器的3d房間紋理加載的方法,其步驟為:
步驟1.初始化內(nèi)墻數(shù)據(jù)模型。內(nèi)墻對象記錄器以房間為單元并將同一個房間內(nèi)的所有內(nèi)墻的內(nèi)墻對象數(shù)據(jù)模型進行記錄,記錄后的信息即為內(nèi)墻對象數(shù)據(jù)模型信息;內(nèi)墻對象數(shù)據(jù)模型信息包括但不限于:內(nèi)墻對象標識,此標識取值可以但不限于整數(shù)型或者字符型;房間標識,此標識取值可以但不限于整數(shù)型或者字符型;紋理對象,此記錄了此內(nèi)墻被設(shè)置的紋理圖案,如果紋理未被設(shè)置,則紋理對象為空值,例如,假設(shè)一個房子有3個房間,每個房間有4面內(nèi)墻,則內(nèi)墻對象記錄器遍歷每個房間,并分配房間標識分別為“房間1”、“房間2”以及“房間3”,再分別對每個房間遍歷所有的內(nèi)墻,并分配內(nèi)墻對象標識分別為“內(nèi)墻1”、“內(nèi)墻2”、“內(nèi)墻3”、“內(nèi)墻4”,通過房間標識以及內(nèi)墻標識可以唯一找到對應(yīng)的內(nèi)墻對象數(shù)據(jù)模型信息;以房間為單元的內(nèi)墻對象數(shù)據(jù)模型信息的存儲可以但不限于鏈表或者數(shù)組;
步驟2.設(shè)置內(nèi)墻的紋理。一般通過人工對3d模型中的內(nèi)墻對象進行更新紋理操作而觸發(fā),由紋理設(shè)置器捕獲到被操作的內(nèi)墻對象數(shù)據(jù)模型信息然后通過紋理設(shè)置器從內(nèi)墻對象記錄器選取對應(yīng)的被操作的內(nèi)墻對象數(shù)據(jù)模型信息,并對此內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象進行設(shè)置,假設(shè)被設(shè)置后的新的紋理對象為texture_new,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻對象數(shù)據(jù)模型信息,具體為:根據(jù)內(nèi)墻對象標識和房間標識從內(nèi)墻對象記錄器查找到唯一個內(nèi)墻對象數(shù)據(jù)模型信息,并將查找到的內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象設(shè)置為texture_new;然后將設(shè)置后的內(nèi)墻對象信息傳輸給紋理復(fù)制器;
步驟3、更新單個內(nèi)墻的數(shù)據(jù)模型信息:內(nèi)墻對象記錄器從紋理設(shè)置器獲取更新后的對象數(shù)據(jù)模型信息,從根據(jù)對象數(shù)據(jù)模型信息中的內(nèi)墻對象標識、房間標識查詢到唯一一個內(nèi)墻對象,再將更新后的對象數(shù)據(jù)模型信息中的新紋理對象texture_new覆蓋此內(nèi)墻對應(yīng)的舊紋理對象;
步驟4.復(fù)制內(nèi)墻紋理。紋理復(fù)制器根據(jù)從紋理設(shè)置器中獲取被設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息,并根據(jù)此內(nèi)墻對象中的房間標識從內(nèi)墻對象記錄器中查找出與此房間標識相同的所有內(nèi)墻對象數(shù)據(jù)模型信息,對這些被查出的內(nèi)墻對象數(shù)據(jù)模型信息中的內(nèi)墻對象標識與被設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息中的內(nèi)墻對象標識進行比較,取與被設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息中的內(nèi)墻對象標識不相等的內(nèi)墻對象數(shù)據(jù)模型信息,這些被過濾出的內(nèi)墻對象數(shù)據(jù)模型信息即為與被設(shè)置的內(nèi)墻對象數(shù)據(jù)模型信息屬于同一房間的所有其他內(nèi)墻對象數(shù)據(jù)模型信息,即為內(nèi)墻對象數(shù)據(jù)模型信息組,假設(shè)此被過濾出的內(nèi)墻對象數(shù)據(jù)模型信息組為group_others。對內(nèi)墻對象數(shù)據(jù)模型信息組group_others進行紋理復(fù)制的方案分為兩種,即過濾復(fù)制和全復(fù)制。這兩種技術(shù)方案是相互排斥的,在實施過程中任選其一即可。假設(shè),對房間1中的內(nèi)墻1的內(nèi)墻對象數(shù)據(jù)模型信息的紋理進行設(shè)置,則group_others包括房間1中的內(nèi)墻2、房間1中的內(nèi)墻3、房間1中的內(nèi)墻4的內(nèi)墻對象數(shù)據(jù)模型信息;
過濾復(fù)制,對內(nèi)墻對象數(shù)據(jù)模型信息組group_others中的每個內(nèi)墻對象的內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象進行判斷,如果此紋理對象不為空值,則不對此內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象進行設(shè)置;如果此內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象為空值,則將此內(nèi)墻數(shù)據(jù)模型中的紋理對象更新為新紋理texture_new,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻數(shù)據(jù)模型信息,即根據(jù)內(nèi)墻對象標識和房間標識從內(nèi)墻對象記錄器查找到唯一個內(nèi)墻對象,并將查找到的內(nèi)墻對象的紋理標識設(shè)置為texture_new;假設(shè),房間1中的內(nèi)墻2的原有的內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象不為空,房間1中的內(nèi)墻3、房間1中的內(nèi)墻4的原有內(nèi)墻對象數(shù)據(jù)模型信息中的紋理對象為空,則過濾后的內(nèi)墻對象數(shù)據(jù)模型信息包括房間1中的內(nèi)墻3、房間1中的內(nèi)墻4;
全復(fù)制,將內(nèi)墻對象數(shù)據(jù)模型信息組group_others中的每個內(nèi)墻對象的內(nèi)墻對象數(shù)據(jù)模型中的紋理對象信息更新為新紋理texture_new,再將設(shè)置后的內(nèi)墻對象數(shù)據(jù)模型信息傳輸給內(nèi)墻對象記錄器,以更新對應(yīng)的內(nèi)墻數(shù)據(jù)模型信息,即根據(jù)內(nèi)墻對象標識和房間標識從內(nèi)墻對象記錄器查找到唯一個內(nèi)墻對象數(shù)據(jù)模型信息,并將查找到的內(nèi)墻對象的紋理標識設(shè)置為texture_new;
步驟5、更新其他內(nèi)墻的數(shù)據(jù)模型信息:內(nèi)墻對象記錄器從紋理復(fù)制器中獲取更新后的內(nèi)墻對象數(shù)據(jù)模型信息組group_others,從group_others中獲取每一個內(nèi)墻對象數(shù)據(jù)模型信息,再對每個內(nèi)墻對象數(shù)據(jù)模型信息的新紋理對象texture_new進行更新,更新單個內(nèi)墻的數(shù)據(jù)模型信息參見步驟3;
步驟6.繪制內(nèi)墻紋理。3d模型渲染器根據(jù)內(nèi)墻對象記錄器中的內(nèi)墻對象數(shù)據(jù)模型信息,并根據(jù)其內(nèi)墻對象數(shù)據(jù)模型信息中的紋理標識查詢對應(yīng)的紋理對象,然后根據(jù)此紋理對象對對應(yīng)的內(nèi)墻進行紋理繪制。