mirror of
https://codeberg.org/icewind/vbsp-to-gltf.git
synced 2026-06-03 18:24:07 +02:00
texture transforms
This commit is contained in:
parent
f2f0acf543
commit
3b9f0b7458
4 changed files with 27 additions and 6 deletions
|
|
@ -1,6 +1,9 @@
|
|||
use crate::materials::{load_material_fallback, MaterialData, TextureData};
|
||||
use crate::pad_byte_vector;
|
||||
use gltf_json::buffer::View;
|
||||
use gltf_json::extensions::texture::{
|
||||
TextureTransform, TextureTransformOffset, TextureTransformRotation, TextureTransformScale,
|
||||
};
|
||||
use gltf_json::image::MimeType;
|
||||
use gltf_json::material::{AlphaCutoff, AlphaMode, PbrBaseColorFactor, PbrMetallicRoughness};
|
||||
use gltf_json::texture::Info;
|
||||
|
|
@ -9,6 +12,7 @@ use gltf_json::validation::USize64;
|
|||
use gltf_json::{Extras, Image, Index, Material, Root, Texture};
|
||||
use image::png::PngEncoder;
|
||||
use image::{ColorType, DynamicImage, GenericImageView};
|
||||
use std::f32::consts::PI;
|
||||
use tf_asset_loader::Loader;
|
||||
|
||||
pub fn push_or_get_material(
|
||||
|
|
@ -49,6 +53,16 @@ pub fn push_material(buffer: &mut Vec<u8>, gltf: &mut Root, material: MaterialDa
|
|||
_ => AlphaMode::Opaque,
|
||||
};
|
||||
|
||||
let transform = material.transform.map(|transform| TextureTransform {
|
||||
offset: TextureTransformOffset(transform.translate),
|
||||
rotation: TextureTransformRotation(transform.rotate / 180.0 * PI),
|
||||
scale: TextureTransformScale(transform.scale),
|
||||
..TextureTransform::default()
|
||||
});
|
||||
let extensions = transform.map(|transform| gltf_json::extensions::texture::Info {
|
||||
texture_transform: Some(transform),
|
||||
});
|
||||
|
||||
Material {
|
||||
name: Some(material.name),
|
||||
alpha_cutoff: material
|
||||
|
|
@ -64,7 +78,7 @@ pub fn push_material(buffer: &mut Vec<u8>, gltf: &mut Root, material: MaterialDa
|
|||
base_color_texture: texture_index.map(|index| Info {
|
||||
index,
|
||||
tex_coord: 0,
|
||||
extensions: None,
|
||||
extensions,
|
||||
extras: Extras::default(),
|
||||
}),
|
||||
..PbrMetallicRoughness::default()
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ use crate::Error;
|
|||
use image::DynamicImage;
|
||||
use tf_asset_loader::Loader;
|
||||
use tracing::{error, instrument};
|
||||
use vmt_parser::from_str;
|
||||
use vmt_parser::material::{Material, WaterMaterial};
|
||||
use vmt_parser::{from_str, TextureTransform};
|
||||
use vtf::vtf::VTF;
|
||||
|
||||
pub fn load_material_fallback(name: &str, search_dirs: &[String], loader: &Loader) -> MaterialData {
|
||||
|
|
@ -30,6 +30,7 @@ pub struct MaterialData {
|
|||
pub bump_map: Option<TextureData>,
|
||||
pub translucent: bool,
|
||||
pub no_cull: bool,
|
||||
pub transform: Option<TextureTransform>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
@ -102,6 +103,11 @@ pub fn load_material(
|
|||
})
|
||||
});
|
||||
|
||||
let transform = material
|
||||
.base_texture_transform()
|
||||
.filter(|transform| **transform != TextureTransform::default())
|
||||
.cloned();
|
||||
|
||||
Ok(MaterialData {
|
||||
color: [255; 4],
|
||||
name: name.into(),
|
||||
|
|
@ -114,6 +120,7 @@ pub fn load_material(
|
|||
alpha_test,
|
||||
translucent: translucent | glass,
|
||||
no_cull: material.no_cull(),
|
||||
transform,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue