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
//! # Scene Module
//!
//! This module provides functionality for managing 3D scenes, including cameras, lights, and objects.
//!
//! ## Submodules
//!
//! - **camera**: Provides a camera implementation for viewing 3D scenes.
//! - **light**: Provides light sources for illuminating 3D scenes.
//! - **objects**: Provides structures for managing objects in a 3D scene.
//!
//! ## Usage
//!
//! ```rust
//! use glwfr::scene::{camera::Camera, light::Light, objects::{Scene, SceneObject, Transform}};
//! use glwfrcgmath::{Vector3, Quaternion};
//! use glwfr::graphics::gl_wrapper::{Vao, ShaderProgram};
//!
//! fn main() {
//! // Create a camera
//! let camera = Camera {
//! position: Vector3::new(0.0, 0.0, 5.0),
//! target: Vector3::new(0.0, 0.0, 0.0),
//! up: Vector3::new(0.0, 1.0, 0.0),
//! projection: camera::CameraProjection::Perspective {
//! fov: cgmath::Deg(45.0),
//! aspect_ratio: 16.0 / 9.0,
//! near: 0.1,
//! far: 100.0,
//! },
//! };
//!
//! // Create a light
//! let light = Light {
//! light_type: light::LightType::Point {
//! position: Vector3::new(0.0, 5.0, 0.0),
//! color: Vector3::new(1.0, 1.0, 1.0),
//! intensity: 1.0,
//! },
//! };
//!
//! // Create a scene object
//! let scene_object = SceneObject {
//! transform: Transform {
//! position: Vector3::new(0.0, 0.0, 0.0),
//! rotation: Quaternion::new(1.0, 0.0, 0.0, 0.0),
//! scale: Vector3::new(1.0, 1.0, 1.0),
//! },
//! vao: Vao::new(), // Assume Vao::new() creates a valid VAO
//! shader_program: ShaderProgram::new(), // Assume ShaderProgram::new() creates a valid shader program
//! vertex_count: 36, // Example vertex count for a cube
//! };
//!
//! // Create a scene
//! let scene = Scene {
//! objects: vec![scene_object],
//! camera,
//! lights: vec![light],
//! };
//! }
//! ```