celestia吧 关注:3,159贴子:95,199

【教程】CELESTIA大教程MS版·节选

只看楼主收藏回复

本人最近正在写一部大教程。
打算发一些基础知识,以证明我的存在感,免得大家以为我好像发了个UNTITLED就退出C圈了似的。
龟速更新,但绝不会变成无意义贴。
计划发一下恒星、行星、卫星、星系、星云这五个物体的制作方法。
不废话,楼下开写。


1楼2016-07-09 20:40回复
    飘过


    来自手机贴吧2楼2016-07-09 20:43
    回复
      节选什么鬼


      来自手机贴吧3楼2016-07-09 20:44
      回复
        == 恒星部分 ==
        === 概述 ===
        Celestia的恒星代码一般储存在文本文档不可读的Stars.dat里(这也正是大家找某些恒星代码却抓耳挠腮找不到的原因),少数恒星则存放在stc文件里。我们做插件就使用这一文件格式。
        *注意:最好不要用ANSI格式储存stc文件,最好用UTF-8,否则你输入汉文恒星名会出错(识别不了代码)。
        一段完整的STC恒星源代码,或者说,一段完整的STC内容,至少要有:
        |赤经【代码:RA】、赤纬【代码(下同):Dec】、距离【Distance】/绕行质心【OrbitBarycenter】、绕行轨道参数【不确定,一般椭圆轨道是EllipticalOrbit】(“/”表示二选一)
        |星等(绝对星等【AbsMag】、视星等【AppMag】二选一)
        |光谱【SpectralType】
        |当然,不要忘了CELESTIA的基本格式。
        那么,什么是“基本格式”呢?


        4楼2016-07-09 20:57
        收起回复
          强势围观


          来自手机贴吧5楼2016-07-09 20:58
          回复
            === 延伸 CELESTIA的基本格式 ===
            以下是太阳的代码:
            **********
            0 "Sol:Sun"
            {
            OrbitBarycenter "Solar System Barycenter"
            CustomOrbit "vsop87-sun"
            SpectralType "G2V"
            AbsMag 4.83
            UniformRotation
            {
            Period 609.12 # 25.38 days
            Inclination 7.25
            AscendingNode 75.77
            MeridianAngle 23.00 # standard meridian
            }
            }
            **********
            以下是地球的代码:
            **********
            "Earth" "Sol"
            {
            Texture "earth.*"
            NightTexture "earthnight.*"
            # SpecularTexture "earth-spec.*"
            Color [ 0.85 0.85 1.0 ]
            SpecularColor [ 0.8 0.8 0.85 ]
            SpecularPower 25.0
            HazeColor [ 1 1 1 ]
            HazeDensity 0.3
            Radius 6378.140 # equatorial
            # Oblateness 0.0034
            Atmosphere {
            Height 60
            Lower [ 0.43 0.52 0.65 ]
            Upper [ 0.26 0.47 0.84 ]
            Sky [ 0.40 0.6 1.0 ]
            Sunset [ 1.0 0.6 0.2 ]
            CloudHeight 7
            CloudSpeed 65
            CloudMap "earth-clouds.*"
            CloudShadowDepth 1.0
            Mie 0.001
            MieAsymmetry -0.25
            Rayleigh [ 0.001 0.0025 0.006 ]
            MieScaleHeight 12
            }
            CustomOrbit "vsop87-earth"
            # Overridden by CustomOrbit
            # EllipticalOrbit {
            #Period 1.0000
            #SemiMajorAxis 1.0000
            #Eccentricity 0.0167
            #Inclination 0.0001
            #AscendingNode 348.739
            #LongOfPericenter 102.947
            # MeanLongitude 100.464
            # }
            # Orientation of Earth's axis with respect to the ecliptic plane and
            # equinox of J2000 is computed with the long period extension of
            # extension of the the P03 precession model presented in
            # "Long-periodic Precession Parameters", J. Vondrak (2006)
            BodyFrame { EclipticJ2000 {} }
            CustomRotation "earth-p03lp"
            # Overriden by CustomRotation
            # UniformRotation
            # {
            # Period 23.93447117
            # Inclination -23.4392911
            # MeridianAngle 280.147
            # }
            Albedo 0.30
            }
            **********
            注释·凡例: 放了十个星号分隔起来的是源代码。
            发现什么特点了吗?
            没错。他们都是按照这样一个模式:
            ----------
            "天体名1" "天体名2"
            {
            参数名1 参数1
            参数名2 参数2
            参数名3 参数3
            ……
            }
            ----------
            注释·凡例:放了十个星号分隔起来的不是源代码,仅供参考。自己复制了过去然后CE不管你的话别来找我。
            *这个是C++的源代码格式。
            ssc,也就是行星之类的代码更加复杂。我们先讲STC。


            6楼2016-07-09 21:04
            回复
              快快快,别tj


              来自手机贴吧7楼2016-07-09 21:17
              回复
                === 切回正题 ===
                stc格式没有上面示例代码的“天体名2”,这个数据在底下的参数OrbitBarycenter里。
                如果恒星不动呢?
                就当他不存在好了。
                OrbitBarycenter:尼玛……
                前面说到的代码,在这里就是一个个的参数名;而这些赤经赤纬等等的实际数据就是一个个的参数。
                *不要作死把井字符放在代码前面装酷,那玩意是屏蔽代码用的。
                ↑↑↑
                C++中,井字符是用来屏蔽当前一行代码,将其作为注释用的。
                不信?你看图一:

                图1
                如果这一串代码都被系统读取了,那……
                好了,废话少说。
                以下是恒星的代码模式:
                ----------
                "恒星名字1:恒星名字2"
                {
                OrbitBarycenter "质心"
                SpectralType "光谱"
                AbsMag 星等
                EllipticalOrbit {(椭圆轨道,也是最常用的轨道)
                Period 轨道周期t
                SemiMajorAxis 轨道长半轴a
                Eccentricity 轨道离心率e
                Inclination 轨道倾角i
                AscendingNode 近地点焦距
                ArgOfPericenter 升交点赤经
                MeanAnomaly 平近点角
                }
                }
                ----------
                以上按情况来填。名字1名字2之类的,是别名。多个名字之间用冒号隔开。注意是英文状态下的冒号。另外,不能出现斜线。


                8楼2016-07-09 21:34
                收起回复
                  那么,如果是不动的恒星呢?
                  ----------
                  "恒星名字同上"
                  {
                  RA 赤经
                  Dec 赤纬
                  Distance 距离太阳系质心,单位光年
                  SpectralType "光谱"
                  AbsMag 星等
                  }
                  ----------
                  *注意,STC的赤经用的单位不是0-24的时分秒,而是0-360的度。所以要将时分秒的数据乘以15。


                  9楼2016-07-09 21:50
                  回复
                    说了半天光谱光谱,可光谱怎么写呢?
                    === 光谱的写法 ===
                    举个例子,太阳的光谱是G2V。
                    G——恒星色调,影响着恒星的温度,以及在赫罗图上的位置。
                    2——恒星亚光谱,每个光谱分为0-9十个次光谱。
                    V——恒星类型。
                    恒星色调:
                    ☆基础色调
                    O-深蓝
                    B-蓝
                    A-蓝白
                    F-黄白
                    G-黄
                    K-橙
                    M-红
                    ☆特殊色调
                    WN,WC-沃尔夫-拉叶星
                    DA,DB等前面带D的-白矮星
                    C、R、N、S-碳星
                    L、T-棕矮星
                    Y-亚矮星
                    Q-中子星
                    X-黑洞
                    恒星类型:
                    I-超巨星
                    II=亮巨星
                    III-巨星
                    IV-次巨星
                    V-主序星
                    VI-矮星
                    VII-白矮星(由于有D光谱,这个一般不用,LZ也没试过)


                    10楼2016-07-09 22:01
                    收起回复
                      === 质心写法 ===
                      质心看不见,没有热量(任何行星转质心即使会一年一度撞进恒星里也是0K,这是在3d“我的天”系统中发现的bug)。
                      质心制作方法如下:
                      ----------
                      Barycenter "质心名"
                      {
                      RA 赤经,跟上面的一样
                      Dec 赤纬
                      Distance 距离
                      }
                      ----------
                      这个Barycenter,叫前缀。后面制作SSC时经常会用到。


                      11楼2016-07-09 22:07
                      收起回复
                        === 半径写法 ===
                        半径这一参数在恒星制作中可有可无,但在后面的制作中就有点用了。
                        ----------
                        Radius 半径
                        ----------
                        半径的单位是千米。


                        12楼2016-07-09 22:09
                        收起回复
                          == 行星部分 ==
                          === 代码模式 ===
                          "行星名" "母恒星名"
                          {
                          Class "planet"
                          Visible true
                          Albedo 天体反光率,越大航天器离它足够近的情况下会反光越厉害
                          InfoURL 信息网址,右键点击天体并单击’信息‘时将跳转至该网页
                          Radius 半径*
                          Oblateness 扁率,越大越扁
                          Mass 重量(相对木星而言,即N倍木星重量)
                          OrbitColor [ 轨道颜色R值 轨道颜色G值 轨道颜色B值 ]
                          EllipticalOrbit {*
                          【畧,详见恒星部分】
                          }
                          Texture "表面贴图"
                          NightTexture "夜间贴图,在夜半球叠加"
                          SpecularTexture "反光贴图,是一种黑白影像,白色地区反光"
                          SpecularColor [ 反光颜色R值 反光颜色G值 反光颜色B值 ]
                          SpecularPower 反光程度,一般为25.0
                          BumpMap "凹凸贴图,一种灰度纹理,发白为高处,发黑为低处"
                          BumpHeight 凹凸高度,差不多就是最高海拔
                          Color [ 天体远观颜色R值 天体远观颜色G值 天体远观颜色B值 ]
                          Atmosphere {
                          Height 大气层高度
                          Lower [ 近地大气颜色R值 近地大气颜色G值 近地大气颜色B值 ]
                          Upper [ 远地大气颜色R值 远地大气颜色G值 远地大气颜色B值 ]
                          Sky [ 天空颜色R值 天空颜色G值 天空颜色B值 ]
                          Sunset [ 落日颜色R值 落日颜色G值 落日颜色B值 ]
                          Mie 米氏大气散射参数
                          MieAsymmetry 米氏大气散射不对称性参数
                          Rayleigh 瑞利大气散射参数
                          Absorption [ 消光系数R值 消光系数G值 消光系数B值 ]
                          MieScaleHeight 米氏大气散射标高
                          }
                          HazeColor [ 雾气颜色R 雾气颜色G 雾气颜色B ]
                          HazeDensity 雾气浓度
                          Emissive 是否自发光,true或false
                          }
                          事实上上面没有标*的都可以去掉,不过偷懒的后果就是这个。

                          图2


                          14楼2016-07-09 22:45
                          收起回复
                            歇一会,明天接着续。【龟速


                            15楼2016-07-09 22:56
                            回复
                              === 奇葩的单位制 ===
                              话说啊,有一天小锑看到了上面这些,于是打算自己也做一个。他让星球离主恒星145000000km,于是他写下:
                              **********
                              SemiMajorAxis 145000000
                              **********
                              到头来发现不对,才知道:
                              ★一般来说,轨道长半轴单位是AU也就是天文单位。
                              CE的单位制是非常混乱的,你问为什么?问Chris去。
                              注意上面是一般来说,那二般来说呢?


                              16楼2016-07-10 20:17
                              收起回复