class
Eagle::Camera3D
- Eagle::Camera3D
- Eagle::Node3D
- Eagle::Node
- Reference
- Object
Overview
The viewpoint a 3D scene is rendered from. The first camera added to the tree becomes current, and when a current camera exists, Eagle renders the 3D scene under the 2D layer every frame.
cam = Camera3D.new(position: v3(0, 3, 8), fov: 60)
cam.look_at(Vec3::ZERO)
SceneTree.root.add(cam)
class Viewer < App
@cam = Camera3D.new(position: v3(0, 2, 6))
def load : Nil
SceneTree.root.add(@cam)
end
def update(dt : Float32) : Nil
@cam.fly(dt) # WASD, right-drag to look: handy while building a scene
if Input.mouse_pressed?
ray = @cam.mouse_ray # pick things under the cursor with Ray#intersect_aabb
end
end
end
Defined in:
eagle/nodes/node3d.crConstructors
-
.new(name : String = "", position : Vec3 = Vec3::ZERO, fov : Number = 60, current : Bool = false)
Creates a camera.
Class Method Summary
-
.current : Camera3D | Nil
The camera the scene renders from, if any.
-
.current=(c : Camera3D | Nil)
Switches the active camera.
Instance Method Summary
-
#camera_view(aspect : Number) : CameraView
The view, projection and position packed for the renderer.
-
#current? : Bool
True when this camera renders the scene.
-
#enter_tree : Nil
Becomes current if no other camera is.
-
#exit_tree : Nil
Stops being current when removed.
-
#far : Float32
Farthest distance that is drawn.
-
#far=(far : Float32)
Farthest distance that is drawn.
-
#fly(dt : Float32, speed : Number = 6, look_speed : Number = 0.003) : Nil
A free-flying debug camera.
-
#fov : Float32
Vertical field of view in radians.
-
#fov=(fov : Float32)
Vertical field of view in radians.
-
#fov_degrees : Float32
Field of view in degrees.
-
#fov_degrees=(d : Number)
Sets the field of view in degrees.
-
#make_current : self
Makes this the active camera.
-
#mouse_ray : Ray
The ray through the mouse cursor.
-
#near : Float32
Nearest distance that is drawn.
-
#near=(near : Float32)
Nearest distance that is drawn.
-
#ortho_size : Float32
Half the view height in world units when orthographic.
-
#ortho_size=(ortho_size : Float32)
Half the view height in world units when orthographic.
-
#orthographic=(orthographic : Bool)
Use an orthographic projection with no perspective, for isometric and strategy views.
-
#orthographic? : Bool
Use an orthographic projection with no perspective, for isometric and strategy views.
-
#projection(aspect : Number) : Mat4
The projection matrix for an aspect ratio.
-
#screen_to_ray(screen : Vec2, viewport : Vec2 = Window.size) : Ray
The world-space ray through a screen point.
-
#view : Mat4
The view matrix (world to camera).
-
#world_to_screen(p : Vec3, viewport : Vec2 = Window.size) : Vec2 | Nil
Projects a world point to screen space, for name tags and markers over 3D objects.
Instance methods inherited from class Eagle::Node3D
back : Vec3
back,
distance_to(o : Node3D) : Float32
distance_to,
draw_tree(g : Graphics) : Nil
draw_tree,
euler : Vec3
euler,
euler=(e : Vec3)
euler=,
forward : Vec3
forward,
global_position : Vec3
global_position,
global_position=(p : Vec3)
global_position=,
global_rotation : Quat
global_rotation,
global_transform : Mat4
global_transform,
look_at(target : Vec3, up : Vec3 = Vec3::UP) : Nil
look_at,
parent_3d : Node3D | Nil
parent_3d,
position : Vec3
position,
position=(position : Vec3)
position=,
right : Vec3
right,
rotate(axis : Vec3, rad : Number) : Nil
rotate,
rotate_local(axis : Vec3, rad : Number) : Nil
rotate_local,
rotate_x(rad : Number) : Nil
rotate_x,
rotate_y(rad : Number) : Nil
rotate_y,
rotate_z(rad : Number) : Nil
rotate_z,
rotation : Quat
rotation,
rotation=(rotation : Quat)
rotation=,
scale : Vec3
scale,
scale=(s : Vec3)scale=(s : Number) scale=, set_euler(pitch : Number, yaw : Number, roll : Number = 0) : self set_euler, to_global(local : Vec3) : Vec3 to_global, to_local(global : Vec3) : Vec3 to_local, top_level=(top_level : Bool) top_level=, top_level? : Bool top_level?, transform : Mat4 transform, translate(v : Vec3) : Nil translate, translate_local(v : Vec3) : Nil translate_local, up : Vec3 up
Constructor methods inherited from class Eagle::Node3D
new(name : String = "", position : Eagle::Vec3 = Vec3::ZERO, rotation : Eagle::Quat = Quat::IDENTITY, scale : Eagle::Vec3 = Vec3::ONE)
new
Instance methods inherited from class Eagle::Node
<<(child : Node) : self
<<,
[](path : String) : Node
[],
[]?(path : String) : Node | Nil
[]?,
add(child : Node) : Nodeadd(*children : Node) : Nil add, add_child(child : Node) : Node add_child, add_to_group(group : String) : self add_to_group, ancestor_of?(node : Node) : Bool ancestor_of?, can_process? : Bool can_process?, child?(name : String) : Node | Nil child?, child_added : Eagle::Emitter(Node) child_added, child_count : Int32 child_count, child_removed : Eagle::Emitter(Node) child_removed, children : Array(Eagle::Node) children, children_of(type : T.class) : Array(T) forall T children_of, clear_children : Nil clear_children, draw(g : Graphics) : Nil draw, dump(io : IO = STDOUT, indent = 0) : Nil dump, each_ancestor(& : Node -> ) : Nil each_ancestor, each_child(& : Node -> ) : Nil each_child, each_descendant(&block : Node -> ) : Nil each_descendant, emit_child_added(*args) : Nil emit_child_added, emit_child_removed(*args) : Nil emit_child_removed, emit_tree_entered(*args) : Nil emit_tree_entered, emit_tree_exited(*args) : Nil emit_tree_exited, enter_tree : Nil enter_tree, exit_tree : Nil exit_tree, find(name : String) : Node | Nil find, find_all(type : T.class) : Array(T) forall T find_all, first_child : Node | Nil first_child, free : Nil free, get_node(path : String, type : T.class) : T forall T
get_node(path : String) : Node get_node, get_node?(path : String) : Node | Nil get_node?, groups : Set(String) groups, in_group?(group : String) : Bool in_group?, in_tree? : Bool in_tree?, input(event : Event) : Nil input, name : String name, name=(name : String) name=, on_child_added(&block : Node -> Nil) : Proc(Node, Nil) on_child_added, on_child_removed(&block : Node -> Nil) : Proc(Node, Nil) on_child_removed, on_tree_entered(&block : -> Nil) : Proc(Nil) on_tree_entered, on_tree_exited(&block : -> Nil) : Proc(Nil) on_tree_exited, parent : Node | Nil parent, path : String path, physics_process(dt : Float32) : Nil physics_process, process(dt : Float32) : Nil process, process_mode : Eagle::Node::ProcessMode process_mode, process_mode=(process_mode : Eagle::Node::ProcessMode) process_mode=, queue_free : Nil queue_free, queued_free? : Bool queued_free?, ready : Nil ready, ready_called? : Bool ready_called?, remove(child : Node) : Nil remove, remove_child(child : Node) : Nil remove_child, remove_from_group(group : String) : Nil remove_from_group, remove_from_parent : Nil remove_from_parent, resized(width : Int32, height : Int32) : Nil resized, root : Node root, to_s(io : IO) : Nil to_s, tree_entered : Eagle::Emitter() tree_entered, tree_exited : Eagle::Emitter() tree_exited, visible=(visible : Bool) visible=, visible? : Bool visible?, z_index : Int32 z_index, z_index=(z_index : Int32) z_index=
Constructor methods inherited from class Eagle::Node
new(name : String = "")
new
Constructor Detail
Creates a camera. fov is in degrees here.
Class Method Detail
Instance Method Detail
The view, projection and position packed for the renderer.
A free-flying debug camera. WASD moves, Q and E go down and up, right-drag or the arrow keys look around, and Ctrl moves faster. A gamepad works too.
Nearest distance that is drawn. Keep it as large as you can to avoid depth artifacts.
Nearest distance that is drawn. Keep it as large as you can to avoid depth artifacts.
Use an orthographic projection with no perspective, for isometric and strategy views.
Use an orthographic projection with no perspective, for isometric and strategy views.
The world-space ray through a screen point.