
HyperRogue的20種幾何投影全解析從圓盤到魚眼的渲染秘密【免費下載鏈接】hyperrogueA SDL roguelike in a non-euclidean world項目地址: https://gitcode.com/gh_mirrors/hy/hyperrogueHyperRogue 是一款運行在非歐幾里得雙曲世界中的 SDL 角色探索游戲roguelike其核心魅力之一在于它內(nèi)置了20 多種幾何投影可以把無限大的雙曲平面壓縮到你的屏幕上看。本文將帶你從最經(jīng)典的龐加萊圓盤投影一路講到魚眼投影揭秘每種投影的數(shù)學(xué)思想與渲染效果并給出源碼位置方便你動手試驗。 為什么雙曲世界需要投影雙曲平面是無限延展且曲率處處為負(fù)的無法直接畫進一個有邊框的窗口。游戲必須用投影把雙曲點映射到屏幕坐標(biāo)的函數(shù)來做可視化。所有可用的投影在eModel枚舉中定義從mdDisk圓盤一直到mdConformalEgg共 50 余項定義位置classes.cpp每種投影的名稱表雙曲/歐氏/球面三種幾何下的叫法見mdinfclasses.cpp這張 1024×1024 的紋理貼圖會貼在 3D 模型表面配合 HyperRogue 的幾何投影渲染——通過它你能直觀看到投影如何彎曲空間。 經(jīng)典三劍客圓盤、半平面與帶狀投影特點源碼枚舉圓盤Poincaré disk保角、最經(jīng)典Escher 風(fēng)格的無窮套娃感mdDisk半平面上半平面保角與圓盤等距變換等價適合看地平線mdHalfplane帶狀Mercator保角的圓柱式投影可水平滾動像一張無限長的紙mdBand圓盤投影是 HyperRogue 的門面靠近邊界越收縮一眼就能看到無窮遠(yuǎn)。半平面則把無窮遠(yuǎn)放到一條直線上探索時路的感覺更直接。 等距與等積數(shù)學(xué)家的取舍沒有任何投影能同時保住距離和面積HyperRogue 把這套取舍做成了可切換選項等距equidistant保從中心出發(fā)的距離如azimuthal equidistantmdEquidistant等積equi-area保面積如azimuthal equi-areamdEquiarea、MollweidemdMollweide、sinusoidalmdSinusoidal、CollignonmdCollignon等體積mdEquivolume讓體積在視覺上一致地圖學(xué)移植Miller、Gall stereographic、Winkel tripel、Aitoff、Hammer 等地球投影也全部搬到了雙曲世界mdMiller、mdGallStereographic等 實用技巧想量距離就用等距投影想判斷這塊區(qū)域有多大就切等積投影。 空間感投影雙曲面、半球與真實透視這一類投影把雙曲空間渲染成三維曲面在窗口里旋轉(zhuǎn)空間縱深感極強ball modelmdBall把平面鼓起成球Minkowski hyperboloidmdHyperboloid最正統(tǒng)的雙曲幾何模型hemispheremdHemisphere上半球適合俯瞰native perspectivemdPerspective與geodesicmdGeodesic模擬相機沿測地線看向平面relativistic perspectivemdRelPerspective、Lie perspectivemdLiePerspective用相對論/Lie 群幾何定義的物理式透視邊緣會出現(xiàn)類似引力透鏡的變形 魚眼、Joukowsky 與奇趣變換這是最能體現(xiàn)渲染秘密的部分——每個投影背后都是一個復(fù)變函數(shù)或群作用fisheyemdFisheye與 variant fisheyemdFisheye2徑向非線性拉伸產(chǎn)生魚眼鏡頭觀感Joukowsky transformmdJoukowsky及其逆復(fù)合mdJoukowskyInverted源自空氣動力學(xué)的保角變換畫面會出現(xiàn)漂亮的繞翼流線感rotated hyperbolesmdRotatedHyperboles旋轉(zhuǎn)雙曲線族扭曲出漩渦效果spiral/ringmdSpiral螺旋坐標(biāo)世界繞成環(huán)狀conformal square / conformal eggmdConformalSquare、mdConformalEgg把無窮平面塞進正方形或蛋形里且保持保角retroazimuthal 三兄弟mdRetroCraig、mdRetroLittrow、mdRetroHammer反方位投影任意點到中心都直來直去還有mdPolar極坐標(biāo)、mdTwoPoint/mdThreePoint多點等距、mdCentralInversion中心反演等?? 投影在代碼里是怎么落地的配置結(jié)構(gòu)projection_configuration持有當(dāng)前投影eModel、中心、縮放等參數(shù)定義見 hyper.h元信息表mdinf為每個投影保存三種幾何下的顯示名與能力標(biāo)志保角、等積、帶狀、透視……游戲菜單據(jù)此生成列表GPU 加速開啟 shader 后部分投影直接用著色器計算由consider_shader_projection控制見 hyper.h自定義投影RogueViz 允許把新投影動態(tài)追加進mdinf擴展入口在 rogueviz/extra-projections.cpp? 在游戲中快速切換投影的完整步驟進入游戲后按v打開設(shè)置菜單在投影Projection選項中用鼠標(biāo)滾輪滾動瀏覽 20 種投影選中回車按方向鍵PageUp/PageDown旋轉(zhuǎn)視角按Home把畫面中心對準(zhǔn)自己想橫著探索切band帶狀投影視野變成一條無限走廊 新手建議路線圓盤 → 半平面 → 雙曲面hyperboloid→ 魚眼 → Joukowsky五種看下來非歐幾何的味道就有了。 延伸探索投影枚舉與元信息classes.cpp投影配置結(jié)構(gòu)hyper.h自定義投影擴展rogueviz/extra-projections.cpp更多非歐幾何演示rogueviz/ 目錄下的各個 demo 源文件平鋪圖案樣例感受雙曲鑲嵌tessellations/sample/從圓盤到魚眼HyperRogue 把同一張地圖的 50 種看法變成了一個可以即點即玩的畫廊。挑一個投影開一局你眼中的雙曲世界從此有了第二種形狀?!久赓M下載鏈接】hyperrogueA SDL roguelike in a non-euclidean world項目地址: https://gitcode.com/gh_mirrors/hy/hyperrogue創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考