Stellarium 行星表面纹理渲染:打开textures目录看懂4张图的来源
【免费下载链接】stellariumStellarium is a free GPL software which renders realistic skies in real time with OpenGL. It is available for Linux/Unix, Windows, macOS and Haiku. With Stellarium, you really see what you can see with your eyes, binoculars or a small telescope.项目地址: https://gitcode.com/gh_mirrors/ste/stellarium
你有没有试过在 Stellarium 里把月球拉近看?那些环形山、月海的明暗斑块,不是画在模型上的,而是几张几万像素的贴图被实时"裹"到球体上渲染出来的。Stellarium 是一款免费开源的实时星空模拟软件,用 OpenGL 呈现肉眼、双筒望远镜或小型望远镜能看到的天空,而它最有说服力的细节之一就是行星表面:靠的就是纹理映射(texture mapping)这套基础图形技术,把一张平面经纬图准确地贴到三维球面上。
🌙 先打开Stellarium看看行星表面
不用编译任何东西,装好软件就能看。启动后按 F6 打开搜索框,输入 Moon,回车后视角会直接对准月球;连按几次加号把它拉近,你能清楚看到环形山边缘的明暗和月海的分界。想换成火星,输入 Mars 即可——火星的红褐色地貌同样来自一张贴图。整个过程不需要改任何文件,这就是开箱即得的效果。
🧵 它是怎么做到的:给地球仪套一张世界地图
纹理映射的原理可以拿地球仪类比:把一张印着世界地图的纸,沿赤道剪开、拉平,再按经纬度一一对应地缠回球面。软件干的事完全一样,分三步走。
第一步,给球体的每个顶点标好"经纬度坐标"(即纹理坐标);第二步,把textures/moon_4k.jpg这类图片读进显卡显存;第三步,渲染时对每个像素,用它的纹理坐标去图里查颜色。这三步在 GPU 上由两个着色器完成:顶点着色器把纹理坐标传下去,片段着色器负责查表取色。核心部分只有几行:
// planet.vert:把纹理坐标传给片段阶段 VARYING mediump vec2 texc; void main() { ...; texc = texCoord; } // planet.frag:按坐标采样贴图 texColor = texture2D(tex, texc);真实实现里这一步之后还会乘上光照方向、粗糙度、阴影等参数——月球甚至额外加载法线贴图moon_normals.png和地平线阴影图moon_horizon.png,让环形山在低角度阳光下投出真实的影子。但骨架就是上面这几行。
📁 在项目里找到它:3个目录加1个ini
想自己动手,先认识这几个位置:
textures/:所有天体表面贴图的存放处,moon_4k.jpg、mars.png、jupiter.png都在这里data/ssystem_major.ini:太阳系天体的"总档案",每个天体一个段落,tex_map=行指定用哪张贴图data/shaders/:planet.vert和planet.frag两个着色器文件,行星渲染的着色逻辑全在其中src/core/:C++ 侧的纹理加载与管理,StelTexture.hpp、StelTextureMgr.cpp负责把图片读进显存
[moon]段落长这样:tex_map=moon_4k.jpg,旁边还有normals_map、horizon_map两行,正好对应上面说的三张贴图。
✏️ 自己动手试一下:换一张月球贴图
- 找一张 2:1 比例的 equirectangular(等距圆柱投影)经纬图,建议宽边是 2 的幂(如 4096 像素),存成 JPG 或 PNG
- 把图片放入
textures/目录,例如命名为moon_custom.jpg - 在
data/ssystem_major.ini里定位到[moon]段落,把tex_map=moon_4k.jpg改成tex_map=moon_custom.jpg - 重启 Stellarium,搜索月球并拉近,确认新贴图位置正确(0 度经线居中、赤道对齐图片中线)
注意:仓库是只读源码,请在自己机器上的安装副本或本地克隆中做这个改动。
⚠️ 容易踩的坑
贴图横向错位或倒置。原因几乎总是投影方式不对:图片不是等距圆柱投影,或者 0 度经线没放在图片正中间。解法是换一张符合规范的图,或先把图片裁剪/拼接到 2:1 再试。
放大后出现模糊方块和接缝闪烁。这是 mipmap 采样在球面接缝处(经度 0/360 度处)选错层级导致的,着色器源码注释里明确提到过这个问题。普通用户不用管它,它是驱动和纹理工件层面的事。
换了贴图但看起来没变化。先确认改的是tex_map而不是别的行,然后彻底退出再重启——Stellarium 只在启动时读取 ini 里的贴图路径。
📖 继续深入
- 构建与安装说明:BUILDING.md
- 贡献指南:CONTRIBUTING.md
- 官方用户手册(含 ssystem ini 参数详解):guide/
- 着色器源码:data/shaders/planet.frag
下一步就动手:打开data/ssystem_major.ini找到[moon]段,对照着把上面四步走一遍,看到自己选的月球贴图出现在屏幕上,这套机制你就彻底明白了。
【免费下载链接】stellariumStellarium is a free GPL software which renders realistic skies in real time with OpenGL. It is available for Linux/Unix, Windows, macOS and Haiku. With Stellarium, you really see what you can see with your eyes, binoculars or a small telescope.项目地址: https://gitcode.com/gh_mirrors/ste/stellarium
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考