JOSN WEB TOKEN

定义

JSON Web Token(JWT)是一种开放标准 RFC7519
它定义了一种紧凑的、自包含的方式,将信息作为JSON对象在各方之间安全地传输。
由于使用了数字签名,该信息是可以验证和信任的。
JWT可以使用密码(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。
总之,JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

结构

在其紧凑的形式中,JWT 由三个部分组成,由点(.)分隔,分别是:

  • Header 头部
  • Payload 载荷
  • Signature 签名

因此,JWT通常如下所示。

1
xxxxx.yyyyy.zzzzz

头部 (header)

头通常由两部分组成:令牌的类型(JWT)和正在使用的签名算法(如HMAC SHA256或RSA)。

1
2
3
4
{
"alg": "HS256",
"typ": "JWT"
}

将JSON转为base64url编码,以形成JWT的第一部分

载荷(payload)

载荷包含声明。声明是关于实体(通常是用户)和附加数据的语句。
声明有三种类型:注册声明、公开声明和私有声明

注册声明
这是一组预定义的声明,这些声明是建议但不必需的
该声明提供一组有用的、可交换操作的声明

  • iss:(Issuer) 该JWT的签发者
  • sub:(Subject) 该JWT所面向的用户
  • aud: (Audience)接收该JWT的一方
  • exp(expires): 什么时候过期,这里是一个Unix时间戳
  • nbf (Not Before) 该JWT到什么时间有效
  • iat(issued at): 在什么时候签发的
  • jti(JWT ID):该JWT唯一标识

公开声明
这些可以由使用JWT的人员随意定义。但是为了避免冲突,应该是在 IANA JSON Web Token Registry中定义的
或者将它们定义为包含防冲突命名空间的URI。

私有声明
自定义声明,用来在各方间共享信息,区别于注册声明和公开声明

这是载荷的一个实例

1
2
3
4
5
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

将JSON转为base64url编码,以形成JWT的第二部分

签名 (Signature)

签名部分,包含 编码过的头部、编码过的载荷、密码、头部中指定的算法,并对这些此进行签名计算。

例如,如果要使用hmac sha256算法,将按以下方式创建签名:

1
2
3
4
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

签名用于验证消息是否在过程中发生了更改,对于使用私钥签名的令牌,它还可以验证JWT的发送者是它所说的人。

jWT如何工作

在身份验证中,当用户使用其凭据成功登录时,将返回JWT。因为令牌是凭证,所以必须非常小心地防止安全问题。一般来说,您不应该将令牌保留超过所需的时间。

每当用户想要访问受保护的路由或资源时,用户代理应该使用承载模式发送JWT,通常是在授权头中。标题的内容应如下所示:

1
Authorization: Bearer <token>

在某些情况下,这可以是无状态授权机制。服务器的受保护路由将检查授权头中是否存在有效的JWT,如果存在,则允许用户访问受保护的资源。如果JWT包含必要的数据,那么查询数据库进行某些操作的需求可能会减少,尽管情况并非总是如此。

如果token设置在Authorization,Cross-Origin Resource Sharing (CORS) 将不再是问题,因为这不适用cookie

如何获取和使用JWT来访问API或资源:

  1. 应用程序或客户端向授权服务器请求授权。这是通过一个不同的授权流执行的。例如,典型的 OpenID Connect兼容Web应用程序将使用authorization code flow通过 /oauth/authorize端点。
  2. 授予授权后,授权服务器将向应用程序返回访问令牌。
  3. 应用程序使用访问令牌访问受保护的资源(如API)。

ps: 对于签名的令牌,令牌中包含的所有信息都将向用户或其他方公开,即无法更改它。这意味着不应该将秘密信息放在令牌中。

jwt优势

  1. 传输数据量小
  2. 安全方面,SWT只能使用HMAC算法由共享机密对称签名。但是,JWT和SAML令牌可以使用X.509证书形式的公钥/私钥对进行签名。与简单的JSON签名相比,用XML数字签名来签名XML而不引入模糊的安全漏洞是非常困难的。
  3. JSON解析器在大多数编程语言中很常见,因为它们直接映射到对象。相反,XML没有一个自然的文档到对象的映射。这使得使用JWT比使用SAML断言更容易。

适用场景

  • 用于向Web应用传递一些非敏感信息。例如完成加好友、下订单的操作等等。
  • 用于设计用户认证和授权系统。
  • 实现Web应用的单点登录。

文件权限

1
-rw-r--r--

第一位表示文件类型(-文件 d目录 l软连接文件)
后面九位,三位一组,分别控制所有者(u)、所属组(g)、其他人(o)对该文件的权限
r读 w写 x执行

ls [options] [file|dir]

-a 显示所有文件,包括隐藏文件
-l 显示详细信息
-d 查看目录属性
-i 显示inode
-h h表示字节大小显示为人可读的形式,即human缩写,很多命令都可以用h修饰
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 “.” (目前目录) 及 “..” (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 “*”, 目录则加 “/“
-R 若目录下有文件,则以下之文件亦皆依序列出

mkdir -p [dirname]

创建目录
p 递归建立,确保目录名称存在,不存在的就建一个

cd [dirname]

切换目录
cd ~ 回到当前用户家目录
cd 直接回车同上
cd .. 上级目录
cd -进入上次所在目录

rmdir [dirname]

删除空目录
-p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除

rm [filename] #删除目录或文件

-i 删除前逐一询问确认
-r 删除目录
-f 强制删除

cp [options] source dest

复制 [目标目录]
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答”y”时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。

mv [options] source dest

改名和剪切
-i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
-f: 在mv操作要覆盖某已有的目标文件时不给任何指示;

ln [options][source][dest]

为某一个文件在另外一个位置建立一个同步的链接
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
-S “-S<字尾备份字符串> “或 “–suffix=<字尾备份字符串>”
-V “-V<备份方式>”或”–version-control=<备份方式>”
–help 显示帮助信息
–version 显示版本信息

locate [-d ][–help][–version][范本样式…]

查找符合条件的文档,他会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录
-d或–database= 配置locate指令使用的数据库。locate指令预设的数据库位于/var/lib/slocate目录里,文档名为slocate.db,您可使用 这个参数另行指定。
–help  在线帮助。
–version  显示版本信息。

whereis [命令名]

命令的搜索命令
搜索命令所在路径及帮助文档所在位置
该指令只能用于查找二进制文件、源代码文件和man手册页
-b  只查找二进制文件
-B<目录>  只在设置的目录下查找二进制文件
-f  不显示文件名前的路径名称
-m  只查找说明文件
-M<目录>  只在设置的目录下查找说明文件
-s  只查找原始代码文件
-S<目录>  只在设置的目录下查找原始代码文件
-u  查找不包含指定类型的文件

which [文件名]

命令的搜索命令
which指令会在环境变量$PATH设置的目录里查找符合条件的文件
-n<文件名长度>  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名
-p<文件名长度>  与-n参数相同,但此处的<文件名长度>包括了文件的路径
-w  指定输出时栏位的宽度
-V  显示版本信息

find [搜索范围] [搜索条件]

文件搜索命令

搜索的是文件名,必须一模一样,也支持通配符搜索
使用通配符的时候,需要用双引号引住整个字符串
*匹配任意字符
?匹配任意一个字符
[]匹配任意一个中括号内的字符
find /root -iname install.log #不区分大小写
find /root -user root #按照所有者搜查
find /root -nouser #查找没有所有者的文件
find /var/log/ -mtime +10 #查找10天前修改的文件
-10 10天内修改的文件
10 10天前当天修改的文件
+10 10天前修改的文件
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容
find . -size 25k #查找文件大小是25k的文件
-25k 小于25k的文件
25k 等于25k的文件
25k 大于25k的文件
k是小写,M是大写
find -inum 265797 #查找i节点是265797的文件
find /etc -size +20k -a -size -50k
查找大于20k小于50k的文件
-a and 逻辑与,两个条件都满足
-o or 逻辑或,两个条件满足一个
find /etc -size +20k -a -size -50k -exec ls -lh {} \
-exec 第一条命令产生的结果,交给第二条命令来处理
本条命令是对找到的文件列出详细信息
{} \; 是标准格式要求

grep [选项] 字符串 文件名

搜索字符串命令
在文件当中匹配符合条件的字符串,包含式匹配
-i 忽略大小写
-v 排除指定字符串
grep -v “shuan” aaa.txt
可以使用正则表达式

cat

cat 命令用于连接文件并打印到标准输出设备上

vim 手册

vim在normal模式下简单命令

  • iInsert 模式,按 ESC 回到 Normal 模式.
  • x 删当前光标所在的一个字符。
  • :wq 存盘 + 退出 (:w 存盘, :q 退出) (:w 后可以跟文件名)
  • dd 删除当前行,并把删除的行存到剪贴板里
  • p 粘贴剪贴板
  • hjkl 你也可以使用光标键 (←↓↑→). 注: j 就像下箭头
  • help <command> 显示相关命令的帮助。你也可以就输入 :help 而不跟命令

插入

  • a 在光标后插入
  • o 在当前行后插入一个新行
  • O 在当前行前插入一个新行
  • `cw → 替换从光标所在位置后到一个单词结尾的字符

移动光标

  • 0数字零,到行头
  • ^ 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
  • $ 到本行行尾
  • g_ 到本行最后一个不是blank字符的位置。
  • /pattern 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)

拷贝/粘贴

  • P 粘贴 p/P都可以,p是表示在当前位置之后,P表示在当前位置之前
  • yy 拷贝当前行当行于 ddP

撤销/撤回

  • u 撤销
  • <C-r> 撤回

打开/保存/退出/改变文件

  • e <path/to/file> 打开一个文件
  • w 存盘
  • saveas <path/to/file>另存为 <path/to/file>
  • xZZ:wq 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
  • :q!退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
  • :bn:bp 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)

其他

  • . (小数点) 可以重复上一次的命令
  • N<command> 重复某个命令N次
  • NG 到第 N 行
  • gg到第一行
  • G 到最后一行
  • w 到下一个单词的开头
  • e 到下一个单词的结尾
  • % 匹配括号移动,包括 (, {, [.
  • *# 匹配光标当前所在的单词,移动光标到(*是下一个,#是上一个)
  • 0 到行头
  • ^ 到本行的第一个非blank字符
  • $ 到行尾
  • g_ 到本行最后一个不是blank字符的位置。
  • fa 到下一个为a的字符处,你也可以fs到下一个为s的字符。
  • t, 到逗号前的第一个字符。逗号可以变成其它字符。
  • 3fa 在当前行查找第三个出现的a。
  • FTft 一样,只不过是相反方向
  • dt" 删除所有的内容,直到遇到双引号—— “

git 简介

git简介

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

git配置

用户名和电子邮件配置

通常:

1
2
3
4
$ git config --global user.name "yourname"    
$ git config --global user.email "youremail"

$ ssh-keygen -t rsa -C "youremail@example.com"

–system配置全系统文件,文件位置/etc/gitconfig, 包含系统上每一个用户及他们仓库的通用配置
–global配置当前用户全局文件,文件位置 ~/.gitconfig 或 ~/.config/git/config ,所有的项目都会默认使用这里配置的用户信息
去掉–global,文件位置:.git/config 只在当前项目配置

文本编辑器配置

1
$ git config --global core.editor emacs

差异分析工具配置

1
git config --global merge.tool vimdiff

git支持 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff等工具

查看配置信息

查看全部配置

1
$ git config --list

查看单个配置(用户名)

1
$ git config <key>

git 工作区、暂存区和版本库

  • 工作区:本地环境
  • 暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

补图

git 命令

基本,不解释

1
2
3
4
5
6
7
git init
git clone <repo><directory>
git status
git diff
git add <file>
git commit -m "xxx"
git log

基本命令加选项

1
2
3
4
5
6
7
git status --short
git status -s // 简短的结果输出
git diff // 尚未缓存的改动
git diff --cached // 查看已缓存的改动
git diff HEAD 查看已缓存的与未缓存的所有改动
git diff --stat 显示摘要而非整个diff
git commit -a // git add 并且 git commit

git rm

从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交

1
2
3
4
git rm <file>
git rm -f <file> // 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm --cached <file> // 如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可
git rm –r * // 递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件

git mv

git mv 命令用于移动或重命名一个文件、目录、软连接

1
git mv <filename>  <filename>

git reset

1
git reset HEAD  // 取消已缓存的内容

git log

选项        |说明

————- | ————-
-p | 按补丁格式显示每个更新之间的差异。
–stat | 显示每次更新的文件修改统计信息。
–shortstat | 只显示 –stat 中最后的行数修改添加移除统计。
–name-only | 仅在提交信息后显示已修改的文件清单。
–name-status | 显示新增、修改、删除的文件清单。
–abbrev-commit | 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
–relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”)。
–graph | 显示 ASCII 图形表示的分支合并历史。
–pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
-(n) | 仅显示最近的 n 条提交
–since, –after | 仅显示指定时间之后的提交。
–until, –before | 仅显示指定时间之前的提交。
–author | 仅显示指定作者相关的提交。
–committer | 仅显示指定提交者相关的提交。
–grep | 仅显示含指定关键字的提交
-S | 仅显示添加或移除了某个关键字的提交

1
2
3
4
git log -p -2 // 比较最近两次提交的差异
git log --stat // 每次提交的简略的统计信息
git log --pretty [online,short,full,fuller] // 指定使用不同于默认格式的方式展示提交历史
git log --pretty=format:"%h - %an, %ar : %s" // 定制要显示的记录格式

git remote

1
git merge --no-ff -m "merge with no-ff" dev

禁用fast-forward合并模式

git stash

1
2
3
4
5
git stash // 储藏当前工作现场
git stash list // 查看
git stash apply // 只恢复储藏的内容
git stash drop // 删除stash内容
git stash pop // 恢复储藏的内容,并删除储藏

git 撤销

1
2
3
4
5
 git commit --amend // 重新提交
git reset HEAD <file> // 取消指定文件暂存
git checkout -- <file> // 撤销指定文件修改
git reset --hard commit_id // HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令。
git reflog // 查看命令历史

HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本HEAD~100

git 远程仓库

1
2
3
4
5
6
7
8
9
10
git remote add <shortname> <url>  // 添加远程仓库
git fetch [remote-name] // 同步远程仓库信息
git pull [remote-name] // 拉取远程仓库信息
git push [remote-name] [branch-name] // 把信息推送到远程仓库
git remote show [remote-name] // 查看远程仓库信息
git remote rename [old-name] [new-name] // 远程仓库重命名
git remote rm // 移除一个远程仓库
```

# git tag

git tag // 查看所有tag
git tag -l // 查看n相关标签
git tag -a // 创建附注标签
git tag // 创建轻量标签
git tag -a // 给历史提交打标签
git tag -d // 删除标签
git push origin :refs/tags/ // 删除远程标签
git push origin [tagname] // 推送某次tag到远程
git push origin –tags // 推送所有标签
git checkout -b [branchname] [tagname] // 在特定的标签上创建一个新分支

1
2
3

## git 别名
常用

git config –global alias.co checkout
git config –global alias.br branch
git config –global alias.ci commit
git config –global alias.st status

1
2

其他

git config –global alias.unstage ‘reset HEAD –’ // 取消暂存文件
git config –global alias.last ‘log -1 HEAD’ // 查看最后一次提交

1
2

## git branch

git branch // 创建分支
git branch // 查看分支
git branch -v // 查看每一个分支的最后一次提交
git branch –merged // 查看已合并分支
git branch –no-merged // 查看未合并分支
git branch -d // 删除分支
git branch -vv // 将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后
git fetch –all; git branch -vv // 抓取所有的远程仓库, 统计最新的领先与落后数字

1
2

## git 远程分支

git push origin –delete 删除远程分支

1
2
3
4
5
6
7

## git 变基
使用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,

与合并的区别:
变基是将一系列提交按照原有次序依次应用到另一分支上,
合并是把最终结果合在一起。

git rebase –onto master server client

1
2
3
4
5
6
7
8
9
10
11
12
取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重放一遍

**不要对在你的仓库外有副本的分支执行变基**


## git apply & git am

使用 apply 命令应用补丁
```git apply --check```检查补丁是否可以顺利应用

## rerere
Rerere 是“重用已记录的冲突解决方案(reuse recorded resolution)”的意思——它是一种简化冲突解决的方法。

git config –global rerere.enabled true
git rerere
`

electron 调用 dll 文件

electron 调用 dll 文件

方案

  1. 使用node-ffi
  2. 使用C++编写node addon,通过LoadLibrary调用dll
  3. 把dll的操作封装成一个c# exe,然后通过node原生child_process模块去调用子程序exe。node和子程序直接通信

使用node-ffi

什么是node-ffi

node-ffi是使用纯JavaScript加载和调用动态库的node addon,可以不写任何C++代码的情况下调用动态链接库的API 接口。
它本质上还是一个编译后的Node addon,node_modules/ffi/build/Release/ffi_bindings.node, ffi_bindings.node就是一个addon,ffi充当了nodejs和动态链接库之间的桥梁。

*动态链接库后缀*  
  'linux':  '.so'  
  'linux2': '.so'  
  'sunos':  '.so'  
  'solaris':'.so'  
  'freebsd':'.so'  
  'openbsd':'.so'  
  'darwin': '.dylib'  
  'mac':    '.dylib'  
  'win32':  '.dll'  

如何调用用node-ffi

import ffi from 'ffi'
import path from 'path'

const libPath = path.join(__dirname, './add.dll')
const lib = ffi.Library(libPath, {
  'add': ['int', ['int', 'int']],
})

lib.add(3,1) // 4

调用前的工作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
   npm install ffi
```

安装过程中会调用 ```node-gyp rebuild ``` 编译node addon
可能遇到的问题

* node-gyp 没有安装
* 如果是windows
(1) python 没有安装 需要安装python2.7
(2) python 环境变量没有配置或者配置不对
(3)NET Framework 4.5.1 没有
(4) Visual C++编译工具 没有和node-gyp配置关联



**electron中使用ffi**

electron支持node原生模块,由于和官方的node使用不同的 V8 引擎,如果你想编译原生模块,则需要手动设置electron的headers的位置

**electron安装node原生模块**
如下三种方法教你安装原生模块

1. 通过 npm 安装
只要设置一些系统环境变量,你就可以通过 npm 直接安装原生模块。
为 Electron 安装所有依赖项的一个例子:

Electron 的版本。

export npm_config_target=1.2.3

Electron 的系统架构, 值为 ia32 或者 x64。

export npm_config_arch=x64
export npm_config_target_arch=x64

下载 Electron 的 headers。

export npm_config_disturl=https://atom.io/download/electron

告诉 node-pre-gyp 是为 Electron 构建。

export npm_config_runtime=electron

告诉 node-pre-gyp 从源代码构建模块。

export npm_config_build_from_source=true

下载所有依赖,并缓存到 ~/.electron-gyp。

HOME=~/.electron-gyp npm install

1
2
3
4
5

2. 为 Electron 安装并重新编译模块
你可以也选择安装其他 Node 项目模块一样,然后用 electron-rebuild 包重建 Electron 模块 。 它可以识别当前 Electron 版本,帮你自动完成了下载 headers、编译原生模块等步骤。

一个下载 electron-rebuild 并重新编译的例子:

npm install –save-dev electron-rebuild

每次运行”npm install”时,也运行这条命令

./node_modules/.bin/electron-rebuild

在windows下如果上述命令遇到了问题,尝试这个:

.\node_modules.bin\electron-rebuild.cmd
为 Electron 手动编译

1
2

3. 如果你是一个原生模块的开发人员,想在 Electron 中进行测试, 你可能要手动编译 Electron 模块。 你可以 使用 node-gyp 直接编译:

cd /path-to-module/
HOME=~/.electron-gyp node-gyp rebuild –target=1.2.3 –arch=x64 –dist-url=https://atom.io/download/electron

1
2
3
4
5
6

```HOME=~/.electron-gyp``` 设置去哪找开发时的 headers。 ```--target=1.2.3``` 设置了 Electron 的版本。``` --dist-url=...```设置了 Electron 的 headers 的下载地址。 ```--arch=x64``` 设置了该模块为适配64位操作系统而编译。



### node-ffi 使用详解

import ffi from 'ffi'
import path from 'path'

const libPath = path.join(__dirname, './add.dll')
const lib = ffi.Library(libPath, {
  'add': ['int', ['int', 'int']],
})

lib.add(3,1) // 4
1
2
3
4
5
6
7
8


ffi.Library方法,第一个参数传入dll路径,第二参数JSON对象配置相关接口。
key对应dll头文件中输出的接口,例如add();
value array配置参数类型,array[0]注册接口函数返回值类型,array[1]注册接口函数传入形参类型。

1、基础参数类型bool, char, short, int, long等。
2、指针类型,需要引入ref模块,举例如下:

var ref = require(‘ref’);
var intPointer = ref.refType(‘char’);
var doublePointer = ref.refType(‘short’);
var charPointer = ref.refType(‘int’);
var stringPointer = ref.refType(‘long’);
var boolPointer = ref.refType(‘bool’);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

### 常见错误

**Dynamic Linking Error: Win32 error 126**

这个错误有三种原因

1. 通常是传入的DLL路径错误,找不到Dll文件,推荐使用绝对路径。
2. 如果是在x64的node/electron下引用32位的DLL,也会报这个错,反之亦然。要确保DLL要求的CPU架构和你的运行环境相同。
3. DLL还有引用其他DLL文件,但是找不到引用的DLL文件,可能是VC依赖库或者多个DLL之间存在依赖关系。


**Dynamic Linking Error: Win32 error 127**
DLL中没有找到对应名称的函数,需要检查头文件定义的函数名是否与DLL调用时写的函数名是否相同。

### Path设置

如果你的DLL是多个而且存在相互调用问题,会出现Dynamic Linking Error: Win32 error 126错误3。
这是由于默认的进程Path是二进制文件所在目录,即node.exe/electron.exe目录而不是DLL所在目录,导致找不到DLL同目录下的其他引用。可以通过如下方法解决:

//方法一, 调用winapi SetDllDirectoryA设置目录
const ffi = require(‘ffi’)

const kernel32 = ffi.Library(“kernel32”, {
‘SetDllDirectoryA’: [“bool”, [“string”]]
})
kernel32.SetDllDirectoryA(“pathToAdd”)

//方法二(推荐),设置Path环境环境
process.env.PATH = ${process.env.PATH}${path.delimiter}${pathToAdd}

1
2
3
4
5
6
7
8
9
10
11
12

### 实际中遇到的坑

1. 在mac上,node-ffi会给不是。dylib后缀的文件自动加上 .dylib 的后缀。 导致报找不到文件的错。
2. 打包后在windows机器上跑,报错,node不是32位(系统是32位的)
3. electron相关的东西安装时下载卡卡卡


## 填坑历程
**关于坑3**

1. .npmrc 文件中配置下载源

ELECTRON_MIRROR=http://npm.taobao.org/mirrors/electron/

registry=https://registry.npm.taobao.org
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
1
2

2. electron-builder时 下载配置
"build": { "electronDownload": { "mirror": "http://npm.taobao.org/mirrors/electron/" } }, ```

关于坑1,2

  1. 手打编译node-ffi 文件匹配windows 32 位文件
    结果:报错,node不是32位(系统是32位的)
  2. 安装windows 32位虚拟机,在32位系统上打包
    (配置一系列的编译环境)
    结果: 编译的时候报一堆v8引擎的错,看不懂
  3. 网上找electron-ffi 的例子源码,去虚拟机上跑
    结果: 竟然神奇的跑通了!!!
  4. 对比两个项目的差异,发现electron 版本不同,例子上1.7.11
    ,工程项目2.0.11
  5. 对工程项目electron版本降级, success !!!

webstrom 快捷键

快捷键

Editing

^Space

基础打代码自动补全
对于路径补全,重复快捷键可选择上层路径

⌥⏎

显示意图动作快速修复

⌘P

查看调用方法的参数信息

^J

快速文档查找

⌘ + mouse over code

查看信息简介

⌘F1

在插入符号上显示错误或警告的描述

^J⏎,⌘N

生成代码……

⌥⌘T

添加包裹代码 (if..else, try..catch, for, etc.)

⌘J

插入当前语言模板

⌘/

取消/添加单行注释

⌘⇧/

取消/添加块级注释

⌥↑

选择连续增加的代码块

⌥↓

将当前选择减少到先前的状态

^⇧Q

上下文信息

⌥⌘L

格式化代码

⌥⌘I

自动缩进行

缩进选择行

⇧⇥

取消缩进选择行

⌘⇧V

从最近的缓冲区粘贴

⌘D

复制当前行或选定块

⌘⌫

在插入符号处删除行

⌥⇧↑

向上移动当前行

⌥⇧↓

向下移动当前行

⌃⇧J

合并行

⌘↩︎

分离行

⇧↩︎

创建新空白行

⌘⇧U

在插入符号或选定的块中切换单词的大小写

⌥⌘⇧]

选择直到代码块结束

⌥⇧⌘[

选择直到代码块开始

⌥⌦

删除到单词结束

⌥⌫

删除到单词开始

⌘+/⌘-

展开/折叠代码块

⇧⌘+

展开所有代码

⇧⌘-

折叠所有代码

⌘W

关闭当前tab

##Multiple carets and selections

⌥ + click

添加或删除插入符号

⌃⌘G

选择所有出现

⌃G

选择下一个出现的

⌃⇧G

取消下一个出现的

取消选择所有出现或插入符号

Search/Replace

###⌘F/⌘R
查找/ 替换

###⌘G/⇧⌘G
查找下一个/上一个

###⇧⌘F
在当前文件路径下查找

###⇧⌘R
在当前文件路径下替换

General

Double ⇧

全局查找

⇧⌘A

在action查找

⌘0…⌘9

打开相应的工具窗口

⇧⌘F12

切换最大化编辑器

⌥⇧F

添加到Favorites

⌥⇧I

使用当前配置文件检查当前文件

⌃§,⌃`

快速切换当前的scheme(切换主题、代码样式等)

⌘,

打开偏好设置

⌃⇥

在标签和工具窗口之间切换

⌥F7

查找使用

⌘F7

在文件内查找使用

⇧⌘F7

在文件内高亮使用

⌥⌘F7

显示用法

Refactoring

⌃T

重构这个

F5/F6

复制/移动

⌘⌦

安全删除

⇧F6

重命名

⌘F6

更改函数签名

⌥⌘N

内联变量

⌥⌘V

提取变量

⌥⌘C

提取常量

⌥⌘P

提取参数

VCS/Local History

⌃V

vCS快速弹出

⌘K

提交项目到VCS

⌘T

从VCS更新项目

⌥⇧C

查看最近改动

Running

⌃⌥R

选择配置并运行

⌃⌥D

选择配置开始调试

⌃R/⌃D

运行/调试

⌃⇧R,⌃⇧D

从编辑器运行上下文配置

⌃⌘R

再运行测试

⌥F11

运行Gulp/Grunt/npm任务

Debugging

F8/F7

跳过/ 跳入

⇧F7

智能挑入

⇧F8

跳出

⌥F9

运行到光标处

⌥F8

表达式 求知

⌥⌘R

重新开始

⌘F8

切换断点

⇧⌘F8

查看断点

Navigation

⌘B, ⌘click

查找并定位到declaratior

⌘O

查找并定位到class

⇧⌘O

查找并打开文件

⌥⌘O

查找并定位到symbol

⇧⌘]

到下一个编辑标签页

⇧⌘[

到上一个编辑标签页

F12

返回上一个工具窗口

跳转到编辑器(从工具窗口)

⌘L

打开行数跳转窗口

⌘E

弹出最近文件窗口

⌥⌘←

回退导航

⌥⌘→

向前导航

⌘⇧⌫

导航到上次编辑位置

⌥F1

在任何视图中选择当前文件或符号

⌥⌘B

转到实施

⌥Space, ⌘Y

打开快速定义查找

⌃⇧B

转到类型声明

⌘U

转到super方法/super类

⌃↑

转到上一个方法

###⌃↓
转到下一个方法

⌥⌘]

到代码块结尾

⌥⌘[

到代码块开头

⌃M

将插入符号移动到匹配的大括号

⌘F12

文件结构弹出窗口

⌃H

类型层次结构

⌃⌥H

调用层次结构

F2

下一个高亮错误

⇧F2

上一个高亮错误

F4, ⌘↓

跳转到源头

⌘↑

跳转到导航栏

F3

切换书签

⌥F3

用助记符切换书签

⌃0…⌃9

转到编号书签

⌘F3

显示书签

threejs 解读 geometry

BoxGeometry

概念

盒子几何模型,长、宽、高可不等

使用

1
BoxGeometry(width : Float, height : Float, depth : Float, widthSegments : Integer, heightSegments : Integer, depthSegments : Integer)

width - x轴上的宽度,默认为1
height - y轴上的高度,默认为1
depth - z轴上的深度,默认为1
widthSegments — 可选参数. 沿宽度面的分割面数量. 默认值为1
heightSegments — 可选参数. 沿高度面的分割面数量. 默认值为1
depthSegments — 可选参数. 沿深度面的分割面数量. 默认值为1

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

BoxBufferGeometry

##概念
BoxGeometry 部分的 BufferGeometry

使用

1
BoxBufferGeometry(width : Float, height : Float, depth : Float, widthSegments : Integer, heightSegments : Integer, depthSegments : Integer)

width - x轴上的宽度,默认为1
height - y轴上的高度,默认为1
depth - z轴上的深度,默认为1
widthSegments — 可选参数. 沿宽度面的分割面数量. 默认值为1
heightSegments — 可选参数. 沿高度面的分割面数量. 默认值为1
depthSegments — 可选参数. 沿深度面的分割面数量. 默认值为1

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

#CircleGeometry

##概念
CircleGeometry是一个简单的欧氏几何形。它是众多三角形面围绕一个中心点并延伸到给定的半径范围而组成。它是用一个开始角度和一个给定的中心角度逆时针建立。它可以用来创建规则的多边形模型,其中分割面的数量决定的面的数量。

##使用

1
CircleGeometry(radius : Float, segments : Integer, thetaStart : Float, thetaLength : Float)

radius — 圆的半径, 默认为1.
segments — 分割面数量 (三角形), 最小值为3, 默认值 = 8.
thetaStart — 第一个分割面的开始角度, 默认值为0 (3点钟方向).
thetaLength — 圆形扇形的圆心角通常称为 θ。默认为2 * Pi

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

#CircleBufferGeometry

##概念
CircleGeometry 部分的 BufferGeometry

##使用

1
CircleBufferGeometry(radius : Float, segments : Integer, thetaStart : Float, thetaLength : Float)

radius — 圆的半径, 默认为1.
segments — 分割面数量 (三角形), 最小值为3, 默认值 = 8.
thetaStart — 第一个分割面的开始角度, 默认值为0 (3点钟方向).
thetaLength — 圆形扇形的圆心角通常称为 θ。默认为2 * Pi

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ConeGeometry

概念

用于生成锥形几何的类

##使用

1
ConeGeometry(radius : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)

adius — 锥底半径. 默认值为20
height — 锥体高度. 默认值为100
radiusSegments — 围绕圆锥周长的分割面数量. 默认值为8
heightSegments — 沿圆锥高度的分割面数量. 默认值为1
openEnded — 指示锥底是否打开, 默认值为false
thetaStart — 第一个分割面的开始角度, 默认值 = 0 (3点钟方向)
thetaLength — 圆形扇形的圆心角通常称为θ。默认为2 * Pi.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ConeBufferGeometry

概念

ConeGeometry 部分的 BufferGeometry

##使用

1
ConeGeometry(radius : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)

adius — 锥底半径. 默认值为20
height — 锥体高度. 默认值为100
radiusSegments — 围绕圆锥周长的分割面数量. 默认值为8
heightSegments — 沿圆锥高度的分割面数量. 默认值为1
openEnded — 指示锥底是否打开, 默认值为false
thetaStart — 第一个分割面的开始角度, 默认值 = 0 (3点钟方向)
thetaLength — 圆形扇形的圆心角通常称为θ。默认为2 * Pi.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

CylinderGeometry

概念

用于生成圆柱几何的类

使用

1
CylinderGeometry(radiusTop : Float, radiusBottom : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)

radiusTop — 圆柱体顶端半径. 默认值为20.
radiusBottom — 圆柱体底端半径. 默认值为20.
height — 圆柱体高度. 默认值为100.
radiusSegments — 围绕圆柱体周长的分割面数量. 默认值为8.
heightSegments — 沿圆柱体高度的分割面数量. 默认值为1.
openEnded — 指示圆柱体两端是否打开. 默认值为false
thetaStart — 第一个分割面的开始角度, 默认值 = 0 (3点钟方向).
thetaLength — 圆形扇形的圆心角通常称为θ。默认为2 * Pi

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

CylinderBufferGeometry

概念

CylinderGeometry 部分的 BufferGeometry

使用

1
CylinderGeometry(radiusTop : Float, radiusBottom : Float, height : Float, radialSegments : Integer, heightSegments : Integer, openEnded : Boolean, thetaStart : Float, thetaLength : Float)

radiusTop — 圆柱体顶端半径. 默认值为20.
radiusBottom — 圆柱体底端半径. 默认值为20.
height — 圆柱体高度. 默认值为100.
radiusSegments — 围绕圆柱体周长的分割面数量. 默认值为8.
heightSegments — 沿圆柱体高度的分割面数量. 默认值为1.
openEnded — 指示圆柱体两端是否打开. 默认值为false
thetaStart — 第一个分割面的开始角度, 默认值 = 0 (3点钟方向).
thetaLength — 圆形扇形的圆心角通常称为θ。默认为2 * Pi

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

DodecahedronGeometry

概念

用于生成十二面体几何的类

使用

1
DodecahedronGeometry(radius : Float, detail : Integer)

radius — 十二面体的半径. 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个十二面体

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

DodecahedBufferronGeometry

概念

DodecahedonGeometry 部分的 BufferGeometry

使用

1
DodecahedronGeometry(radius : Float, detail : Integer)

radius — 十二面体的半径. 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个十二面体

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ExtrudeGeometry

概念

这可以用作辅助对象来查看Geometry对象的边缘

使用

1
EdgesGeometry( geometry : Geometry, thresholdAngle : Integer )

geometry - 任何几何对象
thresholdAngle - 仅当相邻面的面法线之间的角度(以度为单位)超过此值时,才会渲染边。 默认为1度

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ExtrudeGeometry

概念

从路径形状创建拉伸几何体

使用

1
ExtrudeGeometry(shapes : Array, options : Object)

shapes — 形状或形状数组
options — 包括下面这些参数的对象.

  • curveSegments — int. 曲线上点的个数
  • steps — int. 用于细分拉伸的样条段数量
  • depth — int. 拉伸形状的深度
  • bevelEnabled — bool. 打开斜面
  • bevelThickness — float. 在原来的形状里面弄多深的斜面
  • bevelSize — float. 斜面离形状轮廓的距离
  • bevelSegments — int. 斜面层的数量
  • extrudePath — THREE.CurvePath. 沿3D样条路径拉伸形状
  • UVGenerator — Object. 提供UV生成器各功能的对象

这个对象将一个2D图形拉伸为一个3D几何体.
在使用此几何体创建网格时,如果您希望将单独的材质用于其面和其拉伸边,则可以使用一组材质。 第一种材料将涂在形状面; 第二种材料将应用于侧面

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ExtrudeBufferGeometry

概念

从路径形状创建拉伸几何体

使用

1
ExtrudeBufferGeometry(shapes : Array, options : Object)

shapes — 形状或形状数组
options — 包括下面这些参数的对象.

  • curveSegments — int. 曲线上点的个数
  • steps — int. 用于细分拉伸的样条段数量
  • depth — int. 拉伸形状的深度
  • bevelEnabled — bool. 打开斜面
  • bevelThickness — float. 在原来的形状里面弄多深的斜面
  • bevelSize — float. 斜面离形状轮廓的距离
  • bevelSegments — int. 斜面层的数量
  • extrudePath — THREE.CurvePath. 沿3D样条路径拉伸形状
  • UVGenerator — Object. 提供UV生成器各功能的对象

这个对象将一个2D图形拉伸为一个3D几何体.
在使用此几何体创建网格时,如果您希望将单独的材质用于其面和其拉伸边,则可以使用一组材质。 第一种材料将涂在形状面; 第二种材料将应用于侧面

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

IcosahedronGeometry

概念

用来创建二十面体几何模型的类

使用

1
IcosahedronGeometry(radius : Float, detail : Integer)

radius — 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个二十面体. 当值大于1时它就成了一个球体.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

IcosahedronBufferGeometry

概念

用来创建二十面体几何模型的类

使用

1
IcosahedronBufferGeometry(radius : Float, detail : Integer)

radius — 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个二十面体. 当值大于1时它就成了一个球体.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

LatheGeometry

概念

创建具有轴对称性的网格,如花瓶。 车床绕Y轴旋转。

使用

1
LatheGeometry(points : Array, segments : Integer, phiStart : Float, phiLength : Float)

points — Vector2s数组. X轴上每个点都必须大于0.
segments — 生成圆周段的数目. 默认值为12.
phiStart — 起始角度的弧度值. 默认值为0.
phiLength — 弧度范围在0到2PI间的,2PI是闭合车床, 小于2PI的是部分。默认值为2PI.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

LatheBufferGeometry

概念

创建具有轴对称性的网格,如花瓶。 车床绕Y轴旋转。

使用

1
LatheBufferGeometry(points : Array, segments : Integer, phiStart : Float, phiLength : Float)

points — Vector2s数组. X轴上每个点都必须大于0.
segments — 生成圆周段的数目. 默认值为12.
phiStart — 起始角度的弧度值. 默认值为0.
phiLength — 弧度范围在0到2PI间的,2PI是闭合车床, 小于2PI的是部分。默认值为2PI.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

OctahedBufferGeometry

概念

用来创建八面体几何模型的类

使用

1
OctahedGeometry(radius : Float, detail : Integer)

radius — 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个八面体.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

OctahedronBufferGeometry

概念

用来创建八面体几何模型的类

使用

1
OctahedBufferGeometry(radius : Float, detail : Integer)

radius — 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个八面体.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ParametricGeometry

概念

生成代表参数化曲面的几何模型

使用

1
ParametricGeometry(func : Function, slices : Integer, stacks : Integer)

func — 一个函数,接收介于0到1之间的 u 和 v 值,并返回一个 Vector3
slices — 用于参数化函数的切片数量
stacks — 用于参数化函数的堆栈数量

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ParametricBufferGeometry

概念

生成代表参数化曲面的几何模型

使用

1
ParametricBufferGeometry(func : Function, slices : Integer, stacks : Integer)

func — 一个函数,接收介于0到1之间的 u 和 v 值,并返回一个 Vector3
slices — 用于参数化函数的切片数量
stacks — 用于参数化函数的堆栈数量

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

PlaneGeometry

概念

用来生成平面几何模型的类

使用

1
PlaneGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer)

width — 沿X轴宽度, 默认为1.
height — 沿Y轴高度,默认为1.
widthSegments — 可选参数,x方向的分段数,缺省为1
heightSegments — 可选参数,y方向的分段数,缺省为1

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

PlaneBufferGeometry

概念

用来生成平面几何模型的类

使用

1
PlaneBufferGeometry(width : Float, height : Float, widthSegments : Integer, heightSegments : Integer)

width — 沿X轴宽度, 默认为1.
height — 沿Y轴高度,默认为1.
widthSegments — 可选参数,x方向的分段数,缺省为1
heightSegments — 可选参数,y方向的分段数,缺省为1

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

PolyhedronGeometry

概念

多面体是由多个平面形成的三维几何体,它将取一个顶点数组并将它们投射到一个球体上,然后将它们划分成所需的期望细节层面

使用

1
PolyhedronGeometry(vertices : Array, indices : Array, radius : Float, detail : Integer)

vertices — Array 以 [1,1,1, -1,-1,-1, … ] 这种形式出现的点的数组
faces — Array 以 [0,1,2, 2,3,0, … ] 这种形式出现的构成各个面的指数数组
radius — Float - 最终形状的半径
detail — Integer - 把几何模型细分成多少层. 层越多形状越光滑.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

PolyhedronBufferGeometry

概念

多面体是由多个平面形成的三维几何体,它将取一个顶点数组并将它们投射到一个球体上,然后将它们划分成所需的期望细节层面

使用

1
PolyhedronBufferGeometry(vertices : Array, indices : Array, radius : Float, detail : Integer)

vertices — Array 以 [1,1,1, -1,-1,-1, … ] 这种形式出现的点的数组
faces — Array 以 [0,1,2, 2,3,0, … ] 这种形式出现的构成各个面的指数数组
radius — Float - 最终形状的半径
detail — Integer - 把几何模型细分成多少层. 层越多形状越光滑.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

RingGeometry

概念

用于生成二维环几何的类

使用

1
RingGeometry(innerRadius : Float, outerRadius : Float, thetaSegments : Integer, phiSegments : Integer, thetaStart : Float, thetaLength : Float)

innerRadius — 默认值为0.5.
outerRadius — 默认值为1.
thetaSegments — 分割面数量. 更高的值意味着更加的圆滑. 最小值为3. 默认值为8.
phiSegments — 最小值为1. 默认值为8.
thetaStart — 开始角度. 默认值为0.
thetaLength — 圆心角. 默认值为Math.PI * 2.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

RingBufferGeometry

概念

用于生成二维环几何的类

使用

1
RingBufferGeometry(innerRadius : Float, outerRadius : Float, thetaSegments : Integer, phiSegments : Integer, thetaStart : Float, thetaLength : Float)

innerRadius — 默认值为0.5.
outerRadius — 默认值为1.
thetaSegments — 分割面数量. 更高的值意味着更加的圆滑. 最小值为3. 默认值为8.
phiSegments — 最小值为1. 默认值为8.
thetaStart — 开始角度. 默认值为0.
thetaLength — 圆心角. 默认值为Math.PI * 2.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ShapeGeometry

概念

从一个或多个路径形状创建单面多边形几何

使用

1
ShapeGeometry(shapes : Array, curveSegments : Integer)

shape - 形状数组或单个形状
curveSegments - 整数 - 每个形状的段数。 默认值为12

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

ShapeBufferGeometry

概念

从一个或多个路径形状创建单面多边形几何

使用

1
ShapeBufferGeometry(shapes : Array, curveSegments : Integer)

shape - 形状数组或单个形状
curveSegments - 整数 - 每个形状的段数。 默认值为12

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

SphereGeometry

概念

用于生成球体几何的类

使用

1
SphereGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer, phiStart : Float, phiLength : Float, thetaStart : Float, thetaLength : Float)

radius — 球体半径. 默认值为50
widthSegments — 水平分割面的数量. 最小值为3, 默认值为8
heightSegments — 垂直分割面的数量. 最小值为2, 默认值为6
phiStart — 指定水平起始角度. 默认值为0
phiLength — 指定水平扫描角度大小. 默认值为 Math.PI * 2
thetaStart — 指定垂直起始角度. 默认值为0
thetaLength — 指定垂直扫描角度大小. 默认值为Math.PI

几何模型是通过扫描和计算绕Y轴(水平扫描)和Z轴(垂直扫描)的顶点创建而成。因此,不完整的球(类似于’sphere slices’)可以通过对phistart,philength,thetastart和thetalength使用不同的值来创建

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

SphereBufferGeometry

概念

用于生成球体几何的类

使用

1
SphereBufferGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer, phiStart : Float, phiLength : Float, thetaStart : Float, thetaLength : Float)

radius — 球体半径. 默认值为50
widthSegments — 水平分割面的数量. 最小值为3, 默认值为8
heightSegments — 垂直分割面的数量. 最小值为2, 默认值为6
phiStart — 指定水平起始角度. 默认值为0
phiLength — 指定水平扫描角度大小. 默认值为 Math.PI * 2
thetaStart — 指定垂直起始角度. 默认值为0
thetaLength — 指定垂直扫描角度大小. 默认值为Math.PI

几何模型是通过扫描和计算绕Y轴(水平扫描)和Z轴(垂直扫描)的顶点创建而成。因此,不完整的球(类似于’sphere slices’)可以通过对phistart,philength,thetastart和thetalength使用不同的值来创建

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TetrahedronGeometry

概念

用于生成四面体几何的类

使用

1
TetrahedronGeometry(radius : Float, detail : Integer)

radius — 四面体半径. 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个四面体.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TetrahedronBufferGeometry

概念

用于生成四面体几何的类

使用

1
TetrahedronBufferGeometry(radius : Float, detail : Integer)

radius — 四面体半径. 默认值为1.
detail — 默认值为0. 设置为大于0的值将添加顶点使之不再是一个四面体.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TextGeometry

概念

用于将文本生成为单个几何的类。 它是文本和传入的属性对象创建的

使用

1
TextGeometry(text : String, parameters : Object)

text — 要显示的文字
parameters — 包含下面这些参数的对象

  • font — THREE.Font. 字体实例.
  • size — Float. 文字大小, 默认为100.
  • height — Float. 文字厚度. 默认值为50.
  • curveSegments — Integer. 曲线上点的数量. 默认值为12.
  • bevelEnabled — Boolean. 是否打开斜面. 默认值为False.
  • bevelThickness — Float. 文本斜面的深度. 默认值为10.
  • bevelSize — Float. 斜面离轮廓的距离. 默认值为8.
  • bevelSegments - Integer. 斜角段数. 默认值为3.
  • 属性

    parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TextBufferGeometry

概念

用于将文本生成为单个几何的类。 它是文本和传入的属性对象创建的

使用

1
TextBufferGeometry(text : String, parameters : Object)

text — 要显示的文字
parameters — 包含下面这些参数的对象

  • font — THREE.Font. 字体实例.
  • size — Float. 文字大小, 默认为100.
  • height — Float. 文字厚度. 默认值为50.
  • curveSegments — Integer. 曲线上点的数量. 默认值为12.
  • bevelEnabled — Boolean. 是否打开斜面. 默认值为False.
  • bevelThickness — Float. 文本斜面的深度. 默认值为10.
  • bevelSize — Float. 斜面离轮廓的距离. 默认值为8.
  • bevelSegments - Integer. 斜角段数. 默认值为3.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TorusGeometry

概念

用于生成圆环几何的类

使用

1
TorusGeometry(radius : Float, tube : Float, radialSegments : Integer, tubularSegments : Integer, arc : Float)

radius — 半径, 默认值为1.
tube — 管道直径. 默认值为 0.4.
radialSegments — 默认值为8
tubularSegments — 默认值为6.
arc — 圆心角. 默认值为Math.PI * 2.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TorusBufferGeometry

概念

用于生成圆环几何的类

使用

1
TorusBufferGeometry(radius : Float, tube : Float, radialSegments : Integer, tubularSegments : Integer, arc : Float)

radius — 半径, 默认值为1.
tube — 管道直径. 默认值为 0.4.
radialSegments — 默认值为8
tubularSegments — 默认值为6.
arc — 圆心角. 默认值为Math.PI * 2.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TorusKnotGeometry

概念

创建圆环结,其特定形状由一对互质整数p和q定义。 如果p和q不是互质的,则结果将是环面链接。

使用

1
TorusKnotGeometry(radius : Float, tube : Float, tubularSegments : Integer, radialSegments : Integer, p : Integer, q : Integer)

radius — 半径, 默认值为1.
tube — 管道直径. 默认值为 0.4.
tubularSegments — 默认值为64.
radialSegments — 默认值为8.
p — 这个值决定了几何体绕旋转对称轴绕了多少圈. 默认值为2.
q — 这个值决定了几何体绕环面的圆绕了多少圈. 默认值为3.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TorusKnotBufferGeometry

概念

创建圆环结,其特定形状由一对互质整数p和q定义。 如果p和q不是互质的,则结果将是环面链接。

使用

1
TorusKnotBufferGeometry(radius : Float, tube : Float, tubularSegments : Integer, radialSegments : Integer, p : Integer, q : Integer)

radius — 半径, 默认值为1.
tube — 管道直径. 默认值为 0.4.
tubularSegments — 默认值为64.
radialSegments — 默认值为8.
p — 这个值决定了几何体绕旋转对称轴绕了多少圈. 默认值为2.
q — 这个值决定了几何体绕环面的圆绕了多少圈. 默认值为3.

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TubeGeometry

概念

创建一个沿3d曲线挤出的管子

使用

1
TubeGeometry(path : Curve, tubularSegments : Integer, radius : Float, radialSegments : Integer, closed : Boolean)

path — Curve - 从 Curve 基本类继承而来的路径
segments — Integer - 组成管道的分割面数量, 默认值为64
radius — Float - 管道半径, 默认值为1
radiusSegments — Integer - 组成截面的分割面数量, 默认值为8
closed — Boolean 管道是开放的还是闭合的, 默认值为false

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

TubeBufferGeometry

概念

创建一个沿3d曲线挤出的管子

使用

1
TubeBufferGeometry(path : Curve, tubularSegments : Integer, radius : Float, radialSegments : Integer, closed : Boolean)

path — Curve - 从 Curve 基本类继承而来的路径
segments — Integer - 组成管道的分割面数量, 默认值为64
radius — Float - 管道半径, 默认值为1
radiusSegments — Integer - 组成截面的分割面数量, 默认值为8
closed — Boolean 管道是开放的还是闭合的, 默认值为false

属性

parameters : Object

具有每个构造函数参数的属性的对象。 实例化后的任何修改都不会更改几何

WireframeGeometry

概念

这可以用作辅助对象,从线框角度观察Geometry对象

使用

1
WireframeGeometry( geometry : Geometry )

geometry — 任何几何对象

threejs 解读 camera

AmbientLight

概念

此光照均匀地照亮场景中的所有对象
此灯不能用于投射阴影,因为它没有方向

使用

1
AmbientLight( color : Integer, intensity : Float )

color — 光源颜色的RGB数值, 默认0xffffff
intensity – 光源强度的数值, 默认1

属性

castShadow : Boolean

这在构造函数中设置为undefined,因为环境光不能投射阴影。

isAmbientLight : Boolean

用于检查此类或派生类是否为环境光. 默认为true.
不应该更改它,因为它在内部用于优化

DirectionalLight

概念

一种沿特定方向发射的光。 这种光的行为就好像它是无限远的,并且由它产生的光线都是平行的。 常见的用例是模拟日光; 太阳足够远,它的位置可以被认为是无限的,并且来自它的所有光线都是平行的。

关于位置,目标和旋转的注释
方向灯的一个常见混淆点是设置旋转无效。 这是因为three.js的DirectionalLight与其他应用程序中通常称为“Target Direct Light”的东西相当。

这意味着它的方向被计算为从光的位置指向目标的位置(而不是仅具有旋转分量的’自由直接光’)。

这样做的原因是允许灯光投射阴影 - 阴影相机需要一个位置来计算阴影。

使用

1
DirectionalLight( color : Integer, intensity : Float )

color - (可选)十六进制颜色的光。 默认值为0xffffff(白色)。
intensity - (可选)灯光强度/强度的数值。 默认值为1。

属性

castShadow : Boolean

如果设置为true,则会投射动态阴影。 警告:不停的调整阴影以使其看起来正常,这很消耗性能。

isDirectionalLight : Boolean

用于检查此类或派生类是否为平行光. 默认为true.
不应该更改它,因为它在内部用于优化

position : Vector3

这被默认设置为Object3D.DefaultUp(0,1,0),以便光从上到下发光

shadow : DirectionalLightShadow

用于计算此灯光的阴影DirectionalLightShadow

target : Object3D

DirectionalLight从其位置指向target.position。 目标的默认位置是(0,0,0)。
注意:要将目标的位置更改为默认值以外的任何位置,必须将其添加到场景中

方法

copy( source : DirectionalLight ) : DirectionalLight

将source中所有属性的值复制到此DirectionalLight

HemisphereLight

概念

直接位于场景上方的光源,颜色从天空颜色渐变到底色。

此灯不能用于投射阴影

使用

1
HemisphereLight( skyColor : Integer, groundColor : Integer, intensity : Float )

skyColor - (可选)天空的十六进制颜色。 默认值为0xffffff。
groundColor - (可选)地面的十六进制颜色。 默认值为0xffffff。
intensity - (可选)灯光强度/强度的数值。 默认值为1。

属性

castShadow : Boolean

这在构造函数中设置为undefined,因为半球光不能投射阴影

color : Float

灯光的天空颜色,在构造函数中传递。 默认值是(0xffffff)

groundColor : Float

灯光的地面颜色,在构造函数中传递。 默认值是(0xffffff)

isHemisphereLight : Boolean

用于检查此类或派生类是否为半球光. 默认为true.
不应该更改它,因为它在内部用于优化

position : Vector3

这被默认设置为Object3D.DefaultUp(0,1,0),以便光从上到下发光

方法

copy ( source : HemisphereLight ) : HemisphereLight

将source中 color, intensity and groundColor属性的值复制到此光照

Light

概念

灯的抽象基类 - 所有其他灯类型都继承了此处描述的属性和方法

使用

1
Light( color : Integer, intensity : float )

color - (可选)十六进制颜色的光。 默认值为0xffffff(白色)。
intensity - (可选)灯光强度/强度的数值。 默认值为1。

创造一个新的光。 请注意,这不是要直接调用(而是使用派生类之一)

属性

color: Color

光的颜色。 如果未在构造函数中传递,则默认为将新颜色设置为白色

intensity : Float

光的强度或强度。
在物理上正确的模式中,颜色*强度的乘积被解释为在坎德拉中测量的发光强度。
默认值 - 1.0

isLight : Boolean

用于检查此类或派生类是否为光照. 默认为true.
不应该更改它,因为它在内部用于优化

方法

copy ( source : Light ) : Light

将source中 color, intensity 属性的值复制到此光照

###toJSON ( meta : String )
返回JSON格式的光照数据

PointLight

概念

从所有方向的单个点发出的光。 一个常见的用例是复制裸灯泡发出的光。

使用

1
PointLight( color : Integer, intensity : Float, distance : Number, decay : Float )

color - (可选)十六进制颜色的光。 默认值为0xffffff(白色)。
intensity - (可选)灯光强度/强度的数值。 默认值为1。

distance - 光的最大范围。 默认值为0(无限制)。
decay - 灯光沿着光线的距离变暗的量。 默认值为1. 对于物理上正确的照明,请将其设置为2

属性

decay : Float

光线沿光线距离变暗的量
在物理校正模式下,衰减= 2会模拟物理上逼真的光线衰减。
默认值为1。

distance : Float

默认模式 - 当距离为零时,灯不会衰减
当距离不为零时,光线将从光线位置处的最大强度线性衰减到距离光线此距离处的零点

物理校正模式 - 当距离为零时,光将根据反平方定律衰减到无限远距离
当距离不为零时,光将根据反平方定律衰减,直到接近距离截止,然后它将快速平滑地衰减到0.当然,截止在物理上是不正确的

默认值为0.0

isPointLight : Boolean

用于检查此类或派生类是否为点光源. 默认为true.
不应该更改它,因为它在内部用于优化

power : Float

光的强度
在物理校正模式下,光的发光功率以流明为单位测量。 默认值为4Math.PI
这与intensity成比例关系

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
改变这属性也将改变intensity 

###shadow : LightShadow

用于计算此灯光阴影的LightShadow。

lightShadow的相机被设置为PerspectiveCamera,fov为90, aspect为1,near 为0.5,far为500。


## 方法
### copy ( source : PointLight ) : PointLight
将source中所有属性的值复制到此光照


# RectAreaLight
RectAreaLight是在一个矩形平面上均匀地发光。 这种灯型可用于模拟光源,如明亮的窗户或条形照明。

ps:

不支持阴影
仅支持**MeshStandardMaterial**和**MeshPhysicalMaterial**
在场景中必须包含**RectAreaLightUniformsLib**

## 使用

RectAreaLight( color : Integer, intensity : Float, width : Float, height : Float )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

color - (可选)十六进制颜色的光。 默认值为0xffffff(白色)。
intensity - (可选)光的强度或亮度。 默认值为1。
width - (可选)灯的宽度。 默认值为10。
height - (可选)灯光高度。 默认值为10。

## 属性
### isRectAreaLight : Boolean

用于检查此类或派生类是否为矩形区光源. 默认为true.
不应该更改它,因为它在内部用于优化

## 方法
### copy ( source : RectAreaLight ) : RectAreaLight
将source中所有属性的值复制到此光照


# SpotLight
## 概念
聚光源,这种光从一个方向上的单个点沿着一个锥体发出,该锥体的尺寸越大,距离得到的光越远

## 使用

SpotLight( color : Integer, intensity : Float, distance : Float, angle : Radians, penumbra : Float, decay : Float )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

color - (可选)十六进制颜色的光。 默认值为0xffffff(白色)。
intensity - (可选)灯光强度/强度的数值。 默认值为1。
distance - 光的最大范围。 默认值为0(无限制)。
angle - 从其上限为Math.PI / 2的方向的最大光散射角。
pennumbra - 由于半影而衰减的聚光锥的百分比。 取值介于0和1之间。默认值为零。
decay - 灯光沿着光线的距离变暗的量

## 属性
### angle : Float
聚光灯的最大范围,从光源方向看,以弧度为单位,。 应该不超过Math.PI / 2。 默认值为Math.PI / 3

### castShadow : Boolean
如果设置为true,则会投射动态阴影。 警告:不停的调整阴影以使其看起来正常,这很消耗性能。

### decay : Float
光线沿光线距离变暗的量
在物理校正模式下,decay= 2会导致物理上逼真的光线衰减,
默认值为1

### distance : Float
默认模式 - 当距离为零时,灯不会衰减
当距离不为零时,光线将从光线位置处的最大强度线性衰减到距离光线此距离处的零点

物理校正模式 - 当距离为零时,光将根据反平方定律衰减到无限远距离
当距离不为零时,光将根据反平方定律衰减,直到接近距离截止,然后它将快速平滑地衰减到0.当然,截止在物理上是不正确的

默认值为0.0

### isSpotLight : Boolean

用于检查此类或派生类是否为聚光光源. 默认为true.
不应该更改它,因为它在内部用于优化

### penumbra : Float
由于半影而衰减的聚光锥的百分比。 取值介于0和1之间。默认值为0.0

### position : Vector3
默认设置为Object3D.DefaultUp(0,1,0),以便光从上到下发光

### power : Float
光的强度
在物理校正模式下,光的发光功率以流明为单位测量。 默认值为4Math.PI
这与intensity成比例关系 ```power = intensity * π```
改变这属性也将改变intensity

### shadow : SpotLightShadow
用于计算此灯光的阴影SpotLightShadow

### target : Object3D
Spotlight从其光源位置指向target.position。 目标的默认位置是(0,0,0)。
注意:要将目标的位置更改为默认值以外的任何位置,必须将其添加到场景中

scene.add( light.target )
`
这样,目标的matrixWorld每帧都会自动更新

也可以将目标设置为场景中的另一个对象(具有position属性的任何对象),如下所示

var targetObject = new THREE.Object3D();
scene.add(targetObject);

light.target = targetObject;

聚光灯现在将跟踪目标对象

方法

copy ( source : SpotLight ) : SpotLight

将source中所有属性的值复制到此光照

threejs 解读 material

LineBasicMaterial

概念

用于绘制线框样式几何图形的材质

使用

1
LineBasicMaterial( parameters : Object )

parameters -(可选)具有一个或多个属性的对象,用于定义材质的外观。 材料的任何属性(包括从Material继承的任何属性)都可以在此处传递。

属性颜色例外,它可以作为十六进制字符串传递,默认情况下为0xffffff(白色)。 Color.set(颜色)在内部调用。

属性

color : Color

材质的颜色,默认设置为白色(0xffffff)

isLineBasicMaterial : Boolean

用于检查此类或派生类是否为行基本材质。 默认为true。
不应该更改它,因为它在内部用于优化

lights : Boolean

材料是否受灯光影响。 默认值为false

linewidth : Float

控制线条粗细。 默认值为1
由于在大多数平台上WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽始终为1

linecap : String

定义线端的外观。 可能的值是’butt’,’round’和’square’。 默认为’round’.
对于2D Canvas lineCap属性,WebGL渲染器会忽略该属性

linejoin : String

定义线关节的连接点。 可能的值是’round’,’bevel’和’miter’。 默认为’round’
对于2D Canvas lineJoin属性,WebGL渲染器会忽略该属性

LineDashedMaterial

概念

用虚线绘制线框样式几何图形的材质

使用

1
LineBDashedMaterial( parameters : Object )

parameters -(可选)具有一个或多个属性的对象,用于定义材质的外观。 材料的任何属性(包括从Material继承的任何属性)都可以在此处传递。

属性颜色例外,它可以作为十六进制字符串传递,默认情况下为0xffffff(白色)。 Color.set(颜色)在内部调用。

属性

color : Color

材质的颜色,默认设置为白色(0xffffff)

dashSize : number

短划线的大小, 默认值为3。

gapSize : number

短划线间隙的大小, 默认值为1

isLineDashedMaterial : Boolean

用于检查此类或派生类是否为行基本材质。 默认为true。
不应该更改它,因为它在内部用于优化

lights : Boolean

材料是否受灯光影响。 默认值为false

linewidth : Float

控制线条粗细。 默认值为1
由于在大多数平台上WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽始终为1

scale : number

线的虚线部分的比例。 默认值为1。

Material

概念

材料的基础抽象类

材质描述了对象的外观。 它们以(主要)与渲染器无关的方式定义,因此如果您决定使用不同的渲染器,则不必重写材质。

所有其他材质类型都继承了该类的属性和方法(尽管它们可能具有不同的默认值)

使用

1
Material()

创建通用材质

属性

alphaTest : Float

设置运行alpha测试时要使用的alpha值。 如果不透明度低于此值,则不会渲染材质。 默认值为0

blendDst : Integer

混合目标。这是Three.js中定义的一个混合模式常量。默认为 OneMinusSrcAlphaFactor
必须将材质blending设置为CustomBlending才能生效

blendDstAlpha : Integer

blendDst的透明度。 默认值为null

blendEquation : Integer

应用混合时所用的混合方程式。这是Three.js中定义的一个常量。 默认为 AddEquation
必须将材质blending设置为CustomBlending才能生效

blendEquationAlpha : Integer

blendEquation的透明度。 默认值为null

blending : Blending

当显示该材质的对象时使用何种混合模式, 必须将其设置为CustomBlending才能使用自定义blendSrc,blendDst或blendEquation,默认为 NormalBlending

blendSrc : Integer

混合来源。 默认为SrcAlphaFactor
必须将材质的混合设置为CustomBlending才能生效

blendSrcAlpha : Integer

blendSrc的透明度。 默认值为null

clipIntersection : Boolean

更改剪裁平面的方式,仅剪切其交交集,而不是它们的并集。 默认值为false

clippingPlanes : Array

用户定义的剪裁平,指定为世界空间中的THREE.Plane对象。 这些平面适用于此材质所附着的对象。 空间中与平面的符号距离为负的点被剪裁(未渲染)。 这需要WebGLRenderer.localClippingEnabled为true。 默认值为null。

clipShadows : Boolean

定义是否根据此材质上指定的剪裁平面剪切阴影。 默认值为false

colorWrite : Boolean

是否渲染材质的颜色。 这可以与网格renderOrde属性结合使用,以创建遮挡其他对象的不可见对象,默认为true

customDepthMaterial : Material

渲染到深度贴图时此材质要使用的通用深度材质。 当使用DirectionalLight或SpotLight进行阴影投射时,如果您是
(a)修改顶点着色器中的顶点位置,
(b)使用置换贴图,
(c)使用带alphaTest的alpha贴图
(d)使用透明纹理 使用alphaTest
必须为正确的阴影指定customDepthMaterial。 默认值undefined

customDistanceMaterial : Material
与customDepthMaterial相同,但与PointLight一起使用。 默认值undefined

defines : Object

注入着色器的自定义定义。 它们以对象键/值对传递。

* 2}```。 这些键/值对在顶点和片段着色器中定义。 默认值undefined
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

### depthFunc : Integer
使用哪种深度功能。 默认值为LessEqualDepth

### depthTest : Boolean
是否在渲染此材质时启用深度测试。 默认为true

### depthWrite : Boolean
渲染此材质是否对深度缓冲区有任何影响。 默认为true
在绘制2D叠加时,禁用深度写入以将多个事物分层在一起而不创建z-index伪像会很有用

### flatShading : Boolean
定义材质是否使用平面阴影进行渲染。 默认值为false

### fog : Boolean
材料是否受场景中fog的影响。 默认为true

### id : Integer
此材质实例的唯一编号

isMaterial : Boolean

用于检查此类或派生类是否为material。 默认为true,
不应该更改它,因为它在内部用于优化

### lights : Boolean
材质是否受光照影响,默认是true

### name : String
对象的可选名称(不必是唯一的)。 默认值为空字符串

### needsUpdate : Boolean
指定需要重新编译材质
实例化新材料时,此属性自动设置为true

### opacity : Float
值得范围在0.0 - 1.0之间,表示材料的透明度。 值0.0表示完全透明,1.0表示完全不透明,
如果材质的transparent属性未设置为true,则材质将保持完全不透明,此值仅影响其颜色
默认值为1.0

### polygonOffset : Boolean
是否使用多边形偏移。 默认值为false。 这对应于WebGL的GL_POLYGON_OFFSET_FILL 功能。


### polygonOffsetFactor : Integer
设置多边形偏移系数。 默认值为0

### polygonOffsetUnits : Integer
设置多边形偏移单位。 默认值为0

### precision : String
覆盖此材质的渲染器的默认精度。 可以是“highp”,“mediump”或“lowp”。 默认值为null

### premultipliedAlpha : Boolean
是否预乘alpha(透明度)值。 默认值为false

### dithering : Boolean
是否对颜色应用抖动以消除条带的外观。 默认值为false

### shadowSide : Integer
定义面部投射阴影的哪一侧。 设置时,可以是THREE.FrontSide,THREE.BackSide或THREE.DoubleSide。 默认值为null。
如果为null,则侧面投射阴影确定如下:

Material.side | Side casting shadows
------------- | -------------
THREE.FrontSide | back side
THREE.BackSide | front side
THREE.DoubleSide | both side

### side : Integer
定义将要渲染面部的哪一面 - 正面,背面或两者。 默认为THREE.FrontSide, 其他选项有THREE.BackSide和THREE.DoubleSide

### transparent : Boolean
定义此材质是否透明。 这对渲染有影响,因为透明对象需要特殊处理,并在非透明对象之后呈现
设置为true时,通过设置材质的不透明度属性来控制材质透明的程度
默认值为false

### type : String
值是字符串'Material'。 这不应该更改,并且可以用于在场景中查找此类型的所有对象


### uuid : String
此材质实例的UUID。 这会自动分配,因此不应编辑

### vertexColors : Integer
定义是否使用顶点着色。 默认值为THREE.NoColors。 其他选项有THREE.VertexColors和THREE.FaceColors。

### visible : Boolean
定义此材质是否可见。 默认为true。

### userData : object
可用于存储有关Material的自定义数据的对象。 它不应该包含对函数的引用,因为这些函数不会被克隆

## 方法
### clone ( ) : Material
返回与此材质具有相同参数的新材质

### copy ( material : material ) : Material
将传递材质中的参数复制到此材质中

### dispose () : null
释放材质。 材质的纹理不会被释放。 这些需要通过Texture释放

### onBeforeCompile ( shader : Object, renderer : WebGLRenderer ) : null
在编译着色器程序之前立即执行的可选回调。 使用着色器源代码作为参数调用此函数。 用于修改内置材料

### setValues ( values : object ) : null
values - 具有参数的容器
根据值设置属性

### toJSON ( meta : object ) : null
元对象,包含元素,例如材质的纹理或图像。
将材质转换为three.js JSON格式


# MeshBasicMaterial
## 概念
以简单着色(平面或线框)方式来绘制几何形状的材料
这种材质不受光照影响

## 使用

MeshBasicMaterial( parameters : Object )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

parameters -(可选)具有一个或多个属性的对象,用于定义材质的外观。 材料的任何属性(包括从Material继承的任何属性)都可以在此处传递。

属性颜色例外,它可以作为十六进制字符串传递,默认情况下为0xffffff(白色)。 Color.set(颜色)在内部调用。

## 属性
### alphaMap : Texture
alpha贴图是一种灰度纹理,用于控制整个表面的不透明度(黑色:完全透明;白色:完全不透明)。 默认值为null。

仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道,因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 仅亮度和亮度/ alpha纹理也将按预期工作。

### aoMap : Texture
该纹理的红色通道用作环境遮挡贴图。 默认值为null。
aoMap需要第二组UV,因此将忽略重复和偏移纹理属性。

### aoMapIntensity : Float
环境遮挡效应的强度。 默认值为1.零 不遮挡效果

### color : Color
材质的颜色,默认设置为白色(0xffffff)

### combine : Integer
如何将表面颜色的结果与环境贴图(如果有)结合起来
选项为THREE.Multiply(默认值),THREE.MixOperation,THREE.AddOperation。 如果选择混合,则使用reflectivity在两种颜色之间进行混合

### isMeshBasicMaterial : Boolean
用于检查此类或派生类是否为网格基础材质。 默认为true。
不应该更改它,因为它在内部用于优化。

### envMap : TextureCube
环境贴图。 默认值为null

### lightMap : Texture
光照贴图。 默认值为null,
lightMap需要第二组UV,因此将忽略重复和偏移纹理属性。

### lightMapIntensity : Float
烤光的强度。 默认值为1

### lights : Boolean
材质是否受光照影响。 默认值为false

### map : Texture
颜色贴图, 默认值为null

### .morphTargets : Boolean
定义材质是否使用morphTargets。 默认值为false

### reflectivity : Float
环境贴图对表面的影响程度。 默认值为1,有效范围介于0(无反射)和1(完全反射)之间

### refractionRatio : Float
空气的折射率(IOR)(约为1)除以材料的折射率。 它与环境映射模式THREE.CubeRefractionMapping和THREE.EquirectangularRefractionMapping一起使用。 折射率不应超过1.默认值为0.98。

### skinning : Boolean
定义材质是否使用蒙皮。 默认值为false

### specularMap : Texture
材质使用的高光贴图。 默认值为null

### wireframe : Boolean
将几何图形渲染为线框。 默认值为false(即渲染为平面多边形)

### wireframeLinecap : String
定义线端的外观。 可能的值是“butt”,“round”和“square”。 默认为'round'。

这对应于2D Canvas lineCap属性,WebGL渲染器会忽略它

### wireframeLinejoin : String
定义线连接点的外观。 可能的值是“round”,“bevel”和“miter”。 默认为'round'。

这对应于2D Canvas lineJoin属性,WebGL渲染器会忽略它

### wireframeLinewidth : Float
控制线框厚度。 默认值为1。

由于在大多数平台上WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽始终为1

# MeshDepthMaterial
## 概念
用于按深度绘制几何图形的材质。 深度基于相机近远平面。 白色最近,黑色最远

## 使用

MeshDepthMaterial( parameters : Object )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

parameters -(可选)具有一个或多个属性的对象,用于定义材质的外观。 材料的任何属性(包括从Material继承的任何属性)都可以在此处传递


## 属性
### alphaMap : Texture
alpha贴图是一种灰度纹理,用于控制整个表面的不透明度(黑色:完全透明;白色:完全不透明)。 默认值为null。

仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道,因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 仅亮度和亮度/ alpha纹理也将按预期工作。


### depthPacking : Constant
用于深度包装的编码, 默认为BasicDepthPacking

### displacementMap : Texture
置换贴图会影响网格顶点的位置。 与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象,以及充当真实的几何体。 位移纹理是这样的图像,其中每个像素的值(白色是最高的)被映射,并且重新定位网格的顶点。

### displacementScale : Float
置换贴图对网格的影响程度(黑色是不位移,白色是最大位移)。 如果没有设置置换贴图,则不会应用此值。 默认值为1。

### displacementBias : Float
位移贴图在网格顶点上的偏移量。 如果没有设置置换贴图,则不会应用此值。 默认值为0。

### fog : Boolean
材质是否受场景中fog影响。 默认值为false

### isMeshDepthMaterial : Boolean

用于检查此类或派生类是否为网格深度材质。 默认为true
不应该更改它,因为它在内部用于优化

### lights : Boolean
材质是否受光照影响。 默认值为false

### map : Texture
颜色贴图,默认为null

### morphTargets : boolean
定义材质是否使用morphTargets。 默认值为false

### skinning : Boolean
定义材质是否使用蒙皮。 默认值为false

### wireframe : boolean
将几何图形渲染为线框。 默认值为false(即呈现为平滑着色)

### wireframeLinewidth : Float
控制线框厚度。 默认值为1。

由于在大多数平台上WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽始终为1


# MeshLambertMaterial
## 概念
用于非光泽表面的材料,没有镜面高光
该材料使用基于非物理的朗伯模型来计算反射率。 这可以很好地模拟一些表面(例如未经处理的木材或石材),但不能模拟具有镜面高光的光泽表面(例如涂漆木材)
使用Gouraud着色模型计算着色。 这将计算每个顶点的着色(即在顶点着色器中)并在多边形的面上插入结果。
由于反射率和照明模型的简单性,当使用这种材料而不是MeshPhongMaterial,MeshStandardMaterial或MeshPhysicalMaterial时,性能会更高,但可能影响某些图形精度

## 使用

MeshLambertMaterial( parameters : Object )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
parameters -(可选)具有一个或多个属性的对象,用于定义材质的外观。 材料的任何属性(包括从Material继承的任何属性)都可以在此处传递。

属性颜色例外,它可以作为十六进制字符串传递,默认情况下为0xffffff(白色)。 Color.set(颜色)在内部调用

## 属性
### alphaMap : Texture
alpha贴图是一种灰度纹理,用于控制整个表面的不透明度(黑色:完全透明;白色:完全不透明)。 默认值为null。

仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道,因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 仅亮度和亮度/ alpha纹理也将按预期工作。

### aoMap : Texture
该纹理的红色通道用作环境遮挡贴图。 默认值为null。
aoMap需要第二组UV,因此将忽略重复和偏移纹理属性。

### aoMapIntensity : Float
环境遮挡效应的强度。 默认值为1.零 不遮挡效果


### color : Color
材质的颜色,默认设置为白色(0xffffff)

### combine : Integer
如何将表面颜色的结果与环境贴图(如果有)结合起来
选项为THREE.Multiply(默认值),THREE.MixOperation,THREE.AddOperation。 如果选择混合,则使用reflectivity在两种颜色之间进行混合

### emissive : Color
材料的发光颜色,基本上是不受其他照明影响的纯色。 默认为黑色。

### emissiveMap : Texture
设置自发光(发光)贴图。 默认值为null。 发射性地图颜色由发射颜色和发射强度调制。 如果您有自发光贴图,请务必将发光颜色设置为黑色以外的其他颜色

### emissiveIntensity : Float
发射光的强度。 调节发光颜色。 默认值为1

### envMap : TextureCube
环境贴图。 默认值为null

### isMeshLambertMaterial : Boolean
用于检查此类或派生类是否为网格Lambert材质。 默认为true。
不应该更改它,因为它在内部用于优化

### lightMap : Texture
光照贴图。 默认值为null。 lightMap需要第二组UV,因此将忽略重复和偏移纹理属性


### lightMapIntensity : Float
烤光的强度。 默认值为1

### .map : Texture
色彩贴图,默认为null


### morphNormals : boolean
定义材质是否使用morphNormals。 设置为true可将morphNormal属性从Geometry传递到着色器。 默认值为false

### morphTargets : Boolean
定义材质是否使用morphTargets。 默认值为false

### reflectivity : Float
环境贴图对几何表面的影响程度

### refractionRatio : Float
空气的折射率(IOR)(约为1)除以材料的折射率。 它与环境映射模式THREE.CubeRefractionMapping和THREE.EquirectangularRefractionMapping一起使用。 折射率不应超过1.默认值为0.98。


### skinning : Boolean
定义材质是否使用蒙皮。 默认值为false。

### specularMap : Texture
材质使用的高光贴图。 默认值为null。


### wireframe : boolean
将几何图形渲染为线框。 默认值为false(即呈现为平滑着色)


### wireframeLinecap : String
定义线端的外观。 可能的值是“butt”,“round”和“square”。 默认为'round'。

这对应于2D Canvas lineCap属性,WebGL渲染器会忽略它

### wireframeLinejoin : String
定义线连接点的外观。 可能的值是“round”,“bevel”和“miter”。 默认为'round'。

这对应于2D Canvas lineJoin属性,WebGL渲染器会忽略它

### wireframeLinewidth : Float
控制线框厚度。 默认值为1。

由于在大多数平台上WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽始终为1



# MeshNormalMaterial
## 概念
将法线矢量映射到RGB颜色的材质

## 使用

MeshNormalMaterial( parameters : Object )
`
parameters -(可选)具有一个或多个属性的对象,用于定义材质的外观。 材料的任何属性(包括从Material继承的任何属性)都可以在此处传递。

属性

fog : Boolean

材质是否受场景中fog影响。 默认值为false

isMeshNormalMaterial : Boolean

用于检查此类或派生类是否为MeshNormalMaterial材质。 默认为true
不应该更改它,因为它在内部用于优化

lights : Boolean

材质是否受光照影响。 默认值为false

morphTargets : boolean

定义材质是否使用morphTargets, 默认值为false

wireframe : boolean

将几何图形渲染为线框。 默认值为false(即呈现为平滑着色)

wireframeLinewidth : Float

控制线框厚度。 默认值为1。

由于在大多数平台上WebGL渲染器的OpenGL核心配置文件的限制,无论设置值如何,线宽始终为1

threejs 解读 camera

Camera

概念

相机的抽象类,新构建的相机都继承自此类

使用

创建相机:

1
Camera()

属性

isCamera

用于检查此类或派生类是否为相机。 不应该更改此属性,因为渲染器在内部使用它进行优化。默认为true。

layers

相机所属的layers 。 这是Object3D的继承属性。
在渲染相机的视点时,对象必须与相机共享至少一个图层。

matrixWorldInverse

这是matrixWorld的逆矩阵,matrixWorld包含相机在世界坐标系的变换矩阵

projectionMatrix

包含相机的投影矩阵

projectionMatrixInverse

projectionMatrix的逆矩阵

方法

clone()

返回具有与此相同属性的新相机

copy ( source : Camera, recursive : Boolean )

将源摄像头中的属性复制到此摄像头中

getWorldDirection ( target : Vector3 )

target - 结果将被复制到此Vector3中
返回表示摄像机正在查看的世界空间方向的Vector3

CubeCamera

概念

创建6个渲染到WebGLRenderTargetCube的摄像机

使用

1
CubeCamera( near : Number, far : Number, cubeResolution : Number, options : Object )

near - 相机近剪裁距离
far - 相机远裁剪距离
cubeResolution - 设置立方体边缘的长度,体现为清晰度
options - (可选)保存传递给自动生成的WebGLRenderTargetCube的纹理参数的对象。 如果未指定,则选项默认为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{format:RGBFormat,magFilter:LinearFilter,minFilter:LinearFilter}
```
构造一个包含6个PerspectiveCameras相机渲染到WebGLRenderTargetCube

## 属性
### renderTarget
生成的立方体纹理

## 方法
### update( renderer : WebGLRenderer, scene : Scene)

调用它来更新renderTarget

### clear( renderer : WebGLRenderer, color : Boolean, depth : Boolean, stencil : Boolean )
调用此方法以清除renderTarget颜色,深度和/或模板缓冲区。 颜色缓冲区设置为渲染器的当前清晰颜色。 参数默认为true

# OrthographicCamera
## 概念
在此投影模式下,无论距离相机的距离如何,渲染图像中的对象大小都保持不变
这对于渲染2D场景和UI元素等非常有用

## 使用

OrthographicCamera( left : Number, right : Number, top : Number, bottom : Number, near : Number, far : Number )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

left — 相机视锥体的左平面
right — 相机视锥体的右平面
top — 相机视锥体的上平面
bottom — 相机视锥体的下平面
near — 相机视锥体的近平面
far — 相机视锥体的原平面

这些一起定义了[相机的视锥体](https://en.wikipedia.org/wiki/Viewing_frustum)

## 属性
### bottom
相机视锥体的下平面

### far
相机视锥体的远平面。默认是2000
有效范围介于近平面和无穷远之间

### isOrthographicCamera
用于检查此类或派生类是否为正交相机。 不应该更改此属性,因为渲染器在内部使用它进行优化。默认为true。

### left
相机视锥体的左平面

### near
相机视锥体的近平面。默认是0.1
有效范围介于0和远平面

### right
相机视锥体的右平面

### top
相机视锥体的上平面

### view
通过**setViewOffset**方法设置,默认是null

### zoom
获取或设置摄像机的缩放系数, 默认值为1

## 方法
### setViewOffset ( fullWidth : Float, fullHeight : Float, x : Float, y : Float, width : Float, height : Float )

fullWidth - 多视图设置的全宽
fullHeight - 多视图设置的全高
x - 副摄像机的水平偏移
y - 副摄像机的垂直偏移
width - 副摄像机的宽度
height - 副摄像机的高度

### clearViewOffset ()
清除所有视图偏移

### updateProjectionMatrix ()
更新相机投影矩阵,必须在参数发生变化后调用

### toJSON ()
返回JSON格式的相机数据

# PerspectiveCamera
## 概念
透视相机,这种投影模式旨在模仿人眼看到的方式,它是用于渲染3D场景的最常见投影模式。

## 使用

PerspectiveCamera( fov : Number, aspect : Number, near : Number, far : Number )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
fov — 相机视锥体垂直视角  
aspect — 相机视锥体宽高比
near — 相机视锥体近平面
far — 相机视锥体远平面

## 属性
### aspect
相机视锥体宽高比,通常是画布宽度除以高度。默认是1

### far
相机视锥体的远截平面。默认是2000。
有效范围介于近平面和无穷远之间。

### filmGauge
用于较大轴的胶片尺寸。 默认值为35(毫米)。 除非**filmOffset**设置为非零值,否则此参数不会影响投影矩阵。

### filmOffset
与**filmGauge**相同单位的水平偏移,默认值为0

### focus
用于立体视觉和景深效果的物距。 除非使用**StereoCamera**,否则此参数不会影响投影矩阵。 默认值为10。

### fov
相机视锥体垂直视野,从底部到顶部的视图的角度度。 默认值为50

### isPerspectiveCamera
用于检查此类或派生类是否为透视相机。 不应该更改此属性,因为渲染器在内部使用它进行优化。默认为true。

### near
相机视锥体的近截平面。默认是0.1
有效范围大于0且小于远平面

### view
视锥体窗口规范或null。 这是使用**setViewOffset**方法设置的,并使用**clearViewOffset**清除。

### zoom
获取或设置摄像机的缩放系数, 默认值为1

## 方法
### clearViewOffset ()
删除**setViewOffset**方法设置的任何偏移量

### getEffectiveFOV()
返回乘以缩放系数 **zoom** 的当前视角,单位为角度(°)。

### getFilmHeight()
返回胶片上图像的高度,如果.aspect小于或等于1(纵向格式),则结果等于**filmGauge**

### getFilmWidth()
返回胶片上图像的宽度。 如果.aspect大于或等于1(横向格式),则结果等于**filmGauge**

### getFocalLength ()
返回当前和 **filmGauge** 有关的 **fov** 的焦距


### setFocalLength ( focalLength : Float )
设置当前和**filmGauge**有关的**fov**的焦距。
默认情况下,焦距为35mm全幅相机

### setViewOffset ( fullWidth : Float, fullHeight : Float, x : Float, y : Float, width : Float, height : Float )


fullWidth - 多视图设置的全宽
fullHeight - 多视图设置的全高
x - 副摄像机的水平偏移
y - 副摄像机的垂直偏移
width - 副摄像机的宽度
height - 副摄像机的高度

该方法用于在一个较大的视椎体中设置视图偏移。这对于多窗口或多监视器/多机设置是有用的。


.updateProjectionMatrix ()
更新相机投影矩阵,必须在参数发生变化后调用
### clone ()
返回一个 PerspectiveCamera 对象的克隆

### toJSON ()
返回JSON格式的相机数据

# StereoCamera
## 概念
立体相机。用于双透视相机,例如[3D Anaglyph](https://en.wikipedia.org/wiki/Anaglyph_3D)或者[Parallax Barrier](https://en.wikipedia.org/wiki/Parallax_barrier).

## 使用

StereoCamera()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

## 属性
### aspect
相机视锥体宽高比,默认为1

### eyeSep
默认0.064

### cameraL
左相机。 这将添加到图层 - 左相机要渲染的对象也必须添加到此图层

### cameraR
右相机。 这将添加到图层 - 右相机要渲染的对象也必须添加到此图层

## 方法
### update
根据传入的相机更新立体相机

# ArrayCamera
## 概念
ArrayCamera使用预定义的一相机有效地渲染场景。 这对于渲染VR场景是重要性能考虑。
ArrayCamera的一个实例总是有一个子摄像头数组。 必须为每个子摄像机定义bounds属性,该属性确定使用此摄像机渲染的视口部分

## 使用

ArrayCamera( array : Array )
`
相机数组

属性

cameras

相机数组