MicroCity笔记MicroCity笔记
笔记
  • Microcity Desktop 文档
  • Microcity Web 文档
  • 其它

    • 仿真框架(港口)说明文档
    • 模型/库资源
  • GitHub

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
    • MicroCity Web 在线环境
  • Gitee

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
  • zhhuu.top (自建修改)

    • MicroCity Web (fork) 仓库
    • MicroCity Web (fork) 在线环境
  • 简体中文
  • English
笔记
  • Microcity Desktop 文档
  • Microcity Web 文档
  • 其它

    • 仿真框架(港口)说明文档
    • 模型/库资源
  • GitHub

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
    • MicroCity Web 在线环境
  • Gitee

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
  • zhhuu.top (自建修改)

    • MicroCity Web (fork) 仓库
    • MicroCity Web (fork) 在线环境
  • 简体中文
  • English
  • 目录
  • 通用知识

    • Lua语言快速上手
    • MicroCity的版本
    • 仿真时间推进
    • 面向对象编程
    • 有关工具
  • MicroCity

    • 结果可视化
    • 操作网络
    • 模型求解
  • MicroCityWeb

    • 用户界面简介
    • 3D 场景
    • 3D 对象
    • 离散事件仿真和程序控制
    • 混合整数规划
    • 调试相关
    • 图表绘制功能
  • 思路

    • 自动化仓库仿真思路
    • 通用绘图代码
    • 港口AGV服务流程三维仿真思路
  • Gallery

    • 绘制一个时钟
    • 构建电梯仿真模型
    • 指数拓展的二分搜索
    • 计算复杂度分析

3D 场景

本节将介绍 MicroCity Web 中的三维场景及其设置。

MicroCityWeb三维场景坐标系

MicroCity Web中的三维场景坐标系符合右手坐标系,各个坐标轴的正方向具体见下图。

::: center MicroCityWeb中的坐标系 MicroCity Web中的坐标系 :::

手动绘制上图坐标轴的代码

scene.setenv({grid="plane"})

-- x
scene.addobj("polyline", {vertices = {0,0,0, 10,0,0}, color = "blue"})
scene.addobj("points", {vertices = {10,0,0}, color = "blue", size = 5})
local labelx = scene.addobj("label",{text="x"})
labelx:setpos(10,1,0)
-- y
scene.addobj("polyline", {vertices = {0,0,0, 0,10,0}, color = "green"})
scene.addobj("points", {vertices = {0,10,0}, color = "green", size = 5})
local labelx = scene.addobj("label",{text="y"})
labelx:setpos(0,11,0)
-- z
scene.addobj("polyline", {vertices = {0,0,0, 0,0,10}, color = "red"})
scene.addobj("points", {vertices = {0,0,10}, color = "red", size = 5})
local labelx = scene.addobj("label",{text="z"})
labelx:setpos(0,1,10)

scene.render()

设置场景

设置场景需要用到 setenv 函数,具体用法如下

local s = scene.setenv({grid="plane|sphere|none", bgcolor="rgb(255, 255, 255)", rotspeed=1, transpeed=1, camtype="ortho|persp", clear=true})

可以简单地表示为如下形式

local s = scene.setenv({key1 = value1, key2 = value2, ...})

其中变量 s 存放返回的环境对象。下面将详细介绍函数的可选参数。

场景可选参数

参数列表

  • grid:场景的背景网格
  • bgcolor:场景背景颜色
  • camtype:摄像机视角
  • clear:是否清除场景
  • rotspeed & transpeed*:鼠标操作速度调整

grid:场景的背景网格

可选值

值含义
"none"默认值,无网格
"plane"平地网格
"sphere"球形网格

bgcolor:场景背景颜色

可选值类型

值类型示例
内置颜色"black", "white", "gray" 等
十六进制颜色"#ffffff", "#fff", "#000000", "#000"等
RGB表示的颜色"rgb(255, 255, 255)", "rgb(0, 0, 0)" 等

实例

scene.setenv({bgcolor='gray'}) --设置背景颜色为内置的gray
scene.setenv({bgcolor='#eee'}) --设置背景颜色为#eee
scene.setenv({bgcolor='rgb(255, 255, 255)'}) --设置背景颜色为白色

camtype:摄像机视角

可选值

值含义
"ortho"正视。相当于向x和y构成的平面投影,用户视角在二维空间中。
"persp"透视(默认值)。用户视角在三维空间中。

clear:是否清除场景

值设置为 true 时,清除场景

setenv 函数默认不清除原来的场景,除非手动设置参数 clear 的值为 true

rotspeed & transpeed

值含义
rotspeed设置鼠标的旋转三维对象的速度
transpeed设置鼠标平移三位对象的速度

提示

这两个参数通常不需要特别设置,使用默认值即可。

其他

有关高频率设置场景

2023/03/21:目前发现过高频次设置场景会导致内存占用过高,进而导致浏览器崩溃的问题。因此建议尽量不要循环调用 scene.setenv() 函数。

如果必须这么做,请确保调用频率相对较低,这样允许浏览器有一定的时间进行GC(垃圾清理),否则可能导致浏览器崩溃。

Last Updated:
Contributors: huuhghhgyg
Prev
用户界面简介
Next
3D 对象