簡體   English   中英

紋理Opengl地形?

[英]Texturing Opengl Terrain?

在OpenGL中用四邊形構造地形的最佳方法是什么? 我想為我的地形提供大約30種不同的紋理(每種地形類型有1種紋理,因此有30種地形類型),並且希望在任意兩種地形之間有平滑的過渡。

我一直在網上做一些瀏覽,發現有很多不同的方法,包括3D紋理,Alpha通道,混合和使用着色器。 但是,哪些是最有效的,可以處理我想要使用的紋理量? 例如: 這個流行的答案描述了如何使用某些技術,但由於mixmap只有4個屬性(RGBA),因此只能支持4個紋理。

我還應該注意,我對着色器一無所知,因此非着色器需要的技術會更好。

由於您鏈接到描述紋理噴濺的答案,並且其問題提到游戲Oblivion,我可以提供一些額外的洞察力。

使用RGBA mixmap的基本紋理splatting僅支持每個terrain四個紋理四個紋理,但您可以為不同的四邊形使用不同的紋理集。 Oblivion將其地形划分為每邊32個網格點(192英尺)的正方形(稱為“單元格”),每個單元格定義自己的四個地形紋理集。 因此,您不能在一個小區域內擁有大量紋理多樣性,但您可以輕松地在較大區域上改變紋理。 如果您願意,可以為較小的區域(甚至是單個四邊形)定義紋理集,但代價是使用更多內存。

如果您在四元組中確實需要四個以上的紋理,則可以使用多個混合地圖。 對於每個額外的一個,您只需執行另一個紋理查找以獲得另外四個混合因子,並在前一個mixmap的結果之上混合另外四個紋理。 您可以根據需要擴展到盡可能多的紋理,同樣以犧牲內存為代價。

紋理噴濺在高度圖上與LOD技術相結合可能很棘手,因為當單個低細節地形四邊形代表一組高細節四邊形時,您必須為大四邊形的不同區域采樣幾個不同的混合圖。 Oblivion通過僅對全細節地形使用紋理噴濺來回避這個問題; 以較低分辨率渲染的遠程單元格使用由編輯器生成的預先計算的紋理,其預先進行噴濺和縮小。

一種可以替代的質感潑灑是使用clipmap渲染“ megatexture ”。 使用這種方法,您可以使用單個大型紋理來表示整個地形,並且可以通過加載RAM的不同部分來填充RAM,其中只需要根據查看器的當前位置實際渲染它所需的細節。 (在完整細節處無法看到地形的遠處部分,因此無需在完整細節處加載它們。)

這種方法的優點是它的藝術自由:您可以在紋理中的任何位置放置精細的細節,而不考慮頂點網格。 缺點是它實現起來相當復雜,並且整個剪貼圖必須存儲在某個地方 ,可能存儲在磁盤上的大文件中,以便您可以根據需要將部分內容加載到RAM中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM