照相机
|
该页面正在翻译中。 |
A 照相机 仅仅是一个视口,通过它场景被可视化。 马基 提供2D和3D投影,2D绘图可以在3D投影!
要指定要用于场景的摄像机,可以设置 照相机 属性。 目前,我们提供以下相机/构造函数
这将使场景的相机突变为指定的类型。
像素相机
像素相机(campixel!)在像素空间中投影场景,即显示数据中的每个整数步将对应一个像素。 这台照相机没有控制装置. 削波限制设置为 (-10_000, 10_000).
相对相机
相对相机(cam_relative!)将场景投影为0。.1乘0。.1空间。 这台照相机没有控制装置. 削波限制设置为 (-10_000, 10_000).
2D相机
2D相机(cam2d!)使用具有固定旋转和宽高比的正投影。 您可以通过关键字参数设置以下属性 cam2d! 或者通过访问相机结构 cam=cameracontrols(场景):
-
zoomspeed=0.10f0设置鼠标滚轮缩放的速度。 -
zoombutton=什么都没有设置一个额外的键,需要按下以缩放。 默认为无键。 -
panbutton=鼠标。对设置翻译视图时需要按下的鼠标按钮。 -
selectionbutton=(键盘。空间,老鼠。左)设置一组需要按下以执行矩形缩放的按钮。
请注意,此相机不是由 轴心,轴心. 默认情况下,它用于2D LScene,LScenes和 场景s.
3D相机
#
<无翻译>*麦琪相机3d*-Type</无翻译>
Camera3D(scene[; kwargs...])
设置带有鼠标和键盘控制的3d相机。
相机的行为可以通过关键字参数或字段进行调整 设置 和 控制措施.
设置
设置包括任何不是鼠标或键盘按钮的内容。
-
projectiontype=透视设置投影的类型。 可以是正字法或视角. -
rotation_center=:lookat设置摄像机旋转的默认中心。 目前允许:看或:眼位. -
fixed_axis=true:如果真平移使用(世界/情节)z轴而不是相机向上方向。 -
zoom_shift_lookat=true:如果true在缩放时保持光标下的数据。 -
cad=错误:如果true旋转视图看,看当偏离中心缩放时。 -
clipping_mode=:自适应:控制方式附近和远得到处理。 选项:-
:静态通行证附近和远如斯 -
:适应性比例尺附近由norm(eyeposition-lookat)并通过远如斯 -
:view_relative比例尺附近和远由norm(eyeposition-lookat) -
:bbox_relative比例尺附近和远到场景边界框传递给相机update_cam!(...,bbox). (更具体地说远=1缩放到边界球体的最远点,附近通常被复盖为最接近的点。)
-
-
中心=真:控制调用时相机放置是否重置中心!(场景),这是当一个新的情节被添加调用。 -
keyboard_rotationspeed=1.0设置基于键盘的旋转速度。 -
keyboard_translationspeed=0.5设置基于键盘的翻译速度。 -
keyboard_zoomspeed=1.0设置基于键盘的缩放速度。 -
mouse_rotationspeed=1.0设置鼠标旋转的速度。 -
mouse_translationspeed=0.5设置鼠标翻译的速度。 -
mouse_zoomspeed=1.0设置鼠标缩放(mousewheel)的速度。 -
circular_rotation=(假,假,假)为(固定x,固定y,固定z)旋转轴启用圆形旋转。 (这意味着用鼠标围绕场景中心绘制一个圆圈将导致连续旋转。)
控制
控件包括任何类型的热键设置。
-
up_key=键盘。r将翻译的键设置到屏幕顶部。 -
down_key=键盘。f在屏幕底部设置翻译的键。 -
left_key=键盘。a在屏幕左侧设置翻译键。 -
right_key=键盘。d在屏幕右侧设置翻译键。 -
forward_key=键盘。w设置翻译到屏幕的键。 -
backward_key=键盘。s设置屏幕外翻译的键。 -
zoom_in_key=键盘。u设置缩放到场景中的键(将eyeposition转换为lookat)。 -
zoom_out_key=键盘。o设置缩小场景的键(从lookat转换eyeposition)。 -
increase_fov_key=键盘。b设置增加fov的关键。 -
decrease_fov_key=键盘。n设置降低fov的关键。 -
pan_left_key=键盘。j设置围绕屏幕垂直轴旋转的键。 -
pan_right_key=键盘。l设置围绕屏幕垂直轴旋转的键。 -
tilt_up_key=键盘。i设置围绕屏幕水平轴旋转的键。 -
tilt_down_key=键盘。k设置围绕屏幕水平轴旋转的键。 -
roll_clockwise_key=键盘。e设置屏幕旋转的键。 -
roll_counterclockwise_key=键盘。q设置屏幕旋转的键。 -
fix_x_key=键盘。x设置将平移和旋转固定到(世界/绘图)x轴的键。 -
fix_y_key=键盘。y设置将平移和旋转固定到(世界/绘图)y轴的键。 -
fix_z_key=键盘。z设置将平移和旋转固定到(世界/绘图)z轴的键。 -
重置=键盘。left_control和鼠标。左图设置重置相机的键。 这相当于调用中心!(场景). -
reposition_button=键盘。left_alt&鼠标.左图设置将摄像机聚焦在绘图对象上的键。 -
translation_button=鼠标。对设置拖动翻译的鼠标按钮. (上/下/左/右) -
scroll_mod=true为基于滚动的缩放设置额外的修改器按钮。 (真正的中立) -
rotation_button=鼠标。左图设置拖动旋转的鼠标按钮. (平移,倾斜)
其他夸格
一些关键字参数用于初始化字段。 其中包括
-
眼位=Vec3d(3):相机的位置。 -
外观=Vec3d(0):相机聚焦的点。 -
upvector=Vec3d(0,0,1):屏幕向上方向对应的世界方向。 -
fov=45.0是视场。 如果相机使用正投影,这是无关紧要的。 -
近=自动设置近夹平面的位置。 相机和近剪辑平面之间的任何东西都被隐藏。 必须大于0。 使用情况取决于clipping_mode. -
far=自动设置远夹平面的位置。 任何比远夹平面更远的东西都是隐藏的。 使用情况取决于clipping_mode. 默认值为1为clipping_mode=:bbox_relative,2为:view_relative或从以下限制派生的值:静态.
请注意,在活动摄像机中更新这些可观察对象需要调用 update_cam(场景) 供它们应用。 更新资料 [医]眼定位, 看,看 和/或upvector update_cam!(scene,eyeposition,lookat,upvector=Vec3d(0,0,1)) 是优选的。
相机的位置和方向也可以通过功能进行调整
-
translate_cam!(场景,v)将通过给定的世界/绘图空间矢量翻译相机v. -
rotate_cam!(场景、角度)将以相应的角度围绕其轴旋转相机。 第一个角度将围绕相机"右"旋转,即屏幕水平轴,第二个围绕向上矢量/垂直轴或Vec3d(0,0,+-1)如果fixed_axis=true,第三个将围绕视图方向即屏幕外的轴旋转。 旋转尊重电流旋转中心照相机的。 -
放大!(场景,zoom_step)将改变场景的缩放级别,而无需平移或旋转场景。zoom_步以乘法方式应用于凯。[医]动物学其用作fov(透视投影)或宽度和高度(正投影)的乘数。
cam3d! 和 cam3d_cad! 但创建一个 相机3d 有一些具体的选择。
示例-可视化摄像机视图框
using GeometryBasics, LinearAlgebra
function frustum_snapshot(cam)
r = Rect3f(Point3f(-1, -1, -1), Vec3f(2, 2, 2))
rect_ps = coordinates(r) .|> Point3f
insert!(rect_ps, 13, Point3f(1, -1, 1)) # fix bad line
inv_pv = inv(cam.projectionview[])
return map(rect_ps) do p
p = inv_pv * to_ndim(Point4f, p, 1)
return p[Vec(1,2,3)] / p[4]
end
end
ex = Point3f(1,0,0)
ey = Point3f(0,1,0)
ez = Point3f(0,0,1)
fig = Figure()
scene = LScene(fig[1, 1])
cc = Makie.Camera3D(scene.scene, projectiontype = Makie.Perspective)
行距!(场景,Rect3f(Point3f(-1),Vec3f(2)),颜色=:黑色)
行距!(场景,
[-ex,ex,-ey,ey,-ez,ez],
颜色=[:红色,:红色,:绿色,:绿色,:蓝色,:蓝色]
)
中心!(场景。景)
凸轮=场景。场景。照相机
eyeposition=cc。[医]眼定位
lookat=cc。看,看
frustum=map(pv->frustum_snapshot(cam),cam。projectionview)
场景=LScene(图[1,2])
_cc=Makie。Camera3D(场景。场景,projectiontype=Makie。正字)
台词!(scene,frustum,color=:blue,linestyle=:dot)
散开!(场景,眼睛位置,颜色=:黑色)
散开!(场景,lookat,颜色=:黑色)
行距!(场景,
[-ex,ex,-ey,ey,-ez,ez],
颜色=[:红色,:红色,:绿色,:绿色,:蓝色,:蓝色]
)
行距!(场景,Rect3f(Point3f(-1),Vec3f(2)),颜色=:黑色)
无花果
一般评论
要强制在3d中显示绘图,可以将限制设置为具有非零(z)轴间隔,或确保使用3D相机类型。 例如,您可以传递关键字参数 限制=Rect([0,0,0],[1,1,1]),或 相机=cam3d!.
通常,在修改场景时,相机可能会与场景"不同步"。 要解决这个问题,你可以打电话给 update_cam!现场的功能。
传递到2D和3d相机的按钮被转发到 [医]受压. 因此,你可以通过 错误 禁用交互, 真的 要忽略修饰符,任何按钮,按钮的集合甚至按钮的逻辑表达式。 有关更多详细信息,请参阅事件文档。