精华内容
下载资源
问答
  • (可以景区或建设规划展示用)策略从网上获取地图高度信息,导入到UE4 的landscape 中。并计算出正确的导入参数。使用SunSky Actor 将光照设置成与现实相符的参数。步骤下载地形高度数据在这个网站上 ...

    020cdafe93bfe162d3f36222c9068099.png

    目标

    尽量1:1 还原现实地形效果。(可以做景区或建设规划展示用)

    策略

    • 从网上获取地图高度信息,导入到UE4 的landscape 中。并计算出正确的导入参数。
    • 使用SunSky Actor 将光照设置成与现实相符的参数。

    步骤

    下载地形高度数据

    在这个网站上 https://terrain.party/ 选取需要的地图区域,并下载。可以选择截取范围。这里以8km 为例。地图命名为xxx。

    下载后的压缩包里有个xxx README.txt,其中包含重要信息。当前目标下,其中这些信息有用:

    • 告诉你通常来说请用 xxx Height Map (Merged).png 这张地图
    • 告诉你地图的高度区间。在“Elevation Adjustment”那一节的第一句。本例中是这样的“The original elevation models for this area contained elevations ranging from 3304 through 4005 meters.”,意思是说这个地图数据的海拔高度范围是 3304米~4005米。
      • 注意:你截取的数据中,不一定是3304 和4005 这个数据。
    • 后面一堆文字解释了图片数据的意义。翻译成人话:
      • 这个图片中的纯黑像素与纯白像素表示的高度差是1024米。
      • 这个图片中的纯黑像素表示的海拔高度是 3304米 - 40米 = 3264米。注意:
        • 你截取的数据中,不一定是3304 这个数据。
        • 3264 这个数据是算出来的,原文中并没有出现。

    旋转图片

    导入之前,需要把图片顺时针旋转90°。为什么?因为这样导入UE4 之后的东西南北方向,刚好符合“Sun and Sky Actor” 的东西南北方向。

    导入Landscape

    5681de7d37d3842bec4be5dfe88c6366.png

    使用New Landscape 工具,并选择Import from file,选择下载到的 xxx Height Map (Merged).png。

    这时候面板下面的 Section Size, Section Per Component, Number of Component, Overall Resolution 数据会自动调整。

    这里面最有用的数据是Overall Resolution。它为什么是 1135 * 1135?因为导入的图片分辨率是 1081*1081。UE4 选择了尽可能小的Section Size, Section Per Component, Number of Component 参数, 让 Overall Resolution 比1081*1081 刚好稍大一些。

    调整Landscape 创建参数

    为了让landscape 刚好能1: 1 比例还原现实。需要调整Location 和 Scale 数据。

    • Scale z,直接设置成200。
      • 经测试,默认100 的缩放会让纯黑和纯白数据有51200 单位的高度差,即512米。所以200 的缩放,刚好符合地形数据的纯黑混白 1024 高度差。
    • Locatoin z,在本例中设置成 3264米 + 1024/2 米 = 2752米,即275200 单位。
      • 3264米是前面计算出来的,地形图的纯黑表示海拔 3264米。
      • 加上1024/2 米是因为landscape 的pivot 在纯灰高度处。
    • Scale xy,在本例中设置成 8000 米 / (1081 - 1) 米 * 100 = 740.74
      • 经测试,如果按Scale xy默认设置100,而Overall Resolusion 为1135 那么landscape 的边长是1134 米(113400 单位)。
      • 有效地形数据边长实际只有1081 像素,那么如果按Scale xy默认设置100,那么有效地形的边长应该有1080 米(108000 单位)。
        • 有效数据的边长只有1081,而Overall Resolusion 为1135,上面已经解释过原因。UE4 会把多出来的数据填充上无用数据。 我们只考虑中间有效数据的正确缩放。
      • 而数据实际表示的是8km 边长的范围。所以Scale xy 应该修改为 8000 米 / 1080 米 * 100 = 740.74
    • Location xy。设置多少无所谓,没有真实数据对应的方法。

    点击“Import”用这些设置创建landscape,就可以得到一个比例和真实世界一样,海拔高度也和真实世界一样的地形了。

    设置光照

    把场景中旧的光源相关Actor 去掉,添加SunSky。

    10c3e06ff030c00679aa9313d7761a78.png

    然后设置正确的经纬度、时区、日期、时间,就可以得到非常正确的光照了。

    2ef3b41f61707851b7d698aeb7950bd8.png

    SunSky Actor 并没有提供雾效。需要添加Exponential Height Fog 来产生雾效。调整SunSky 中的SkyAtmosphere 的 Aerial Pespective View Distance 可以调整雾的浓度。

    效果

    简单加了一些水和光照烘焙,凑合一下。

    dec8957500fbaa79e103426900905835.png
    会了这招,至少再也不用担心场景比例不对了
    展开全文
  • 可能很多同学在阅读Python源...当Python解析器读源代码文件时,会如下两件事情:设置特殊变量,如__name__;执行源代码文件中的所有代码;现在我们将焦点放到__name__变量上来,看看在Python程序中为什么要使用...

    可能很多同学在阅读Python源代码时会发现经常会出现if __name__ == '__main__':这样的代码,那么这样的代码起到什么作用呢?本文将为你深入解析__name__变量的含义和应用场景。

    当Python解析器读源代码文件时,会做如下两件事情:

    设置特殊变量,如__name__;

    执行源代码文件中的所有代码;

    现在我们将焦点放到__name__变量上来,看看在Python程序中为什么要使用__name__变量。

    让我们先使用一段代码示例来探索导入和脚本的工作方式。假设这些代码位于名为foo.py的文件中。

    print("before import")import mathprint("before functionA")def functionA():print("Function A")print("before functionB")def functionB():print("Function B {}".format(math.sqrt(100)))print("before __name__ guard")if __name__ == '__main__':functionA()functionB()print("after __name__ guard")

    当Python解释器读取源文件时,它首先定义一些特殊变量。在这个案例中,我们关心的是__name__变量。如果将Python脚本文件作为主程序运行,也就是通过下面的命令运行foo.py。

    python foo.py

    Python解释器会使用下面的代码为__name__变量赋值,也就是说,__name__变量的值是"__main__"。

    __name__ = "__main__"

    另一方面,假设其他模块是主程序,并且它将导入foo.py。这意味着在主程序中会有如下的语句:

    import foo

    Python解释器将搜索foo.py文件(以及搜索其他一些变体),在执行该模块之前,它将从import语句中将名称“ foo”分配给__name__变量,也即是使用下面的代码为__name__变量赋值。

    __name__ = "foo"

    设置__name__变量后,Python解释器通过一次执行一条语句的方式执行模块中的所有代码。您可能想要在代码示例侧面打开另一个窗口,以便您可以按照以下说明进行操作。

    现在执行前面的代码,会输出如下内容:

    before importbefore functionAbefore functionBbefore __name__ guardFunction AFunction B 10.0after __name__ guard

    如果当前的Python脚本按着主程序的方式执行(使用python命令),那么__name__变量的值就是"__main__"。这样就会调用functionA和functionB函数,从而输出"Function A"和"Function B 10.0"

    如果foo.py脚本不是作为主程序运行,而是被另一个程序导入,则__name__变量的值是“ foo”,而不是“ __main__”,在这种情况下,将不会调用functionA和functionB函数。不过在这种情况下,仍然会输出"after __name__ guard",因为这条语句不属于if语句。

    现在总结一下:

    根据foo.py的运行方式,可能会有两种输出结果。

    (1)作为主程序运行,会输出如下结果

    before importbefore functionAbefore functionBbefore __name__ guardFunction AFunction B 10.0after __name__ guard

    (2)作为模块被导入,会输出如下结果:

    before importbefore functionAbefore functionBbefore __name__ guardafter __name__ guard

    可能有很多同学会有这样的疑问,为什么Python要提供这个功能呢?像C#、Java这样的编程语言并没有这样的功能啊!其实这要从Python脚本的运行机理谈起。如果Python脚本作为主程序执行,这个执行方式与Java类似。不过当导入一个Python模块就不一样了。对于Java语言,导入一个包,也只是导入而已,除非显式调用包中的API,否则单单导入,是不会执行Java代码的。但Python就不一样了,如果使用import语句导入一个模块,其实是先执行被导入模块中的所有代码,然后才会执行当前模块的代码。例如,下面的代码,会先执行foo.py脚本中的代码,然后才会执行print('current module')

    import fooprint('current module')

    执行这段代码,会输出如下的内容:

    before importbefore functionAbefore functionBbefore __name__ guardafter __name__ guardcurrent module

    如果一个Python脚本,同时即可以作为主程序执行,也可以作为模块被导入,这就要求在模块被导入时不执行作为主程序执行时的代码,所以如果是在主程序中执行的代码,如果使用__main__变量进行判断。

    关于__name__的一些疑问

    有的同学问,在脚本文件中可以有多个__name__校验代码块吗?其实通常只有一个__name__校验代码块吗,但Python解析器并不会阻止你编写多个__name__校验代码块吗。

    下面再给大家2段代码,看看输出结果会是什么:

    # foo2.pydef functionA():print("a1")import foo2print("a2")functionB()print("a3")def functionB():print("b")print("t1")if __name__ == "__main__":print("m1")functionA()print("m2")print("t2")

    在这段代码中导入了模块本身(foo2.py),执行代码,会输出如下结果:

    t1m1a1t1t2a2ba3m2t2

    大家可以分析一下这段代码的执行过程。下面将if __name__ == "__main__":去掉,看看会发生什么。

    # foo3.pydef functionA():print("a1")import foo3print("a2")functionB()print("a3")def functionB():print("b")print("t1")print("m1")functionA()print("m2")print("t2")

    执行这段代码,会引起死循环吗?其实是不会的,因为Python解析器有缓存,如果一个模块在当前模块中已经被导入了,当第二次导入时,将不会再次执行被导入模块的代码,而是直接使用缓存中的内容,所以import foo3只会导致foo3.py文件中的代码作为导入模块的方式被执行一次。所以执行这段代码,输出结果如下:

    t1m1a1t1m1a1a2ba3m2t2a2ba3m2t2

    大家可以自己分析一下程序的执行过程。

    关注「极客起源」公众号,加星标,不错过精彩技术干货

    展开全文
  • 可能很多同学在阅读Python源代码时会发现经常会出现if __name__ == '__main__':这样的代码,那么这样的代码起到什么作用呢?本文将为你深入解析__name__变量的含义和应用场景。当Python解析器读源代码文件时,会...
    可能很多同学在阅读Python源代码时会发现经常会出现if __name__ == '__main__':这样的代码,那么这样的代码起到什么作用呢?本文将为你深入解析__name__变量的含义和应用场景。当Python解析器读源代码文件时,会做如下两件事情:
    • 设置特殊变量,如__name__;

    • 执行源代码文件中的所有代码;

    现在我们将焦点放到__name__变量上来,看看在Python程序中为什么要使用__name__变量。让我们先使用一段代码示例来探索导入和脚本的工作方式。假设这些代码位于名为foo.py的文件中。
    print("before import")import mathprint("before functionA")def functionA():    print("Function A")print("before functionB")def functionB():    print("Function B {}".format(math.sqrt(100)))print("before __name__ guard")if __name__ == '__main__':    functionA()    functionB()print("after __name__ guard")
    当Python解释器读取源文件时,它首先定义一些特殊变量。在这个案例中,我们关心的是__name__变量。如果将Python脚本文件作为主程序运行,也就是通过下面的命令运行foo.py。
    python foo.py
    Python解释器会使用下面的代码为__name__变量赋值,也就是说,__name__变量的值是"__main__"。
    __name__ = "__main__"
    另一方面,假设其他模块是主程序,并且它将导入foo.py。这意味着在主程序中会有如下的语句:
    import foo
    Python解释器将搜索foo.py文件(以及搜索其他一些变体),在执行该模块之前,它将从import语句中将名称“ foo”分配给__name__变量,也即是使用下面的代码为__name__变量赋值。
    __name__ = "foo"
    设置__name__变量后,Python解释器通过一次执行一条语句的方式执行模块中的所有代码。您可能想要在代码示例侧面打开另一个窗口,以便您可以按照以下说明进行操作。现在执行前面的代码,会输出如下内容:
    before importbefore functionAbefore functionBbefore __name__ guardFunction AFunction B 10.0after __name__ guard
    如果当前的Python脚本按着主程序的方式执行(使用python命令),那么__name__变量的值就是"__main__"。这样就会调用functionA和functionB函数,从而输出 "Function A" 和 "Function B 10.0"如果foo.py脚本不是作为主程序运行,而是被另一个程序导入,则__name__变量的值是“ foo”,而不是“ __main__”,在这种情况下,将不会调用functionA和functionB函数不过在这种情况下,仍然会输出 "after __name__ guard" ,因为这条语句不属于if语句。现在总结一下:根据foo.py的运行方式,可能会有两种输出结果。(1)作为主程序运行,会输出如下结果
    before importbefore functionAbefore functionBbefore __name__ guardFunction AFunction B 10.0after __name__ guard
    (2)作为模块被导入,会输出如下结果:
    before importbefore functionAbefore functionBbefore __name__ guardafter __name__ guard
    可能有很多同学会有这样的疑问,为什么Python要提供这个功能呢?像C#、Java这样的编程语言并没有这样的功能啊!其实这要从Python脚本的运行机理谈起。如果Python脚本作为主程序执行,这个执行方式与Java类似。不过当导入一个Python模块就不一样了。对于Java语言,导入一个包,也只是导入而已,除非显式调用包中的API,否则单单导入,是不会执行Java代码的。但Python就不一样了,如果使用import语句导入一个模块,其实是先执行被导入模块中的所有代码,然后才会执行当前模块的代码。例如,下面的代码,会先执行foo.py脚本中的代码,然后才会执行print('current module')
    import fooprint('current module')
    执行这段代码,会输出如下的内容:
    before importbefore functionAbefore functionBbefore __name__ guardafter __name__ guardcurrent module
    如果一个Python脚本,同时即可以作为主程序执行,也可以作为模块被导入,这就要求在模块被导入时不执行作为主程序执行时的代码,所以如果是在主程序中执行的代码,应该使用__main__变量进行判断。关于__name__的一些疑问有的同学问,在脚本文件中可以有多个__name__校验代码块吗?其实通常只有一个__name__校验代码块吗,但Python解析器并不会阻止你编写多个__name__校验代码块吗。下面再给大家2段代码,看看输出结果会是什么:
    # foo2.pydef functionA():    print("a1")    import foo2    print("a2")    functionB()    print("a3")def functionB():    print("b")print("t1")if __name__ == "__main__":    print("m1")    functionA()    print("m2")print("t2")
    在这段代码中导入了模块本身(foo2.py),执行代码,会输出如下结果:
    t1m1a1t1t2a2ba3m2t2
    大家可以分析一下这段代码的执行过程。下面将if __name__ == "__main__":去掉,看看会发生什么。
    # foo3.pydef functionA():    print("a1")    import foo3    print("a2")    functionB()    print("a3")def functionB():    print("b")print("t1")print("m1")functionA()print("m2")print("t2")
    执行这段代码,会引起死循环吗?其实是不会的,因为Python解析器有缓存,如果一个模块在当前模块中已经被导入了,当第二次导入时,将不会再次执行被导入模块的代码,而是直接使用缓存中的内容,所以import foo3只会导致foo3.py文件中的代码作为导入模块的方式被执行一次。所以执行这段代码,输出结果如下:
    t1m1a1t1m1a1a2ba3m2t2a2ba3m2t2
    大家可以自己分析一下程序的执行过程。推荐阅读  点击标题可跳转

    1、连Python产生器(Generator)的原理都解释不了,还敢说Python用了5年?

    2、牛掰了!鸿蒙与Android完美融合,将鸿蒙设备当Android设备用

    3、【鸿蒙学院】鸿蒙App开发直播学员提问与回答

    4、【鸿蒙学院】鸿蒙IDE:下载、安装DevEco Studio

    5、 Python高效编程之88条军规(2):你真的会格式化字符串吗?

    6、像极客一样提取Android的Root权限

    关注「极客起源」公众号,加星标,不错过精彩技术干货

    4fd1c6f83e740a2979928efdb49071b5.png

    6def9038dde0c7080728092bbad6b56c.png

    展开全文
  • 是什么?下面的代码从task.py和project.py导入。但这两个文件都没有任何与result()相关的内容,因此这里不包括它们。#!/usr/bin/env python3from task import Taskfrom project import Projectmain_me...

    在主回路的底部,我看到了这条线

    result = result()

    但我不知道它能做什么,我甚至不能用谷歌搜索它。

    这是什么?

    下面的代码从task.py和project.py导入。但这两个文件都没有任何与result()相关的内容,因此这里不包括它们。

    #!/usr/bin/env python3

    from task import Task

    from project import Project

    main_menu = {

    'title': 'MAIN MENU',

    'items': ['1. Create a project', '2. Load a project', '3. Quit'],

    'actions': {

    '3': exit,

    }

    }

    project_menu = {

    'title': 'PROJECT MENU',

    'items': ['1. Add a task', '2. Add task dependency', '3. Set task progress',

    '4. Show project', '5. Back to Main Menu'],

    'actions': {

    '5': main_menu,

    }

    }

    def select_menu(menu):

    while True:

    print()

    print(menu['title']) #MAIN MENU

    print('\n'.join(menu['items'])) #1. create project, 2. load project ..

    selection = input('Select > ')

    next_action = menu['actions'].get(selection)

    #print(selection, menu['actions'])

    if next_action:

    return next_action

    else:

    print('\nPlease select from the menu')

    def create_project():

    global cur_project

    global project_menu

    project_name = input('Enter the project name: ')

    cur_project = Project(project_name)

    return project_menu

    main_menu['actions']['1'] = create_project

    cur_menu = main_menu

    cur_project = None

    while True:

    result = select_menu(cur_menu)

    while callable(result):

    result = result()

    cur_menu = result

    展开全文
  • 外链资源是什么意思?外链资源,也叫导入链接,外部链接,友情链接等,SEO必须要懂得使用外链资源。外部链接就是其他网站给你网站的链接,对方可以是首页或内页,指向你网站的可以首页或内页。指向到哪一个页面,就...
  • import os在python中有哪些意思发布时间:2020-09-10 14:57:28来源:亿速云阅读:109这篇文章将为大家详细讲解有关import os在python中有哪些意思,文章内容质量较高,因此小编分享给大家个参考,希望大家阅读完这...
  • 什么是词云词云又叫文字云...先看看效果图:他还可以这样的效果:也可以这样的效果:看过效果图后是不是觉得很棒,接下来属于自己的词云图先制作一个简单的1、python 中导入词云库,wordcloud,导入很简单不...
  • import numpy as npimport pandas as pdexante_beta = pd.read_csv('beta_0.csv') #导入回归得到的ex-ante betamonthly_profit = pd.read_csv('alpha_1.csv') #导入股票每月收益率weighted_index_1 = pd.read_csv...
  • 然后导入全量备份,最后启动 Drainer 从 savepoint 开始同步增量数据。 这个<code>savepoint在文档中并没有描述, 指这篇的<code>-gen-savepoint参数吗? 这应该已经一个过期的参数和过期的文档吧? 在4.2 ...
  • OS模块简单的来说它一个Python的系统编程的操作模块,可以处理文件和目录这些我们日常手动需要的操作。可以查看OS模块的帮助文档:>>> import os #导入os模块>>> help(os) #查看os模块帮助...
  • 那么外链的作用是什么呢? 外链可以为自己的网站带来流量,将其他网站的流量导入到自己的网站,同时也可以提高网站的权重排名。 网站需要高质量的外链 前几年,在seo这个圈子里,都流传这一句话,内容为王,外链为...
  • 当我们写完一个函数或者类后,想...那就加个判断语句吧,每个py文件有一个变量__name__,当我们print(__name__)可以发现这个变量等与"main",那么我们可以if语句:当__name__这个变量等于"main"时,这个测试代码才能运
  • 文章目录一 代码样例二 运行代码2.1 作为主程序运行2.2 作为导入的模块运行2.3 执行foo.py文件中的代码为什么这样工作? 每当Python解释器读取源文件时,它都会两件事: 它设置了一些特殊变量,例如__name__,...
  • 站点模块(在启动期间自动导入,除非给出了-S命令行选项)向内置命名空间添加了几个常量(例如exit) . 它们对交互式解释器shell很有用,不应在程序中使用 .从技术上讲,他们大致相同:提高SystemExit . sys.exit 在sys...
  • 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main__":那么这个语句到底是做什么用的呢?在解释之前,首先要声明的,不管你多么小白,你一定要知道的:1.python文件的后缀为.py;2..py...
  • 游戏情景导入新概念。2.枚举类似的事例解释概念。3. 用相同事例加深理解。课前准备:给学生机发送Python-3.4.4.msi,让学生完成安装。学习要求:完成“明7暗7姓名“程序得50分,选并完成”明8暗8姓名“程序额外加...
  • 什么意思?意思就是,每次导入excel时按照一定的过滤条件, 把之前存储的数据的状态置为删除状态(在真实的环境中开发,几乎不存在"物理删除",也就是真正的把数据删除的应用场景,基本上都用一个"状态"字段来控制...
  • 小学数学四年级下册 乘法运算定律的应用教学设计【教学内容】教材P29例8(1).【教学目标】1.使学生理解乘法的交换律、结合... 教学过程:【情景导入】我们先来个游戏,聪明的小猴子最爱动脑筋了,他正在思考谁能...
  • NumpyPython数据分析所必须要掌握的基础库之一。以下为入门Numpy的100题小练习,原为github上的开源项目,由和鲸社区的小科翻译并整理(保留了部分原文作为参考)。受限于篇幅,小编在这里只提供了部分题目的运行...
  • 对于用Python的朋友来说,在平常的数值计算中肯定会用到一个开源包,没错,它就是大名鼎鼎的Numpy包,全称为...在Python中,如果涉及到第三方包的使用,第一步要的事情当然将这个包导入啦!那咱们就看看Nu...
  • NPOI导入Excel2007问题

    2013-03-25 12:41:00
    这两天导出Excel,朋友介绍NPOI(很强大),不知道为什么我和他的一样,我的Excel2007导入出错(Excel2003正常)错误如下 提示因为Excel版本问题,意思是让用XSSF来读取Excel2007,但在NPOI中没有找到XSSF...
  • 由于在java课上需要一个学生作业管理的小程序。而这个程序需一个 Unix style shell system。也就是说,对每一个function都要写一个程序。...这里具体每个选项什么意思可以参照 eclipse 制作jar 然后整个jar包...
  • 很多新手站长们在wordpress安装或者搬家原来有的数据库,导入导出之后经常出现一些导入失败的情况,这里介绍一下因为数据库版本不同导致的常见经典错误之一-WordPress 导入数据库报错 Unknown collation: utf8mb...
  • 导入时报ORA-39095错误

    2013-08-14 16:09:30
    今天在一个表的查询条件导入时,报了ORA-39095:unable to allocate 8192 。。错误。大概意思就是说没办法扩展出8KB空间,这个问题很奇怪,我的空间和权限都没有什么问题。  百度解释: 因为设置参数parallel...
  • 很多新手站长们在wordpress安装或者搬家原来有的数据库,导入导出之后经常出现一些导入失败的情况,这里介绍一下因为数据库版本不同导致的常见经典错误之一-WordPress 导入数据库报错 Unknown collation: utf8mb...
  • __future__ 是什么

    2020-01-19 10:07:06
    __future__py2的概念,对应py2,py3就是future,这为了在py2的时候还能用到一些新版本的特性而成的包。 意思禁用py2的import特性改成用py3的import的特性,把下一个新版本的特性导入到当前版本,于是我们就...
  • 这个斜杠的意思就是拦截所有的静态资源,当然图片属于静态资源的,这样就相当于把图片给拦截了,因此,解决的方法就是在springmvc.xml文件里面假如以下这段话 mvc:default-servlet-handler/ 这句话的意思是使用最...
  • 亚马逊测评和facebooke项目的朋友应该都听说过CK号,那么什么是CK呢? Cookie号,也叫CK号,也老白号的一种,cookie号的好处就是可以直接导入cookie实现免密登陆。相对于普通的账号密码的登录方式要安全一些。 ...
  • [导入]静静的日子

    2008-03-27 13:47:00
    不过总觉的还缺些什么,总觉得自己该些事情。人变的懒散了,没有了追求的方向,有些迷茫。 静静的日子,静静的等待,等待好运的来临,等待春天的阳光。  想的太多,不知道怎么去。网站一直都搁浅着,也许...

空空如也

空空如也

1 2 3 4 5
收藏数 97
精华内容 38
关键字:

做导入是什么意思