精华内容
下载资源
问答
  • 一个光源是否留下影子,被认为是光源的一个特征,打开影子模式只需一句话: sunlight.setShadowCaster(True) 并且在世界节点上加一句: render.setShaderAuto() 加上影子后,我们会发现,正如我们从天文常识中所...

    月食的成因和日食有着非常大的差别。日食是月亮实体对太阳的遮挡,在观察者和被观察物(太阳)之间,存在着视线的阻隔。而月食则不同,在观察者和被观察物(月亮)之间,实际没有对视线的阻挡,而是因为地球挡住了唯一的光源:太阳,导致月亮因为没有光照而看不到。
    在这里插入图片描述
    事实上,由于地球并不能完全挡住全部的太阳光,有一部分阳光通过大气层的折射仍然可以照在月亮上,所以月全食的时候,月亮并不是完全不可见,只是非常暗,而且带有红色。

    地球

    在前两节课程中,地球一直只作为一个观察点而存在,现在它将一个真正的角色出现,虽然仍然是身处幕后,但它的存在已经是必不可少的了。

            self.earth = loader.loadModel("sphere")
            self.earth.reparentTo(render)
            self.earth.setPos(0,0,3)
            self.earth.setScale(1)
    

    由于地球只是影子出境,它的本尊也就不必贴图了,简单地载入一个球体模型,设置它的位置和大小就可以了。

    影子

    了解了月食的成因,我们就知道如果想编程实现月食现象,就必须引入下一个3D编程的基本概念:影子。熊猫引擎对影子功能的支持还算是不错的,但不能使用平行光了,必须使用聚光灯光源才能有最好的效果。

    一个光源是否留下影子,被认为是光源的一个特征,打开影子模式只需一句话:

            sunlight.setShadowCaster(True)
    

    并且在世界节点上加一句:

            render.setShaderAuto()
    

    加上影子后,我们会发现,正如我们从天文常识中所了解的那样,月食发生在满月之时。由于地球投影挡住了光,月食就发生了。
    在这里插入图片描述

    聚光灯

    熊猫3D引擎声称对于平行光和聚光灯都支持影子,但实际使用效果来看,聚光灯的投影效果很好,但平行光的投影并不好用。所以我们把太阳光改为聚光灯。

    聚光灯是4种光源中最复杂的一个,它不但有位置和方向,而且还有照射开角的问题。

    在这里插入图片描述

    由于聚光灯有投影角度,一个物体在聚光灯的照射下,投影大小与投影背景的位置是有关的。为了尽量接近太阳光,我们把这个角度(Field of View,简称FOV)设置得小一些。

            self.light.node().getLens().setFov(5)
    

    这行代码的意思是开角为5度,从我们的观感来说,基本就可以了。

    红月亮

    上面的模拟月食,没有考虑红月亮的问题。地球的影子把所有光线都挡住了,月球被遮挡的部分呈与背景一样的黑色,完全看不到。

    我们可以用两个光源来实现更加逼真的效果。一个代表正常的白色太阳光,另一个代表暗红色的地球折射光。

        sunlight = panda3d.core.Spotlight('plight')
        sunlight.setShadowCaster(True)
        sunlight2 = panda3d.core.Spotlight('plight2')
        sunlight2.setColor((0.1, 0.05, 0.05, 0.05))
    

    第二个光源,设置一下颜色,整体非常暗,但红色部分略强(0.1, 0.05, 0.05, 0.05),这样的光线照在没有特别设置颜色的月球上,就会呈现暗红的效果。

    这也证实了,观察者和月亮之间确实没有遮挡物,只是光线在改变而已。

    在这里插入图片描述

    展开全文
  • 首先分析出有哪些实体类,太阳、太阳光、墙壁、地面、影子 然后分析太阳应该继承自发光体类、太阳光继承自光类、墙壁继承自物体类 地面是一个承载影子的容器。 转载于:...

    首先分析出有哪些实体类,太阳、太阳光、墙壁、地面、影子

    然后分析太阳应该继承自发光体类、太阳光继承自光类、墙壁继承自物体类

    地面是一个承载影子的容器。

    转载于:https://www.cnblogs.com/yunqing/p/5754617.html

    展开全文
  • 龙源期刊网 http://www.doczj.com/doc/52d05c4e03020740be1e650e52ea551811a6c910.html用MATLAB浅析太阳影子定位问题作者:唐世超蒋婷婷来源:《科技风》2016年第09期摘要:本文针对太阳影子定位问题,通过最小二乘...

    龙源期刊网 http://www.doczj.com/doc/52d05c4e03020740be1e650e52ea551811a6c910.html

    用MATLAB浅析太阳影子定位问题

    作者:唐世超蒋婷婷

    来源:《科技风》2016年第09期

    摘要:本文针对太阳影子定位问题,通过最小二乘拟合,三角函数等方法,综合分析太

    阳直射到地球的纬度角以及在地球表面观测点的纬度等多种因素,并根据提供的杆长在水平地面的坐标的相关数据,建立影子长度变化的数学模型。运用MATLAB等软件分析得出拍摄地的地点与日期。最终进行模型评价与总结。

    关键词:最小二乘拟合;MATLAB;太阳影子定位

    一、问题分析

    太阳影子定位问题是基于太阳照射下物体的影子变化,以此确定拍摄的地点和日期。根据影子的形成原理和影子的变化规律,建立适当的坐标系。运用向量的知识,建立影子末端坐标和地理位置的关系的数学模型。

    欲求影子长度的变化模型,关键在于确定影子的端点坐标与已知经纬度的变化关系。

    二、模型假设

    1)假设一天中太阳直射纬度不变。

    2)不考虑太阳光线在穿越大气层的折射、太阳的仰视角等因素的影响。

    3)假设所求日期为平年,即一年只有365天。

    三、模型的建立与求解

    1)建立直角坐标系。以A(太阳方位角)为坐标原点,AE为x轴,其中x轴是以杆的地端为坐标原点下影子端点的横坐标,AF(杆长为L的影子长度)为y轴,其中AE是过A点

    与纬度相切的单位向量且方向向东,AK为过A点的经线的切线的单位向量且方向向北,建立如图所示的直角坐标系。杆AH在水平地面上的影长为AF。

    联立上式建立直杆在太阳照射下的影子端点坐标的数学模型:

    模型的求解:根据上述数学模型并利用MATLAB软件编程,求解出影子长度随时间变化的关系。

    四、模型误差分析与评价

    展开全文
  • 影子页表浅析

    千次阅读 2013-04-08 08:56:19
    影子页表浅析  xen为了让内存可以为不同的虚拟机共享,它在虚拟地址到物理地址之间引入了一层中间地址,从而Guest OS看到的是这层中间地址,而不是机器的实际地址,因此Guest OS感觉自己的物理地址是从0开始的,...

    影子页表浅析

       xen为了让内存可以为不同的虚拟机共享,它在虚拟地址到物理地址之间引入了一层中间地址,从而Guest OS看到的是这层中间地址,而不是机器的实际地址,因此Guest OS感觉自己的物理地址是从0开始的,“连续”的地址,然而xen将这层中间地址真正的映射到机器地址却可以是不连续的,这样就保证了所有的物理内存可以被任意分配给不同的Guest OS。其关系图如下:


    为了区分这层中间地址,我们将这层中间地址称为物理地址,而机器的实际地址(即没有虚拟化时的物理地址)称为机器地址。

     为了实现物理地址和机器地址的转换,xen用了两种页表:P2M和M2P. P2M是物理地址到机器地址的映射,由于每个Guest OS的物理到机器地址的映射不一样,因此每个Guest OS都有一个P2M表。M2P表是机器地址到物理地址的映射,它只有一个,由xen来维护。

    在全虚拟化中,xen采用了影子页表机制来实现虚拟地址到机器地址的转换,如下图: 


    传统的操作系统进行地址转换时,首先通过通过分段机制将逻辑地址转为线性地址,然后再通过页表机制转为机器地址。这里主要讨论页表机制。在linux中,对于一般的不支持PAE和PSE的32位系统,主要采用了两级页表机制,页目录表PGD和页表PT,在这里我们又称为l2级页表和l1级页表,如果有更高级别的页表,比如四级页表,那么最高的那层称为l4级页表,剩下的分别为l3级,l2级和l1级。对于一个32位的线性地址,操作系统通过CR3寄存器找到PGD所在机器页,然后加上线性地址的最高10位地址,就可以找到PT所在的机器页,然后再加上线性地址的中间10位地址,就可以获得线性地址的所对应的机器页,然后再加上线性地址的最后12位就可以获得该线性地址最后对应的机器地址。

    当操作系统被虚拟化,并采用了影子页表机制后,Guest OS仍通过上述机制进行寻址,即虚拟机监控器那层对Guest OS是透明的。但是它通过CR3查找PGD时,存储在CR3寄存器中的值并不是Guest OS所认为的CR3的值,而是指向影子页表的Host CR3值。这样客户机的页表维护的是线性地址到物理地址的转换;而影子页表维护的是线性地址到相应的机器地址的转换。在进行地址转换时,真正使用的是影子页表。

        每一级别客户页表中都有相应级别的影子页表与之对应。比如如果Guest OS有四级页表l1-l4,那么影子页表也有四级l1’-l4’。每一页客户机页表中都有规定数目中的页表表项,每一个页表表项中都包含了一个物理地址,该物理地址指向下一级的页表地址或者指向线性地址对应的最后物理地址,在与该客户机页表所对应的影子页表中,也有相应数目的影子页表表项,每个页表表项中包含了一个机器地址。该机器地址指向下一级影子页表或者指向线性地址对应的最后机器地址。那么客户机的每一级页表怎么和影子页表的每一级页表对应起来呢?有两种对应关系:一种通过哈希函数来得到,一种通过P2M表来转换。其中P2M只针对最低级别的页表,即l1,其他级别的都通过哈希函数来完成。该哈希函数输入一个Guest OS的页帧号,以及该页的类型,就可以获得相应的影子页表。对于上图就是hash(mfn(A), typeof(A)) = mfn(D), hash(mfn(B),typeof(B)) = mfn(E),P2M(mfn(C)) = mfn(F), 其中mfn代表一个页框的页帧号。

     

    当利用xm create命令来创建一个domain时,会调用domain_create函数,该函数调用arch_domain_create函数,来根据不同的硬件构架来创建相应的domain。

    对于hvm,arch_domain_create会首先调用hvm_domain_initialise,来初始化一个domain所需要的资源。然后调用paging_enable来初始化页表。该函数会根据CPU是否支持EPT技术来调用不同的函数:

    如果支持则调用hap_enabled,否则就调用shdow_enabled函数【1】

    int paging_enable(struct domain *d, u32 mode)

    {

        if ( hap_enabled(d) )

            returnhap_enable(d, mode | PG_HAP_enable);

        else

            returnshadow_enable(d, mode | PG_SH_enable);

    }

    对于影子页表,我们关注shadow_enable函数的实现。在shadow_enable函数中首先调用sh_set_allocation来为影子页表分配内存页。实现方式主要是调用alloc_domheap_pages函数。shadow_enable 然后调用p2m_alloc_table来初始化P2M表。最后用函数shadow_hash_alloc来初始化哈希表。

    通过分析,可以得出在初始化时所有的影子页表项都是空。即并没有建立客户机的页表到影子页表的映射。

                                                           

       当Guest OS 启动分页时,影子页表还是空的。随着客户机的运行,xen就会监控Guest OS对内存访问的操作,一旦发现对应的Guest OS的影子页表不存在,就会分配一个新的物理页,用做影子页表,并利用GuestOS页表的信息和哈希表或者P2M表来填充影子页表项的内容。

    创建影子页表的几个函数如下:

    shadow_get_and_create_l1e

    shadow_get_and_create_l2e

    shadow_get_and_create_l3e

    shadow_get_and_create_l4e

    对于一个虚拟地址,返回该虚拟地址对应的影子页表的1,2,3,4级的机器页和对应的影子页表项指针。

    由于它们的实现原理一样,这里介绍shadow_get_and_create_l1e,其他的类似:

    首先利用shadow_get_and_create_l2e获得2级的机器页和指向1级页表的指针,如果该页表项存在,则可以通过该页表项可以获得1级页表的机器页;如果不存在,则首先利用get_fl1_shadow_status函数通过哈希表来查找该1级别的页表,如果存在就直接获得,如果不存在就首先利用sh_make_shadow来创建一个影子页表,并利用函数l2e_propagate_from_guest根据该创建的影子页表的机器页帧号,以及访问权限创建一个l2页表项,并利用函数shadow_set_l2e,使其指向该页。

    其中l2e_propagate_from_guest由_sh_propagate实现的_sh_propagate 函数 从客户机的页表计算出影子页表相应的页表项。它的原型如下:

    _sh_propagate(struct vcpu *v,

                 guest_intpte_t guest_intpte,

                  mfn_ttarget_mfn,

                  void *shadow_entry_ptr,

                  int level,

                 fetch_type_t ft,

                  p2m_type_tp2mt)

    主要根据客户机的页表项guest_intpte来获取页表项的访问权限,比如读写权限等,并和机器页号target_mfn结合,形成影子页表项。放到shadow_entry_ptr中.

    我们一般不直接用_sh_propagate函数,而是用它的封装函数

    l1e_propagate_from_guest

    l2e_propagate_from_guest

    l3e_propagate_from_guest

    l4e_propagate_from_guest

    分别构造1,2,3,4级的目录页表项。

    Xen具体更新影子页表的方法主要有两种。第一种是out-of-sync【2】。步骤是:

    1.  客户机修改自己的页表,发生页保护异常,陷入到Xen。

    2.  Xen将客户机的页表设置成可写的,并将影子页表中对应项所在的页表中的所有页表项设置成out-of-sync,即设置成页不存在。

    3.  返回至客户机中,客户机重新执行更新页表操作,更新成功。首先,这时客户机的页表和影子页表中的项已经不同步了,但是只要这项在使用时,被同步就可以。其次,由于这时要修改的页表项所在的整个页表被设置成可写,所以这时修改此页表中的其他页表项,仍然可以正常进行。所以,可能这时整个页表中的所有页表项都会不同步。

    4.  当需要使用此页表项进行地址转换时,由于是使用影子页表进行实际的地址转换,而影子页表中此项被设置成不存在,所以会发生缺页异常,陷入到Xen。

    5.  Xen将客户机中的页表重新设置成只读。并按照客户机中的页表,更新影子页表,即将不同步的页表项,按照客户机中的物理地址,在影子页表中更新成机器地址。此时客户机中的页表和影子页表同步。返回至客户机。

     

    影子页表的第二种管理方法是emulated write。步骤是:

    1.  客户机修改自己的页表,发生页保护异常,陷入到Xen。

    2.  Xen直接解析客户机对页表的更新操作,替客户机完成更新页表的操作,并同步更新影子页表。然后返回客户机。

     

    Xen涉及到影子页表的操作主要在下面三种情况:【3】

    1.  缺页中断

    2.  更新CR3

    3.  INVLPG指令仿真

     

    缺页中断

    当xen截取到缺页异常后,第一步要查找客户机的页表以确定指向发生缺页异常的线性地址对应的物理地址所在的页表项,该页表项的[0:11]位表明了该物理地址所对应的页的被访问权限,监控程序再根据此权限对照缺页异常产生的错误码,以确定该缺页异常是客户机本身的缺页异常,还是由于影子页表与客户机页表不一致而产生的错误。后面这种错误称之为影子错误。

    对于客户机本身的缺页异常,xen不作任何处理就直接返回给客户机。客户机会解决该缺页异常。而对于影子错误,xen会根据出错的客户机页表项的内容来生成或更新相应的影

    子页表项。

    当更新一个影子页表项时,入口函数为:

    static int sh_page_fault(struct vcpu *v,

                            unsigned long va,

                             struct cpu_user_regs *regs),其中va对应客户机的虚拟地址。

    流程如下:

    首先要找出该虚拟地址对应的影子页表的机器页和偏移,即找出该页表项所在的影子页表的位置,然后构建该页表项,将其填到该页表项中。核心函数如下:

    ptr_sl1e = shadow_get_and_create_l1e(v, &gw, &sl1mfn,ft);

    l1e_propagate_from_guest(v, gw.l1e, gmfn, &sl1e, ft, p2mt);

    r = shadow_set_l1e(v,ptr_sl1e, sl1e, sl1mfn);

    更新CR3:

    当进程切换时,就会更新当期的CR3的值,这样系统的使用的页表也会发生改变。即不同的进程切换后,页表也会相应的切换,因此影子页表也要做相应的切换。一般采取的方法是删掉所有的影子页表,使之为空,然后根据进程的执行,再建立相应的影子页表。但这样在性能上开销比较大,xen采取一些优化措施,仍然允许使用老的影子页表,但会让影子页表与客户机页表保持同步。

     

    INVLPG指令仿真:

    INVLPG 指令是用来刷新TLB 中的表项。该指令以线性地址为参数,作用是刷新该线性地址在TLB 中的物理地址,使之无效。这样当处理器再访问该线性地址时,就必须遍历页表,并重新填充TLB。该指令通常用于修改单一的页表表项。Xen来截获客户机对INVLPG 指令的执行。 当执行这条指令时,影子页表中相应的页表项设为,这样在GuestOS再次访问该线性地址时,就会发生不存在的影子错误。监控程序会截获这个影子错误,然后会执行上节

    中对缺页异常的处理,重新使影子页表与当前的客户机页表同步。


     


    展开全文
  • 世界的影子

    2017-08-03 19:29:59
    在他们的身后,有一堆火,在火与囚徒之间有一堵矮墙,墙后有人举着各种各样的雕像走过,火光将这些雕像投影在囚徒面对的洞壁上,形成多样的,变动着的影像。囚徒们的一生都犹如在看皮影戏,他们不能相互观望,不知道...
  • Android Canvas实现图片阴影(影子)效果,基于android.graphics.Canvas;android.graphics.BitmapFactory;等实现的图片阴影,图片影子...设置画布颜色,图像平移为了刚好在原图后形成影子效果。 运行环境:Java/Eclipse
  • 结合大数据分析方法,依据底层指标的影子价格进行权重计算,形成对目标层指标的初级评价;根据目标层指标对综合评价的贡献程度进行目标层指标赋权,从“性能”和“效益”2个方面实现配电网的综合评价。
  • Android 图片阴影效果和影子效果 ,先初始化画笔,为后面阴影效果使用,图像平移为了刚好在原图后形成影子效果。在原有矩形基础上,画成圆角矩形,同时带有阴影层。如果不调用mutate方法,则原图也会被改变,因为...
  • 中国的‘影子银行’

    千次阅读 2013-06-18 09:39:11
    中国的‘影子银行’主要指银行理财部门中典型的业务和产品,特别是贷款池、委托贷款项目、银信合作的贷款类理财产品。”该研究所金融重点实验室主任刘煜辉认为,中国的“影子银行”包含两部分,一部分主要包括银行业...
  • win764位影子系统

    2014-08-07 15:41:22
    该软件安装后,电脑启动后就形成一个虚拟系统,摆渡不能入侵。
  • 根据“立竿见影”现象及竿影日照图的原理,分析影子形成原理和影子随时间的变化规律,建立了时间、太阳位置和影子轨迹关系的数学模型,利用影子轨迹图分别推导出求解建筑物朝向、间距、采光时间的数学公式。...
  • 影子生成的主要方法 dbe.setColorFilter(0x7f000000, PorterDuff.Mode.SRC_IN); canvas.translate(posX + (int)(0.9 ...//图像平移为了刚好在原图后形成影子效果。 canvas.skew(-0.9F, 0.0F);//图像倾斜效果。 canvas.
  • PowerShadow影子系统中文版深入评测

    千次阅读 2007-06-07 04:50:00
    软件原理浅析 PowerShadow会克隆本机内硬盘的某个分区或所有分区,并形成一个影子,称之为“影子模式”。它和主系统有着相同架构和功能,用户可以在影子模式下做相同的事。影子模式顾名思义,用户可以任意摧残系统...
  • 和/etc/passwd类似,/etc/shadow文件中每条记录用冒号“:”分隔,形成9个域,格式如下所示:  username:password:lastchg:min:max:warn:inactive:expire:flag 其中,各个域的含义如表所示: /etc/shadow文件中域...
  • "影子虫"知识

    千次阅读 2007-07-15 12:05:00
    "影子虫"为了提醒大家注意安全,不要再被这种不起眼的小虫子骚扰,普及关于"影子虫"的知识.毒隐翅虫,类似飞蚂蚁.有趋光性,白天栖息在杂草石下,夜间出来活动,夏秋两季最常见,喜欢围绕日光灯等飞行.体内没有毒腺,不会蜇...
  • 学者的影子在他苍白色的精神图景里成为了$n$个黑色的点,他们伸长的触手交叉形成了一颗黑色的树。假使每个影子点拥有一个权值$d_i$,黑色的树边也有一个权值$w_i$,对于一条黑色树的路径,令路径上所有影子点权值$d_...
  • //图像平移为了刚好在原图后形成影子效果。  canvas.skew(-0.9F, 0.0F);//图像倾斜效果。  canvas.scale(1.0f, 0.5f);//图像(其实是画布)缩放,Y方向缩小为1/2。  dbe.draw(canvas);//此处为画原图像影子...
  • Unite Europe案例项目《影子战术》层级优化经验分享 http://forum.china.unity3d.com/thread-25087-1-9.html 在Unite Europe 2017的Keynote主题演讲中,我们为大家分享了将主机游戏《影子...
  • 如果通过一个大小近于或小于波长的孔,则以孔为中心,形成环形波向前传播。光并不是严格按直线传播,而且光具有波粒二像性,当遇到比较小(跟光波长差不多)的缝隙时,就会发生衍射,使光的传播方向改变。于是影的地方...
  • 在小董成功成为我的校友的一个星期后,去学校看望了他。看到他桌上放着的这本书,在等他从学校回家的空闲时间段里读完了这...“你偷走了我的影子,不论你在哪里,我都会一直想着你。” 苏菲和我每次在医院巧遇时,都.
  • 藏在低落的影子

    2004-10-02 20:31:00
    凌晨又从腹泻中醒来 , 大豆的机箱还在轰鸣 , 但是他已经和电脑失去了联系 , 外边是黑的 , 没有穿衣服去上厕所 , 迷糊中回来 , 接着是肚子的每个地方都在痛 , 却在疼痛里继续让大脑皮层做着形成了梦的活动 , ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,953
精华内容 5,181
关键字:

影子的形成