Konata animation test

This commit is contained in:
kp 2024-08-10 16:14:28 -05:00
parent 9010b5e821
commit 89a7084a1f
14 changed files with 1373 additions and 870 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View file

@ -19,7 +19,7 @@ out vec3 v_bitangent;
out float v_id;
const int MAX_BONES = 48;
const int MAX_BONES = 96;
uniform mat4 u_bones[MAX_BONES];
uniform int u_has_bones;

View file

@ -1,742 +1,111 @@
[04:00:32 AM] Info: Starting...
[04:12:58 PM] Info: Starting...
KP3D version 2
===============================
Copyright (C) kpworld.xyz 2018-2024
Contact me! @kp_cftsz
[04:00:32 AM] Info: Initializing SDL
[04:00:32 AM] Info: Initializing OpenGL
[04:00:32 AM] Info: OpenGL version: 4.6.0 NVIDIA 536.23
[04:00:32 AM] Info: Initializing GLEW
[04:00:32 AM] Info: Initializing SDL_mixer
[04:00:32 AM] Info: Reticulating splines...
[04:00:32 AM] Info: Ready!
[04:00:32 AM] Info: Loading script: build-cylinder.scm
[04:00:32 AM] Info: Loading script: build-stairs.scm
[04:00:32 AM] Info: Loading material resource: block.png
[04:00:32 AM] Info: Found normal map texture: materials/block_n.png
[04:00:32 AM] Info: Loading material resource: brick2.jpg
[04:00:32 AM] Info: Found normal map texture: materials/brick2_n.jpg
[04:00:32 AM] Info: Loading material resource: bricks.jpg
[04:00:32 AM] Info: Found normal map texture: materials/bricks_n.jpg
[04:00:32 AM] Info: Loading material resource: FLAT5_7.png
[04:00:32 AM] Info: Found normal map texture: materials/FLAT5_7_n.png
[04:00:32 AM] Info: Loading material resource: floor0.png
[04:00:32 AM] Info: Found normal map texture: materials/floor0_n.png
[04:00:32 AM] Info: Loading material resource: floor1.png
[04:00:32 AM] Info: Found normal map texture: materials/floor1_n.png
[04:00:32 AM] Info: Loading material resource: GRASS2.png
[04:00:32 AM] Info: Found normal map texture: materials/GRASS2_n.png
[04:00:32 AM] Info: Loading material resource: hardwood.jpg
[04:00:32 AM] Info: Found normal map texture: materials/hardwood_n.jpg
[04:00:32 AM] Info: Loading texture resource: .kp3d/banner.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/crosshair.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/empty.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/logo.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/map_grid.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/not_found.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/skybox.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/uv_test.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/water.png
[04:00:32 AM] Info: Loading texture resource: dot.png
[04:00:32 AM] Info: Loading texture resource: editor/stem.png
[04:00:32 AM] Info: Loading texture resource: logo.png
[04:00:32 AM] Info: Loading texture resource: skyboxes/sky50e2dd1d496fc.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/sky8.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/sky9.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox_11.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox_14.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox_15.jpg
[04:00:33 AM] Info: Loading texture resource: skyboxes/skybox_3.jpg
[04:00:33 AM] Info: Loading texture resource: skybox_16.jpg
[04:00:33 AM] Info: FOUND ANIMATION: seal.qc_skeleton_seal.qc_skeleton, 0
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body2: 1208
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body1: 2068
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_head: 2188
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_l: 648
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_l: 359
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_r: 636
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_r: 359
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_l: 666
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_r: 818
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper1_l: 272
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper2_l: 304
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper1_r: 272
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper2_r: 304
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body3: 1320
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body4: 1436
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body5: 1436
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_backflipper_r: 1358
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_backflipper_l: 1358
[04:00:33 AM] Info: FOUND TEXTURE: seal.png
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_head: 24
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_l: 30
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_l: 36
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_r: 30
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_r: 36
[04:00:33 AM] Info: FOUND TEXTURE: seal.png
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_l: 12
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_r: 12
[04:00:33 AM] Info: FOUND TEXTURE: seal_whiskers.png
[04:00:33 AM] Info: Map init
[04:00:33 AM] Info: Finalized mesh with 49 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:31 AM] Info: Finalized mesh with 48 batches
[04:01:31 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:37 AM] Info: Starting animation
[04:01:46 AM] Info: Finalized mesh with 54 batches
[04:01:51 AM] Info: Finalized mesh with 53 batches
[04:01:54 AM] Info: Finalized mesh with 53 batches
[04:02:07 AM] Info: Finalized mesh with 53 batches
[04:02:15 AM] Info: Finalized mesh with 53 batches
[04:02:17 AM] Info: Finalized mesh with 53 batches
[04:02:19 AM] Info: Finalized mesh with 53 batches
[04:02:38 AM] Info: Finalized mesh with 53 batches
[04:12:58 PM] Info: Initializing SDL
[04:12:58 PM] Info: Initializing OpenGL
[04:12:58 PM] Info: OpenGL version: 4.6.0 NVIDIA 536.23
[04:12:58 PM] Info: Initializing GLEW
[04:12:58 PM] Info: Initializing SDL_mixer
[04:12:58 PM] Info: Reticulating splines...
[04:12:59 PM] Info: Ready!
[04:12:59 PM] Info: Loading script: build-cylinder.scm
[04:12:59 PM] Info: Loading script: build-stairs.scm
[04:12:59 PM] Info: Loading material resource: block.png
[04:12:59 PM] Info: Found normal map texture: materials/block_n.png
[04:12:59 PM] Info: Loading material resource: brick2.jpg
[04:12:59 PM] Info: Found normal map texture: materials/brick2_n.jpg
[04:12:59 PM] Info: Loading material resource: bricks.jpg
[04:12:59 PM] Info: Found normal map texture: materials/bricks_n.jpg
[04:12:59 PM] Info: Loading material resource: FLAT5_7.png
[04:12:59 PM] Info: Found normal map texture: materials/FLAT5_7_n.png
[04:12:59 PM] Info: Loading material resource: floor0.png
[04:12:59 PM] Info: Found normal map texture: materials/floor0_n.png
[04:12:59 PM] Info: Loading material resource: floor1.png
[04:12:59 PM] Info: Found normal map texture: materials/floor1_n.png
[04:12:59 PM] Info: Loading material resource: GRASS2.png
[04:12:59 PM] Info: Found normal map texture: materials/GRASS2_n.png
[04:12:59 PM] Info: Loading material resource: hardwood.jpg
[04:12:59 PM] Info: Found normal map texture: materials/hardwood_n.jpg
[04:12:59 PM] Info: Loading texture resource: .kp3d/banner.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/crosshair.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/empty.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/logo.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/map_grid.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/not_found.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/skybox.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/uv_test.png
[04:12:59 PM] Info: Loading texture resource: .kp3d/water.png
[04:12:59 PM] Info: Loading texture resource: dot.png
[04:12:59 PM] Info: Loading texture resource: editor/stem.png
[04:12:59 PM] Info: Loading texture resource: logo.png
[04:12:59 PM] Info: Loading texture resource: skyboxes/sky50e2dd1d496fc.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/sky8.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/sky9.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/skybox.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/skybox_11.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/skybox_14.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/skybox_15.jpg
[04:12:59 PM] Info: Loading texture resource: skyboxes/skybox_3.jpg
[04:12:59 PM] Info: Loading texture resource: skybox_16.jpg
[04:12:59 PM] Info: # of bones for model konata/Konata_PistolAnimations.dae: 23
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Pelvis: 432
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine: 279
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine1: 350
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine2: 515
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine4: 132
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Neck1: 25
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Head1: 6
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Clavicle: 219
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_UpperArm: 226
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Forearm: 342
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Hand: 254
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Clavicle: 172
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_UpperArm: 208
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Forearm: 333
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Hand: 248
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Thigh: 475
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Calf: 382
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Foot: 319
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Toe0: 159
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Thigh: 490
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Calf: 359
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Foot: 304
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Toe0: 154
[04:12:59 PM] Info: # of bones for model konata/Konata_PistolAnimations.dae: 7
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine: 312
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine1: 168
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine2: 164
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine4: 154
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Neck1: 408
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Head1: 3912
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Clavicle: 14
[04:12:59 PM] Info: # of bones for model konata/Konata_PistolAnimations.dae: 8
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine2: 30
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Spine4: 26
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Neck1: 123
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_Head1: 1027
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_Clavicle: 87
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_R_UpperArm: 5
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_Clavicle: 64
[04:12:59 PM] Info: Num weights for Konatap_ARM_ValveBiped_Bip01_L_UpperArm: 3
[04:12:59 PM] Info: Map init
[04:12:59 PM] Info: Finalized mesh with 49 batches
[04:13:05 PM] Info: Starting animation
[04:13:14 PM] Info: Starting animation
[04:13:19 PM] Info: Starting animation
[04:13:26 PM] Info: Starting animation
[04:13:27 PM] Info: Starting animation
[04:13:30 PM] Info: Starting animation
[04:13:30 PM] Info: Starting animation
[04:13:31 PM] Info: Starting animation
[04:13:31 PM] Info: Starting animation
[04:13:31 PM] Info: Starting animation
[04:13:32 PM] Info: Starting animation
[04:13:32 PM] Info: Starting animation
[04:13:32 PM] Info: Starting animation
[04:13:33 PM] Info: Starting animation
[04:13:34 PM] Info: Starting animation

View file

@ -1,28 +1,30 @@
#include "KP3D_Model.h"
#include <filesystem>
#include <assimp/postprocess.h>
#include "KP3D_EventBus.h"
#include "KP3D_SystemUtils.h"
#include "KP3D_Log.h"
#include "KP3D_Time.h"
#include "KP3D_Renderer2D.h"
namespace {
#define TRANSPOSE_AI 0
using namespace kp3d;
Mat4 aimattokp3dmat(const aiMatrix4x4& in)
kp3d::Mat4 ConvertAssimpMatrix(const aiMatrix4x4& in)
{
Mat4 val;
kp3d::Mat4 mat;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
#if TRANSPOSE_AI
val.mat[i + j * 4] = in[j][i];
#else
val.mat[i + j * 4] = in[i][j];
mat.mat[i + j * 4] = in[i][j];
#endif
return val;
return mat;
}
} // namespace
@ -54,47 +56,7 @@ Model::~Model()
ErrCode Model::Load(const std::string& path, const std::string& main_texture_path)
{
return LoadModel(
path,
main_texture_path,
[&]()
{
if (!main_texture_path.empty())
{
m_textures.push_back(new Texture());
m_textures.back()->Load(main_texture_path);
}
}
);
}
ErrCode Model::LoadCached(
const std::string& path,
const std::string& main_texture_path,
std::vector<RawTexture*>& raw_texture_data,
TextureCache& texture_cache
)
{
Model* self = this;
return LoadModel(
path,
main_texture_path,
[&]()
{
KP3D_LOG_ERROR("Model::LoadCached() disabled");
// TODO: Re-enable me!
// raw_texture_data.push_back(new RawTexture(main_texture_path));
// TextureLoadEvent* event = new TextureLoadEvent(main_texture_path, raw_texture_data.size() - 1);
// event->dependent_model = self;
// EventBus::GetInstance().PublishDeferred(event);
}
);
}
void Model::AddTexture(Texture* texture)
{
m_textures.push_back(texture);
return LoadModel(path);
}
std::string Model::GetPath() const
@ -189,7 +151,7 @@ void Model::ParseSingleBone(MeshDef& def, const aiBone* bone)
if (bone_id == m_bone_info.size())
{
Mat4 offset = aimattokp3dmat(bone->mOffsetMatrix);
Mat4 offset = ConvertAssimpMatrix(bone->mOffsetMatrix);
BoneInfo bi(offset);
m_bone_info.push_back(bi);
}
@ -229,11 +191,14 @@ void Model::GetBoneTransforms(float seconds, std::vector<Mat4>& transforms)
if (!m_has_bones)
return;
const aiAnimation* animation = m_scene->mAnimations[m_animation_index];
float ticks_per_second = (float) (animation->mTicksPerSecond != 0 ? animation->mTicksPerSecond : 25.0f);
float time_in_ticks = seconds * ticks_per_second;
float animation_time_ticks = fmod(time_in_ticks, (float) animation->mDuration);
float animation_time_ticks = 0.0f;
if (m_scene->HasAnimations())
{
const aiAnimation* animation = m_scene->mAnimations[m_animation_index];
float ticks_per_second = (float)(animation->mTicksPerSecond != 0 ? animation->mTicksPerSecond : 25.0f);
float time_in_ticks = seconds * ticks_per_second;
animation_time_ticks = fmod(time_in_ticks, (float)animation->mDuration);
}
Mat4 identity;
identity.InitIdentity();
@ -251,41 +216,44 @@ void Model::ReadNodeHierarchy(float ticks, const aiNode* node, const Mat4& paren
return;
std::string node_name(node->mName.data);
Mat4 node_transformation = aimattokp3dmat(node->mTransformation);
Mat4 node_transformation = ConvertAssimpMatrix(node->mTransformation);
const aiAnimation* animation = m_scene->mAnimations[m_animation_index];
const aiNodeAnim* node_anim = FindNodeAnim(animation, node_name);
if (node_anim)
if (m_scene->HasAnimations())
{
// Interpolate scaling and generate transformation matrix
aiVector3D scaling;
CalcInterpScaling(scaling, ticks, node_anim);
Mat4 scaling_m;
scaling_m.InitScale({scaling.x, scaling.y, scaling.z});
const aiAnimation* animation = m_scene->mAnimations[m_animation_index];
const aiNodeAnim* node_anim = FindNodeAnim(animation, node_name);
if (node_anim)
{
// Interpolate scaling and generate transformation matrix
aiVector3D scaling;
CalcInterpScaling(scaling, ticks, node_anim);
Mat4 scaling_m;
scaling_m.InitScale({ scaling.x, scaling.y, scaling.z });
// Same with rotation....
aiQuaternion rotation_q;
CalcInterpRotation(rotation_q, ticks, node_anim);
Mat4 rotation_m;
rotation_m.InitIdentity();
Quaternion qt(rotation_q.x, rotation_q.y, rotation_q.z, rotation_q.w);
rotation_m = qt.ToMat4();
// Same with rotation....
aiQuaternion rotation_q;
CalcInterpRotation(rotation_q, ticks, node_anim);
Mat4 rotation_m;
rotation_m.InitIdentity();
Quaternion qt(rotation_q.x, rotation_q.y, rotation_q.z, rotation_q.w);
rotation_m = qt.ToMat4();
// And translation.
aiVector3D translation;
CalcInterpPosition(translation, ticks, node_anim);
Mat4 translation_m;
translation_m.InitTranslation({translation.x, translation.y, translation.z});
// And translation.
aiVector3D translation;
CalcInterpPosition(translation, ticks, node_anim);
Mat4 translation_m;
translation_m.InitTranslation({ translation.x, translation.y, translation.z });
// Combine the above transformations for a complete transformation matrix
node_transformation = translation_m * rotation_m * scaling_m;
// Combine the above transformations for a complete transformation matrix
node_transformation = translation_m * rotation_m * scaling_m;
}
}
Mat4 global_transformation = parent_transform * node_transformation;
if (m_bone_name_to_index_map.count(node_name))
{
Mat4 git = aimattokp3dmat(m_global_inverse_transform);
Mat4 git = ConvertAssimpMatrix(m_global_inverse_transform);
uint bone_idx = m_bone_name_to_index_map[node_name];
m_bone_info[bone_idx].final_transformation = git * global_transformation * m_bone_info[bone_idx].offset_matrix;
@ -414,31 +382,17 @@ const aiNodeAnim* Model::FindNodeAnim(const aiAnimation* animation, const std::s
return nullptr;
}
ErrCode Model::LoadModel(const std::string& path, const std::string& main_texture_path, std::function<void(void)> load_textures)
ErrCode Model::LoadModel(const std::string& path)
{
std::string kp3d_path = sys::GetModelDir() + path;
m_path = path;
// Quick reset
m_meshes.clear();
m_textures.clear();
m_vertices = 0;
m_faces = 0;
// Run the texture loading routine (this can vary based on how we've decided to load the model)
//if (load_textures)
// load_textures();
// TODO: Retarded busy-waiting, fix whenever I restructure this
//
// Another consideration: Do we even need to do this if it's using the texture cache? I mean we can do this busy-waiting as a
// fallback and just load whatever textures are in the store by default, because the way the editor/games work is that ALL
// textures in textures/, including textures/tex3d/ (where model textures go) are loaded in one go
//
//while (!m_textures.size())
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
std::string parent_dir = kp3d_path.substr(0, kp3d_path.find_last_of("/\\"));
m_scene = m_importer.ReadFile(
@ -452,17 +406,12 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
m_global_inverse_transform = m_scene->mRootNode->mTransformation;
m_global_inverse_transform = m_scene->mRootNode->mTransformation.Inverse();
// exit(1);
// TODO: Go through the scene's material information and try to grab diffuse, AO, normal map, etc. textures...
if (m_scene->HasAnimations())
{
for (size_t i = 0; i < m_scene->mNumAnimations; i++)
{
std::string name(m_scene->mAnimations[i]->mName.C_Str());
m_animation_map.emplace(name, i);
KP3D_LOG_INFO("FOUND ANIMATION: {}, {}", name, i);
}
}
@ -502,6 +451,7 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
if (model->HasBones())
{
KP3D_LOG_INFO("# of bones for model {}: {}", m_path, model->mNumBones);
m_has_bones = true;
def.bones.resize(def.vertices.size());
ParseBones(def, model);
@ -511,30 +461,33 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
def.base_index = m_faces * 3;
Texture* tex = nullptr,* normal_tex = nullptr;
const Texture* default_tex = &Renderer2D::GetDefaultTexture();
if (m_scene->HasMaterials())
{
aiString path;
if (!m_scene->mMaterials[model->mMaterialIndex]->GetTexture(aiTextureType_DIFFUSE, 0, &path))
{
std::string tex_path(path.C_Str());
tex_path = std::filesystem::path(tex_path).filename().string();
tex = new Texture();
tex->Load("$" + parent_dir + "/" + path.C_Str(), false, Texture::FILTER_LINEAR);
tex->Load("$" + parent_dir + "/" + tex_path, false, Texture::FILTER_LINEAR);
m_textures.push_back(tex);
KP3D_LOG_INFO("FOUND TEXTURE: {}", path.C_Str());
}
aiString normal_path;
if (!m_scene->mMaterials[model->mMaterialIndex]->GetTexture(aiTextureType_NORMALS, 0, &path))
{
std::string tex_path(path.C_Str());
tex_path = std::filesystem::path(tex_path).filename().string();
normal_tex = new Texture();
normal_tex->Load("$" + parent_dir + "/" + path.C_Str(), false, Texture::FILTER_LINEAR);
normal_tex->Load("$" + parent_dir + "/" + tex_path, false, Texture::FILTER_LINEAR);
m_normal_textures.push_back(normal_tex);
KP3D_LOG_INFO("FOUND NORMAL TEXTURE: {}", path.C_Str());
}
}
if (model->HasBones())
m->AddSkinnedBatch(tex, def.vertices, def.indices, def.bones, false, normal_tex);
m->AddSkinnedBatch(tex ? tex : default_tex, def.vertices, def.indices, def.bones, false, normal_tex);
else
m->AddIndexedBatch(tex, def.vertices, def.indices, normal_tex);
m->AddIndexedBatch(tex ? tex : default_tex, def.vertices, def.indices, normal_tex);
m->Finalize();
m_meshes.push_back(m);

View file

@ -23,15 +23,6 @@ public:
~Model();
ErrCode Load(const std::string& path, const std::string& main_texture_path = "");
// TODO: Remove this, realized I don't really need it
ErrCode LoadCached(
const std::string& path,
const std::string& main_texture_path,
std::vector<RawTexture*>& raw_texture_data,
TextureCache& texture_cache
);
void AddTexture(Texture* texture);
std::string GetPath() const;
@ -70,7 +61,7 @@ private:
void CalcInterpRotation(aiQuaternion& out, float ticks, const aiNodeAnim* node_anim);
void CalcInterpScaling(aiVector3D& out, float ticks, const aiNodeAnim* node_anim);
const aiNodeAnim* FindNodeAnim(const aiAnimation* animation, const std::string& node_name);
ErrCode LoadModel(const std::string& path, const std::string& main_texture_path, std::function<void(void)> load_textures);
ErrCode LoadModel(const std::string& path);
private:
Texture* m_main_texture;

View file

@ -10,7 +10,7 @@
#include "KP3D_Texture.h"
#define MAX_NUM_BONES_PER_VERTEX 4
#define MAX_BONES 48
#define MAX_BONES 96
namespace kp3d {

View file

@ -238,9 +238,9 @@ void Editor::Update()
#define KEY_SHORTCUT(key, action) if (sandbox->IsKeyDown(kp3d::KEY_##key)) { action; sandbox->KeyReset(kp3d::KEY_##key); }
KEY_SHORTCUT(SPACE, m_mode = MODE_NORMAL);
KEY_SHORTCUT(V, m_mode = MODE_BUILD);
KEY_SHORTCUT(T, m_mode = MODE_THINGS);
KEY_SHORTCUT(SPACE, SetMode(MODE_NORMAL));
KEY_SHORTCUT(V, SetMode(MODE_BUILD));
KEY_SHORTCUT(T, SetMode(MODE_THINGS));
KEY_SHORTCUT(Z, {
if (sandbox->IsKeyDown(kp3d::KEY_LCTRL))
Undo();
@ -252,6 +252,7 @@ void Editor::Update()
KEY_SHORTCUT(F1, sandbox->map.render_wireframe ^= 1);
KEY_SHORTCUT(F2, show_grid ^= 1);
KEY_SHORTCUT(TAB, show_selection_info ^= 1);
KEY_SHORTCUT(Q, Deselect());
switch (m_mode)
{
@ -308,6 +309,20 @@ void Editor::RebuildMap()
m_build_time = kp3d::CurrentTimeInMilliseconds().count() - start;
}
void Editor::SetMode(EditMode mode)
{
Deselect();
m_mode = mode;
}
void Editor::Deselect()
{
kp3d::editor_hovered_batch.clear();
m_selected_thing = nullptr;
points.clear();
build_has_start_pos = false;
}
void Editor::UpdateModeBuild()
{
if (sandbox->IsMouseButtonDown(kp3d::MOUSE_BUTTON_LEFT) && !build_show_options)
@ -993,18 +1008,15 @@ void Editor::RenderModeThings()
nullptr
);
editing_gizmo = ImGuizmo::IsOver();
// if (v)
{
float translation[3], rotation[3], scale[3];
ImGuizmo::DecomposeMatrixToComponents(tmp, translation, rotation, scale);
m_selected_thing->transform.translation = {translation[0], translation[1], translation[2]};
m_selected_thing->transform.rotation = {
kp3d::ToRadians(rotation[0]),
kp3d::ToRadians(rotation[1]),
kp3d::ToRadians(rotation[2])
};
m_selected_thing->transform.scale = {scale[0], scale[1], scale[2]};
}
float translation[3], rotation[3], scale[3];
ImGuizmo::DecomposeMatrixToComponents(tmp, translation, rotation, scale);
m_selected_thing->transform.translation = {translation[0], translation[1], translation[2]};
m_selected_thing->transform.rotation = {
kp3d::ToRadians(rotation[0]),
kp3d::ToRadians(rotation[1]),
kp3d::ToRadians(rotation[2])
};
m_selected_thing->transform.scale = {scale[0], scale[1], scale[2]};
}
void Editor::RenderUI()
@ -1030,9 +1042,11 @@ void Editor::RenderUI()
}
if (ImGui::BeginMenu("Mode"))
{
if (ImGui::MenuItem("Normal Mode", "Space", m_mode == MODE_NORMAL)) m_mode = MODE_NORMAL;
if (ImGui::MenuItem("Build Mode", "V", m_mode == MODE_BUILD)) m_mode = MODE_BUILD;
if (ImGui::MenuItem("Things Mode", "T", m_mode == MODE_THINGS)) m_mode = MODE_THINGS;
if (ImGui::MenuItem("Normal Mode", "Space", m_mode == MODE_NORMAL)) SetMode(MODE_NORMAL);
if (ImGui::MenuItem("Build Mode", "V", m_mode == MODE_BUILD)) SetMode(MODE_BUILD);
if (ImGui::MenuItem("Things Mode", "T", m_mode == MODE_THINGS)) SetMode(MODE_THINGS);
ImGui::Separator();
if (ImGui::MenuItem("Clear Selection", "Q")) Deselect();
ImGui::EndMenu();
}
if (ImGui::BeginMenu("View"))

View file

@ -43,6 +43,9 @@ public:
void RenderStem(kp3d::Vec3 position);
void RebuildMap();
void SetMode(EditMode mode);
void Deselect();
void UpdateModeBuild();
void RenderModeBuild();
void UpdateModeNormal();

View file

@ -20,7 +20,7 @@ Sandbox::Sandbox(const std::string& path):
kp3d::res::LoadTextures();
seal.noflip = true;
seal.Load("seal/seal.dae");
seal.Load("konata/Konata_PistolAnimations.dae");
tex.Load("logo.png");
crosshair.Load(".kp3d/crosshair.png");
@ -123,7 +123,7 @@ void Sandbox::Render()
if (m_mode == MODE_EDIT)
editor.RenderMap();
kp3d::Renderer3D::DrawBillboard(tex, {}, { 1, 1 });
kp3d::Transform trans{ {-2.0f, 0.0f, -2.0f}, {kp3d::ToRadians(-90), 0, 0}, kp3d::Vec3(0.1f)};
kp3d::Transform trans{ {0.0f, 0.0f, 0}, {kp3d::ToRadians(-90), 0, 0}, kp3d::Vec3(1.0f)};
kp3d::Renderer3D::PushShader(kp3d::Renderer3D::GetMapShader());
kp3d::Renderer3D::DrawModel(seal, trans);
kp3d::Renderer3D::PopShader();