mirror of
https://codeberg.org/icewind/vmdl.git
synced 2026-06-03 16:44:11 +02:00
updates
This commit is contained in:
parent
8fa2449885
commit
e40471cda0
3 changed files with 547 additions and 756 deletions
1258
Cargo.lock
generated
1258
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
17
Cargo.toml
17
Cargo.toml
|
|
@ -14,27 +14,28 @@ thiserror = "2.0.7"
|
||||||
static_assertions = "1.1.0"
|
static_assertions = "1.1.0"
|
||||||
bitflags = "2.6.0"
|
bitflags = "2.6.0"
|
||||||
itertools = "0.13.0"
|
itertools = "0.13.0"
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.41"
|
||||||
bytemuck = { version = "1.17.0", features = ["derive"] }
|
bytemuck = { version = "1.20.0", features = ["derive"] }
|
||||||
cgmath = "0.18.0"
|
cgmath = "0.18.0"
|
||||||
num_enum = "0.7.3"
|
num_enum = "0.7.3"
|
||||||
half = "2.4.1"
|
half = "2.4.1"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
three-d = { version = "0.14.1", features = ["egui-gui"] }
|
three-d = { version = "0.18.0", features = ["egui-gui"] }
|
||||||
miette = { version = "7.2.0", features = ["fancy", "derive"] }
|
three-d-asset = "0.9.1"
|
||||||
|
miette = { version = "7.4.0", features = ["fancy", "derive"] }
|
||||||
criterion = "0.5.1"
|
criterion = "0.5.1"
|
||||||
iai = "0.1"
|
iai = "0.1"
|
||||||
vtf = "0.3.0"
|
vtf = "0.3.0"
|
||||||
tracing = "0.1.40"
|
tracing = "0.1.41"
|
||||||
tracing-subscriber = "0.3.18"
|
tracing-subscriber = "0.3.19"
|
||||||
gltf-json = "=1.3.0"
|
gltf-json = "=1.3.0"
|
||||||
gltf = "=1.3.0"
|
gltf = "=1.3.0"
|
||||||
image = "0.25.5"
|
image = "0.25.5"
|
||||||
clap = { version = "4.4.18", features = ["derive"] }
|
clap = { version = "4.5.23", features = ["derive"] }
|
||||||
main_error = "0.1.2"
|
main_error = "0.1.2"
|
||||||
vmt-parser = "0.2"
|
vmt-parser = "0.2"
|
||||||
tf-asset-loader = "0.1"
|
tf-asset-loader = "0.1.8"
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "parse"
|
name = "parse"
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,18 @@ mod material;
|
||||||
|
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use crate::material::{load_material_fallback, MaterialData};
|
use crate::material::{load_material_fallback, MaterialData};
|
||||||
|
use cgmath::{vec3, Matrix4, SquareMatrix};
|
||||||
use std::env::args_os;
|
use std::env::args_os;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use tf_asset_loader::Loader;
|
use tf_asset_loader::Loader;
|
||||||
use three_d::*;
|
use three_d::{
|
||||||
|
AmbientLight, Camera, ClearState, ColorMaterial, CpuMaterial, CpuMesh, CpuModel, CpuTexture,
|
||||||
|
DepthMaterial, DirectionalLight, FrameOutput, Light, NormalMaterial, ORMMaterial, OrbitControl,
|
||||||
|
PhysicalMaterial, PositionMaterial, UVMaterial, Vec2, Vec4, Window, WindowSettings,
|
||||||
|
};
|
||||||
|
use three_d_asset::{
|
||||||
|
degrees, Geometry, Mat4, Positions, Primitive, Srgba, TextureData, Vec3, Viewport,
|
||||||
|
};
|
||||||
use vmdl::Model;
|
use vmdl::Model;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
|
|
@ -51,7 +59,7 @@ fn main() -> Result<(), Error> {
|
||||||
300.0,
|
300.0,
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut control = OrbitControl::new(*camera.target(), 1.0, 100.0);
|
let mut control = OrbitControl::new(camera.target(), 1.0, 100.0);
|
||||||
let mut gui = three_d::GUI::new(&context);
|
let mut gui = three_d::GUI::new(&context);
|
||||||
|
|
||||||
let loader = Loader::new().expect("loader");
|
let loader = Loader::new().expect("loader");
|
||||||
|
|
@ -60,7 +68,7 @@ fn main() -> Result<(), Error> {
|
||||||
let cpu_models = (0..skin_count).map(|skin| model_to_model(&source_model, &loader, skin));
|
let cpu_models = (0..skin_count).map(|skin| model_to_model(&source_model, &loader, skin));
|
||||||
|
|
||||||
let ph_material = PhysicalMaterial {
|
let ph_material = PhysicalMaterial {
|
||||||
albedo: Color {
|
albedo: Srgba {
|
||||||
r: 128,
|
r: 128,
|
||||||
g: 128,
|
g: 128,
|
||||||
b: 128,
|
b: 128,
|
||||||
|
|
@ -74,11 +82,11 @@ fn main() -> Result<(), Error> {
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let mut directional = [
|
let mut directional = [
|
||||||
DirectionalLight::new(&context, 1.0, Color::WHITE, &vec3(1.0, -1.0, 0.0)),
|
DirectionalLight::new(&context, 1.0, Srgba::WHITE, vec3(1.0, -1.0, 0.0)),
|
||||||
DirectionalLight::new(&context, 1.0, Color::WHITE, &vec3(1.0, 1.0, 0.0)),
|
DirectionalLight::new(&context, 1.0, Srgba::WHITE, vec3(1.0, 1.0, 0.0)),
|
||||||
];
|
];
|
||||||
let mut ambient = AmbientLight {
|
let mut ambient = AmbientLight {
|
||||||
color: Color::WHITE,
|
color: Srgba::WHITE,
|
||||||
intensity: 0.2,
|
intensity: 0.2,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|
@ -154,7 +162,9 @@ fn main() -> Result<(), Error> {
|
||||||
|
|
||||||
// Draw
|
// Draw
|
||||||
{
|
{
|
||||||
camera.set_perspective_projection(degrees(fov), camera.z_near(), camera.z_far());
|
let z_near = camera.z_near();
|
||||||
|
let z_far = camera.z_far();
|
||||||
|
camera.set_perspective_projection(degrees(fov), z_near, z_far);
|
||||||
if shadows_enabled {
|
if shadows_enabled {
|
||||||
directional[0].generate_shadow_map(1024, model.iter().map(|gm| &gm.geometry));
|
directional[0].generate_shadow_map(1024, model.iter().map(|gm| &gm.geometry));
|
||||||
directional[1].generate_shadow_map(1024, model.iter().map(|gm| &gm.geometry));
|
directional[1].generate_shadow_map(1024, model.iter().map(|gm| &gm.geometry));
|
||||||
|
|
@ -216,7 +226,8 @@ fn main() -> Result<(), Error> {
|
||||||
),
|
),
|
||||||
DebugType::NONE => target.render(&camera, model, lights),
|
DebugType::NONE => target.render(&camera, model, lights),
|
||||||
}
|
}
|
||||||
.write(|| gui.render());
|
.write(|| gui.render())
|
||||||
|
.expect("failed to render");
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = change;
|
let _ = change;
|
||||||
|
|
@ -246,10 +257,6 @@ fn model_to_model(model: &Model, loader: &Loader, skin: usize) -> CpuModel {
|
||||||
let geometries = model
|
let geometries = model
|
||||||
.meshes()
|
.meshes()
|
||||||
.map(|mesh| {
|
.map(|mesh| {
|
||||||
let texture = skin
|
|
||||||
.texture(mesh.material_index())
|
|
||||||
.expect("texture out of bounds");
|
|
||||||
|
|
||||||
let positions: Vec<Vec3> = mesh
|
let positions: Vec<Vec3> = mesh
|
||||||
.vertices()
|
.vertices()
|
||||||
.map(|vertex| model.apply_root_transform(vertex.position))
|
.map(|vertex| model.apply_root_transform(vertex.position))
|
||||||
|
|
@ -263,13 +270,19 @@ fn model_to_model(model: &Model, loader: &Loader, skin: usize) -> CpuModel {
|
||||||
.collect();
|
.collect();
|
||||||
let tangents: Vec<Vec4> = mesh.tangents().map(Vec4::from).collect();
|
let tangents: Vec<Vec4> = mesh.tangents().map(Vec4::from).collect();
|
||||||
|
|
||||||
CpuMesh {
|
let triangles = CpuMesh {
|
||||||
positions: Positions::F32(positions),
|
positions: Positions::F32(positions),
|
||||||
normals: Some(normals),
|
normals: Some(normals),
|
||||||
uvs: Some(uvs),
|
uvs: Some(uvs),
|
||||||
material_name: Some(texture.into()),
|
|
||||||
tangents: Some(tangents),
|
tangents: Some(tangents),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
};
|
||||||
|
Primitive {
|
||||||
|
name: "model".into(),
|
||||||
|
geometry: Geometry::Triangles(triangles),
|
||||||
|
transformation: Mat4::identity(),
|
||||||
|
animations: vec![],
|
||||||
|
material_index: skin.texture_index(mesh.material_index()),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
@ -282,6 +295,7 @@ fn model_to_model(model: &Model, loader: &Loader, skin: usize) -> CpuModel {
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
CpuModel {
|
CpuModel {
|
||||||
|
name: "model".into(),
|
||||||
materials,
|
materials,
|
||||||
geometries,
|
geometries,
|
||||||
}
|
}
|
||||||
|
|
@ -289,7 +303,7 @@ fn model_to_model(model: &Model, loader: &Loader, skin: usize) -> CpuModel {
|
||||||
|
|
||||||
fn convert_material(material: MaterialData) -> CpuMaterial {
|
fn convert_material(material: MaterialData) -> CpuMaterial {
|
||||||
CpuMaterial {
|
CpuMaterial {
|
||||||
albedo: Color::new(
|
albedo: Srgba::new(
|
||||||
material.color[0],
|
material.color[0],
|
||||||
material.color[1],
|
material.color[1],
|
||||||
material.color[2],
|
material.color[2],
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue