partial collision

This commit is contained in:
Zack Buhman 2025-12-04 19:26:04 -06:00
parent 1224a6e1ad
commit 916041667b
16 changed files with 5711 additions and 5457 deletions

View File

@ -103,6 +103,7 @@ MAIN_OBJS = \
src/glad.o \
src/opengl.o \
src/render.o \
src/collision.o \
$(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \
$(patsubst %.data,%.data.o,$(wildcard src/level/*.data)) \
$(patsubst %.data.pal,%.data.pal.o,$(wildcard src/level/*.data.pal)) \

Binary file not shown.

Binary file not shown.

6
include/collision.hpp Normal file
View File

@ -0,0 +1,6 @@
#pragma once
#include "math/float_types.hpp"
vec4 collision(mat4x4 trans,
vec3 point, vec3 velocity);

File diff suppressed because it is too large Load Diff

View File

@ -2,296 +2,296 @@
# www.blender.org
mtllib block.mtl
o Cube
v 0.728013 0.440923 -0.381697
v 0.644238 0.452916 -0.461143
v 0.622394 0.500000 -0.343897
v 0.709167 0.454219 -0.412896
v 0.701099 0.469791 -0.369685
v 0.690111 0.474526 -0.398518
v 0.637305 0.475900 -0.427367
v 0.678710 0.458580 -0.441779
v 0.669937 0.476518 -0.416845
v 0.662611 0.491320 -0.355910
v 0.629327 0.493098 -0.384544
v 0.664788 0.486997 -0.389481
v -0.728013 0.440923 -0.381697
v -0.622394 0.500000 -0.343897
v -0.644238 0.452916 -0.461143
v -0.701099 0.469791 -0.369685
v -0.709167 0.454219 -0.412896
v -0.690111 0.474526 -0.398518
v -0.629326 0.493098 -0.384544
v -0.662611 0.491320 -0.355910
v -0.664788 0.486997 -0.389481
v -0.678710 0.458580 -0.441780
v -0.637305 0.475900 -0.427367
v -0.669937 0.476518 -0.416845
v 0.728013 0.440923 0.381697
v 0.622394 0.500000 0.343897
v 0.644238 0.452916 0.461143
v 0.701099 0.469791 0.369685
v 0.709167 0.454219 0.412896
v 0.690111 0.474526 0.398518
v 0.629326 0.493098 0.384544
v 0.662611 0.491320 0.355910
v 0.664788 0.486997 0.389481
v 0.678710 0.458580 0.441780
v 0.637305 0.475900 0.427367
v 0.669937 0.476518 0.416845
v -0.644238 0.452916 0.461143
v -0.622394 0.500000 0.343897
v -0.728013 0.440923 0.381697
v -0.637305 0.475900 0.427367
v -0.678710 0.458580 0.441779
v -0.669937 0.476518 0.416845
v -0.662611 0.491320 0.355910
v -0.629327 0.493098 0.384544
v -0.664788 0.486997 0.389481
v -0.709167 0.454219 0.412896
v -0.701099 0.469791 0.369685
v -0.690111 0.474526 0.398518
v 0.887658 -0.000000 -0.857357
v 0.871802 0.049732 -0.877005
v 0.890004 0.006663 -0.885957
v 0.884201 0.024866 -0.893148
v 0.902222 0.000000 -0.828995
v 0.948146 0.050904 -0.783980
v 0.935700 0.006820 -0.825706
v 0.952510 0.025452 -0.809229
v 0.893715 -0.000000 -0.855422
v 0.910149 0.049848 -0.864452
v 0.912263 0.006678 -0.878805
v 0.918278 0.024924 -0.882110
v 0.897222 -0.000000 -0.851240
v 0.938053 0.050306 -0.830395
v 0.928072 0.006740 -0.859850
v 0.943017 0.025153 -0.852220
v -0.902222 -0.000000 -0.828995
v -0.948146 0.050904 -0.783980
v -0.935700 0.006820 -0.825706
v -0.952510 0.025452 -0.809229
v -0.887658 0.000000 -0.857357
v -0.871802 0.049732 -0.877005
v -0.890004 0.006663 -0.885957
v -0.884201 0.024866 -0.893148
v -0.897222 0.000000 -0.851240
v -0.938053 0.050306 -0.830395
v -0.928072 0.006740 -0.859850
v -0.943017 0.025153 -0.852220
v -0.893715 0.000000 -0.855422
v -0.910149 0.049848 -0.864452
v -0.912263 0.006678 -0.878805
v -0.918278 0.024924 -0.882110
v 0.902222 -0.000000 0.828995
v 0.948146 0.050904 0.783980
v 0.935700 0.006820 0.825706
v 0.952510 0.025452 0.809229
v 0.887658 0.000000 0.857357
v 0.871802 0.049732 0.877005
v 0.890004 0.006663 0.885957
v 0.884201 0.024866 0.893148
v 0.897222 0.000000 0.851240
v 0.938053 0.050306 0.830395
v 0.928072 0.006740 0.859850
v 0.943017 0.025153 0.852220
v 0.893715 0.000000 0.855422
v 0.910149 0.049848 0.864452
v 0.912263 0.006678 0.878805
v 0.918278 0.024924 0.882110
v -0.887658 -0.000000 0.857357
v -0.871802 0.049732 0.877005
v -0.890004 0.006663 0.885957
v -0.884201 0.024866 0.893148
v -0.902222 0.000000 0.828995
v -0.948146 0.050904 0.783980
v -0.935700 0.006820 0.825706
v -0.952510 0.025452 0.809229
v -0.893715 -0.000000 0.855422
v -0.910149 0.049848 0.864452
v -0.912263 0.006678 0.878805
v -0.918278 0.024924 0.882110
v -0.897222 -0.000000 0.851240
v -0.938053 0.050306 0.830395
v -0.928072 0.006740 0.859850
v -0.943017 0.025153 0.852220
v 1.456025 0.440923 -0.381697
v 1.288476 0.452916 -0.461143
v 1.244787 0.500000 -0.343897
v 1.418335 0.454219 -0.412896
v 1.402199 0.469791 -0.369685
v 1.380222 0.474526 -0.398518
v 1.274610 0.475900 -0.427367
v 1.357419 0.458580 -0.441779
v 1.339874 0.476518 -0.416845
v 1.325221 0.491320 -0.355910
v 1.258653 0.493098 -0.384544
v 1.329576 0.486997 -0.389481
v -1.456025 0.440923 -0.381697
v -1.244787 0.500000 -0.343897
v -1.288476 0.452916 -0.461143
v -1.402199 0.469791 -0.369685
v -1.418335 0.454219 -0.412896
v -1.380222 0.474526 -0.398518
v -1.258653 0.493098 -0.384544
v -1.325221 0.491320 -0.355910
v -1.329576 0.486997 -0.389481
v -1.357419 0.458580 -0.441780
v -1.274610 0.475900 -0.427367
v -1.339874 0.476518 -0.416845
v 1.456025 0.440923 0.381697
v 1.244787 0.500000 0.343897
v 1.288476 0.452916 0.461143
v 1.402199 0.469791 0.369685
v 1.418335 0.454219 0.412896
v 1.380222 0.474526 0.398518
v 1.258653 0.493098 0.384544
v 1.325221 0.491320 0.355910
v 1.329576 0.486997 0.389481
v 1.357419 0.458580 0.441780
v 1.274610 0.475900 0.427367
v 1.339874 0.476518 0.416845
v -1.288476 0.452916 0.461143
v -1.244787 0.500000 0.343897
v -1.456025 0.440923 0.381697
v -1.274610 0.475900 0.427367
v -1.357419 0.458580 0.441779
v -1.339874 0.476518 0.416845
v -1.325221 0.491320 0.355910
v -1.258653 0.493098 0.384544
v -1.329576 0.486997 0.389481
v -1.418335 0.454219 0.412896
v -1.402199 0.469791 0.369685
v -1.380222 0.474526 0.398518
v 1.775316 -0.000000 -0.857357
v 1.743604 0.049732 -0.877005
v 1.780008 0.006663 -0.885957
v 1.768401 0.024866 -0.893148
v 1.804443 0.000000 -0.828995
v 1.896293 0.050904 -0.783980
v 1.871401 0.006820 -0.825706
v 1.905020 0.025452 -0.809229
v 1.787430 -0.000000 -0.855422
v 1.820297 0.049848 -0.864452
v 1.824526 0.006678 -0.878805
v 1.836557 0.024924 -0.882110
v 1.794445 -0.000000 -0.851240
v 1.876107 0.050306 -0.830395
v 1.856144 0.006740 -0.859850
v 1.886035 0.025153 -0.852220
v -1.804443 -0.000000 -0.828995
v -1.896293 0.050904 -0.783980
v -1.871401 0.006820 -0.825706
v -1.905020 0.025452 -0.809229
v -1.775316 0.000000 -0.857357
v -1.743604 0.049732 -0.877005
v -1.780008 0.006663 -0.885957
v -1.768401 0.024866 -0.893148
v -1.794445 0.000000 -0.851240
v -1.876107 0.050306 -0.830395
v -1.856144 0.006740 -0.859850
v -1.886035 0.025153 -0.852220
v -1.787430 0.000000 -0.855422
v -1.820297 0.049848 -0.864452
v -1.824526 0.006678 -0.878805
v -1.836557 0.024924 -0.882110
v 1.804443 -0.000000 0.828995
v 1.896293 0.050904 0.783980
v 1.871401 0.006820 0.825706
v 1.905020 0.025452 0.809229
v 1.775316 0.000000 0.857357
v 1.743604 0.049732 0.877005
v 1.780008 0.006663 0.885957
v 1.768401 0.024866 0.893148
v 1.794445 0.000000 0.851240
v 1.876107 0.050306 0.830395
v 1.856144 0.006740 0.859850
v 1.886035 0.025153 0.852220
v 1.787430 0.000000 0.855422
v 1.820297 0.049848 0.864452
v 1.824526 0.006678 0.878805
v 1.836557 0.024924 0.882110
v -1.775316 -0.000000 0.857357
v -1.743604 0.049732 0.877005
v -1.780008 0.006663 0.885957
v -1.768401 0.024866 0.893148
v -1.804443 0.000000 0.828995
v -1.896293 0.050904 0.783980
v -1.871401 0.006820 0.825706
v -1.905020 0.025452 0.809229
v -1.787430 -0.000000 0.855422
v -1.820297 0.049848 0.864452
v -1.824526 0.006678 0.878805
v -1.836557 0.024924 0.882110
v -1.794445 -0.000000 0.851240
v -1.876107 0.050306 0.830395
v -1.856144 0.006740 0.859850
v -1.886035 0.025153 0.852220
vn -0.0000 -1.0000 -0.0000
vn 0.7680 0.6161 -0.1749
vn 0.5160 0.7394 0.4325
vn -0.2198 0.7587 -0.6133
vn 0.5143 0.8250 -0.2343
vn 0.2884 0.8265 0.4834
vn -0.1120 0.7728 -0.6247
vn -0.0000 1.0000 -0.0000
vn 0.6999 0.7036 -0.1229
vn 0.4765 0.7600 -0.4419
vn 0.1624 0.8309 -0.5321
vn 0.0922 0.9356 -0.3409
vn 0.1698 0.9759 -0.1368
vn 0.4635 0.8821 -0.0835
vn 0.3422 0.8972 -0.2792
vn -0.6999 0.7036 -0.1229
vn -0.4364 0.8996 -0.0186
vn -0.1698 0.9759 -0.1368
vn -0.1108 0.9292 -0.3525
vn -0.1624 0.8309 -0.5321
vn -0.4841 0.7821 -0.3924
vn -0.3422 0.8972 -0.2792
vn 0.6999 0.7036 0.1229
vn 0.4364 0.8996 0.0186
vn 0.1698 0.9759 0.1368
vn 0.1108 0.9292 0.3525
vn 0.1624 0.8309 0.5321
vn 0.4841 0.7821 0.3924
vn 0.3422 0.8972 0.2792
vn -0.1624 0.8309 0.5321
vn -0.0922 0.9356 0.3409
vn -0.1698 0.9759 0.1368
vn -0.4635 0.8821 0.0835
vn -0.6999 0.7036 0.1229
vn -0.4765 0.7600 0.4419
vn -0.3422 0.8972 0.2792
vn 0.7314 0.6819 -0.0000
vn 0.4882 0.8728 -0.0000
vn 0.2110 0.9775 -0.0000
vn 0.4400 0.8846 -0.1545
vn 0.2616 0.8344 -0.4852
vn 0.0820 0.8393 -0.5375
vn 0.0463 0.9386 -0.3420
vn 0.0858 0.9867 -0.1383
vn 0.2530 0.9631 -0.0912
vn 0.1791 0.9394 -0.2923
vn -0.4400 0.8846 -0.1545
vn -0.2357 0.9716 -0.0201
vn -0.0858 0.9867 -0.1383
vn -0.0557 0.9335 -0.3542
vn -0.0820 0.8393 -0.5375
vn -0.2666 0.8615 -0.4322
vn -0.1791 0.9394 -0.2923
vn 0.4400 0.8846 0.1545
vn 0.2357 0.9716 0.0201
vn 0.0858 0.9867 0.1383
vn 0.0557 0.9335 0.3542
vn 0.0820 0.8393 0.5375
vn 0.2666 0.8615 0.4322
vn 0.1791 0.9394 0.2923
vn -0.0820 0.8393 0.5375
vn -0.0463 0.9386 0.3420
vn -0.0858 0.9867 0.1383
vn -0.2530 0.9631 0.0912
vn -0.4400 0.8846 0.1545
vn -0.2616 0.8344 0.4852
vn -0.1791 0.9394 0.2923
vn 0.4726 0.8813 -0.0000
vn 0.2693 0.9630 -0.0000
vn 0.1073 0.9942 -0.0000
vn -0.0000 0.8267 0.5626
vn -0.0000 0.9280 0.3727
vn -0.0000 0.9859 0.1674
vn -0.7314 0.6819 -0.0000
vn -0.4882 0.8728 -0.0000
vn -0.2110 0.9775 -0.0000
vn -0.4726 0.8813 -0.0000
vn -0.2693 0.9630 -0.0000
vn -0.1073 0.9942 -0.0000
vn -0.0000 0.8267 -0.5626
vn -0.0000 0.9280 -0.3727
vn -0.0000 0.9859 -0.1674
vn -0.5160 0.7394 0.4325
vn -0.7572 0.6246 0.1912
vn -0.2884 0.8265 0.4834
vn -0.5015 0.8273 0.2532
vn -0.0000 0.7180 0.6961
vn -0.2198 0.7587 0.6133
vn 0.2198 0.7587 0.6133
vn -0.5160 0.7394 -0.4325
vn 0.7572 0.6246 0.1912
vn -0.8709 0.4915 -0.0000
vn -0.1120 0.7728 0.6247
vn 0.1120 0.7728 0.6247
vn -0.2884 0.8265 -0.4834
vn 0.5015 0.8273 0.2532
vn -0.6631 0.7485 -0.0000
vn -0.0000 0.7180 -0.6961
vn -0.7572 0.6246 -0.1912
vn 0.8709 0.4915 -0.0000
vn 0.5158 0.7394 -0.4326
vn -0.2035 -0.9781 0.0432
vn -0.8026 -0.5709 0.1732
vn -0.9116 0.3575 0.2028
vn -0.1734 -0.9746 0.1415
vn -0.7254 -0.3411 0.5978
vn -0.6279 0.5771 0.5222
vn -0.0717 -0.9726 0.2209
vn -0.2952 -0.2637 0.9183
vn -0.2427 0.6123 0.7525
vn 0.0706 -0.9728 0.2208
vn 0.2974 -0.2673 0.9166
vn 0.2447 0.6108 0.7530
vn 0.1706 -0.9749 0.1431
vn 0.7210 -0.3464 0.6002
vn 0.6276 0.5759 0.5239
vn 0.2012 -0.9785 0.0452
vn 0.7988 -0.5750 0.1771
vn 0.9117 0.3568 0.2038
vn -0.0706 -0.9728 -0.2208
vn -0.2974 -0.2673 -0.9166
vn -0.2447 0.6108 -0.7530
vn -0.1706 -0.9749 -0.1431
vn -0.7210 -0.3464 -0.6002
vn -0.6276 0.5759 -0.5239
vn -0.2012 -0.9785 -0.0452
vn -0.7988 -0.5750 -0.1771
vn -0.9117 0.3568 -0.2038
vn 0.0717 -0.9726 -0.2209
vn 0.2952 -0.2637 -0.9183
vn 0.2427 0.6123 -0.7525
vn 0.1734 -0.9746 -0.1415
vn 0.7254 -0.3411 -0.5978
vn 0.6279 0.5771 -0.5222
vn 0.2035 -0.9781 -0.0432
vn 0.8026 -0.5709 -0.1732
vn 0.9116 0.3575 -0.2028
vn 0.1996 -0.9799 -0.0000
vn 0.7425 -0.6699 -0.0000
vn 0.9856 0.1690 -0.0000
vn -0.5015 0.8273 -0.2532
vn 0.6631 0.7485 -0.0000
vn 0.2883 0.8265 -0.4835
vn -0.1034 -0.9937 0.0439
vn -0.5581 -0.7940 0.2410
vn -0.7426 0.5825 0.3305
vn -0.0877 -0.9858 0.1431
vn -0.4662 -0.4384 0.7684
vn -0.3741 0.6876 0.6223
vn -0.0359 -0.9745 0.2214
vn -0.1527 -0.2728 0.9499
vn -0.1241 0.6263 0.7697
vn 0.0353 -0.9746 0.2213
vn 0.1539 -0.2766 0.9486
vn 0.1252 0.6250 0.7705
vn 0.0863 -0.9857 0.1447
vn 0.4615 -0.4435 0.7684
vn 0.3739 0.6861 0.6241
vn 0.1021 -0.9937 0.0459
vn 0.5531 -0.7962 0.2453
vn 0.7428 0.5813 0.3321
vn -0.0353 -0.9746 -0.2213
vn -0.1539 -0.2766 -0.9486
vn -0.1252 0.6250 -0.7705
vn -0.0863 -0.9857 -0.1447
vn -0.4615 -0.4435 -0.7684
vn -0.3739 0.6861 -0.6241
vn -0.1021 -0.9937 -0.0459
vn -0.5531 -0.7962 -0.2453
vn -0.7428 0.5813 -0.3321
vn 0.0359 -0.9745 -0.2214
vn 0.1527 -0.2728 -0.9499
vn 0.1241 0.6263 -0.7697
vn 0.0877 -0.9858 -0.1431
vn 0.4662 -0.4384 -0.7684
vn 0.3741 0.6876 -0.6223
vn 0.1034 -0.9937 -0.0439
vn 0.5581 -0.7940 -0.2410
vn 0.7426 0.5825 -0.3305
vn 0.1013 -0.9949 -0.0000
vn 0.4847 -0.8747 -0.0000
vn 0.9459 0.3244 -0.0000
vn -0.0000 -0.9739 -0.2269
vn -0.0000 -0.3674 -0.9300
vn -0.0000 0.5445 -0.8387
vn -0.1996 -0.9799 -0.0000
vn -0.7425 -0.6699 -0.0000
vn -0.9856 0.1690 -0.0000
vn -0.1013 -0.9949 -0.0000
vn -0.4847 -0.8747 -0.0000
vn -0.9459 0.3244 -0.0000
vn -0.0000 -0.9739 0.2269
vn -0.0000 -0.3674 0.9300
vn -0.0000 0.5445 0.8387
vn 0.2016 0.7561 -0.6227
vn 0.7572 0.6246 -0.1912
vn 0.5158 0.7394 0.4326
vn -0.2016 0.7561 -0.6227
vn 0.6722 0.7276 -0.1367
vn 0.4841 0.7821 -0.3924
vn 0.1583 0.8271 -0.5393
vn 0.1108 0.9292 -0.3525
vn 0.1526 0.9814 -0.1165
vn 0.4364 0.8996 -0.0186
vn -0.6722 0.7276 -0.1367
vn -0.4635 0.8821 -0.0835
vn -0.1526 0.9814 -0.1165
vn -0.0922 0.9356 -0.3409
vn -0.1583 0.8271 -0.5393
vn -0.4765 0.7600 -0.4419
vn 0.6722 0.7276 0.1367
vn 0.4635 0.8821 0.0835
vn 0.1526 0.9814 0.1165
vn 0.0922 0.9356 0.3409
vn 0.1583 0.8271 0.5393
vn 0.4765 0.7600 0.4419
vn -0.1583 0.8271 0.5393
vn -0.1108 0.9292 0.3525
vn -0.1526 0.9814 0.1165
vn -0.4364 0.8996 0.0186
vn -0.6722 0.7276 0.1367
vn -0.4841 0.7821 0.3924
vn -0.5158 0.7394 0.4326
vn -0.7680 0.6161 0.1749
vn -0.2016 0.7561 0.6227
vn 0.2016 0.7561 0.6227
vn -0.5158 0.7394 -0.4326
vn 0.7680 0.6161 0.1749
vn -0.7680 0.6161 -0.1749
vn 0.5160 0.7394 -0.4325
vn -0.2012 -0.9785 0.0452
vn -0.7988 -0.5749 0.1771
vn -0.9117 0.3568 0.2038
vn -0.1706 -0.9749 0.1431
vn -0.7210 -0.3464 0.6002
vn -0.6276 0.5759 0.5239
vn -0.0706 -0.9728 0.2208
vn -0.2974 -0.2673 0.9166
vn -0.2447 0.6108 0.7530
vn 0.0717 -0.9726 0.2209
vn 0.2952 -0.2637 0.9183
vn 0.2427 0.6123 0.7525
vn 0.1734 -0.9746 0.1415
vn 0.7254 -0.3411 0.5978
vn 0.6279 0.5771 0.5222
vn 0.2035 -0.9781 0.0432
vn 0.8026 -0.5709 0.1732
vn 0.9116 0.3575 0.2028
vn -0.0717 -0.9726 -0.2209
vn -0.2952 -0.2637 -0.9183
vn -0.2427 0.6123 -0.7525
vn -0.1734 -0.9746 -0.1415
vn -0.7254 -0.3411 -0.5978
vn -0.6279 0.5771 -0.5222
vn -0.2035 -0.9781 -0.0432
vn -0.8026 -0.5709 -0.1732
vn -0.9116 0.3575 -0.2028
vn 0.0706 -0.9728 -0.2208
vn 0.2974 -0.2673 -0.9166
vn 0.2447 0.6108 -0.7530
vn 0.1706 -0.9749 -0.1431
vn 0.7210 -0.3464 -0.6002
vn 0.6276 0.5759 -0.5239
vn 0.2012 -0.9785 -0.0452
vn 0.7988 -0.5749 -0.1771
vn 0.9117 0.3568 -0.2038
vn 0.2198 0.7587 -0.6133
vn 0.1024 0.7678 -0.6324
vn 0.5015 0.8273 -0.2532
vn 0.2883 0.8265 0.4835
vn -0.1024 0.7678 -0.6324
vn 0.4134 0.8949 -0.1681
vn 0.2666 0.8615 -0.4322
vn 0.0799 0.8350 -0.5445
vn 0.0557 0.9335 -0.3542
vn 0.0770 0.9901 -0.1175
vn 0.2357 0.9716 -0.0201
vn -0.4134 0.8949 -0.1681
vn -0.2530 0.9631 -0.0912
vn -0.0770 0.9901 -0.1175
vn -0.0463 0.9386 -0.3420
vn -0.0799 0.8350 -0.5445
vn -0.2616 0.8344 -0.4852
vn 0.4134 0.8949 0.1681
vn 0.2530 0.9631 0.0912
vn 0.0770 0.9901 0.1175
vn 0.0463 0.9386 0.3420
vn 0.0799 0.8350 0.5445
vn 0.2616 0.8344 0.4852
vn -0.0799 0.8350 0.5445
vn -0.0557 0.9335 0.3542
vn -0.0770 0.9901 0.1175
vn -0.2357 0.9716 0.0201
vn -0.4134 0.8949 0.1681
vn -0.2666 0.8615 0.4322
vn -0.2883 0.8265 0.4835
vn -0.5143 0.8250 0.2343
vn -0.1024 0.7678 0.6324
vn 0.1024 0.7678 0.6324
vn -0.2883 0.8265 -0.4835
vn 0.5143 0.8250 0.2343
vn -0.5143 0.8250 -0.2343
vn 0.2884 0.8265 -0.4834
vn -0.1021 -0.9937 0.0459
vn -0.5531 -0.7962 0.2453
vn -0.7428 0.5813 0.3321
vn -0.0863 -0.9857 0.1447
vn -0.4615 -0.4435 0.7684
vn -0.3739 0.6861 0.6241
vn -0.0353 -0.9746 0.2212
vn -0.1539 -0.2766 0.9486
vn -0.1252 0.6250 0.7705
vn 0.0359 -0.9745 0.2214
vn 0.1527 -0.2728 0.9499
vn 0.1241 0.6263 0.7697
vn 0.0877 -0.9858 0.1431
vn 0.4662 -0.4384 0.7684
vn 0.3741 0.6876 0.6223
vn 0.1034 -0.9937 0.0439
vn 0.5581 -0.7940 0.2410
vn 0.7426 0.5825 0.3305
vn -0.0359 -0.9745 -0.2214
vn -0.1527 -0.2728 -0.9499
vn -0.1241 0.6263 -0.7697
vn -0.0877 -0.9858 -0.1431
vn -0.4662 -0.4384 -0.7684
vn -0.3741 0.6876 -0.6223
vn -0.1034 -0.9937 -0.0439
vn -0.5581 -0.7940 -0.2410
vn -0.7426 0.5825 -0.3305
vn 0.0353 -0.9746 -0.2212
vn 0.1539 -0.2766 -0.9486
vn 0.1252 0.6250 -0.7705
vn 0.0863 -0.9857 -0.1447
vn 0.4615 -0.4435 -0.7684
vn 0.3739 0.6861 -0.6241
vn 0.1021 -0.9937 -0.0459
vn 0.5531 -0.7962 -0.2453
vn 0.7428 0.5813 -0.3321
vn 0.1120 0.7728 -0.6247
vt 0.044995 0.962648
vt 0.962429 0.947171
vt 0.955005 0.037352

View File

@ -18,30 +18,30 @@ const int cube_Cube_triangles[] = {
const int cube_Cube_triangles_length = (sizeof (cube_Cube_triangles)) / (sizeof (cube_Cube_triangles[0]));
const float cube_vertices[] = {
-1.000000f, 1.000000f, 1.000000f, 0.625000f, 0.000000f, -1.0000f, -0.0000f, -0.0000f,
-1.000000f, -1.000000f, -1.000000f, 0.375000f, 0.250000f, -1.0000f, -0.0000f, -0.0000f,
-1.000000f, -1.000000f, 1.000000f, 0.375000f, 0.000000f, -1.0000f, -0.0000f, -0.0000f,
-1.000000f, 1.000000f, -1.000000f, 0.625000f, 0.250000f, -0.0000f, -0.0000f, -1.0000f,
1.000000f, -1.000000f, -1.000000f, 0.375000f, 0.500000f, -0.0000f, -0.0000f, -1.0000f,
-1.000000f, -1.000000f, -1.000000f, 0.375000f, 0.250000f, -0.0000f, -0.0000f, -1.0000f,
1.000000f, 1.000000f, -1.000000f, 0.625000f, 0.500000f, 1.0000f, -0.0000f, -0.0000f,
1.000000f, -1.000000f, 1.000000f, 0.375000f, 0.750000f, 1.0000f, -0.0000f, -0.0000f,
1.000000f, -1.000000f, -1.000000f, 0.375000f, 0.500000f, 1.0000f, -0.0000f, -0.0000f,
1.000000f, 1.000000f, 1.000000f, 0.625000f, 0.750000f, -0.0000f, -0.0000f, 1.0000f,
-1.000000f, -1.000000f, 1.000000f, 0.375000f, 1.000000f, -0.0000f, -0.0000f, 1.0000f,
1.000000f, -1.000000f, 1.000000f, 0.375000f, 0.750000f, -0.0000f, -0.0000f, 1.0000f,
1.000000f, -1.000000f, -1.000000f, 0.375000f, 0.500000f, -0.0000f, -1.0000f, -0.0000f,
-1.000000f, -1.000000f, 1.000000f, 0.125000f, 0.750000f, -0.0000f, -1.0000f, -0.0000f,
-1.000000f, -1.000000f, -1.000000f, 0.125000f, 0.500000f, -0.0000f, -1.0000f, -0.0000f,
-1.000000f, 1.000000f, -1.000000f, 0.875000f, 0.500000f, -0.0000f, 1.0000f, -0.0000f,
1.000000f, 1.000000f, 1.000000f, 0.625000f, 0.750000f, -0.0000f, 1.0000f, -0.0000f,
1.000000f, 1.000000f, -1.000000f, 0.625000f, 0.500000f, -0.0000f, 1.0000f, -0.0000f,
-1.000000f, 1.000000f, -1.000000f, 0.625000f, 0.250000f, -1.0000f, -0.0000f, -0.0000f,
1.000000f, 1.000000f, -1.000000f, 0.625000f, 0.500000f, -0.0000f, -0.0000f, -1.0000f,
1.000000f, 1.000000f, 1.000000f, 0.625000f, 0.750000f, 1.0000f, -0.0000f, -0.0000f,
-1.000000f, 1.000000f, 1.000000f, 0.625000f, 1.000000f, -0.0000f, -0.0000f, 1.0000f,
1.000000f, -1.000000f, 1.000000f, 0.375000f, 0.750000f, -0.0000f, -1.0000f, -0.0000f,
-1.000000f, 1.000000f, 1.000000f, 0.875000f, 0.750000f, -0.0000f, 1.0000f, -0.0000f,
-2.000000f, 1.000000f, 1.000000f, 0.625000f, 0.000000f, -1.0000f, -0.0000f, -0.0000f,
-2.000000f, -1.000000f, -1.000000f, 0.375000f, 0.250000f, -1.0000f, -0.0000f, -0.0000f,
-2.000000f, -1.000000f, 1.000000f, 0.375000f, 0.000000f, -1.0000f, -0.0000f, -0.0000f,
-2.000000f, 1.000000f, -1.000000f, 0.625000f, 0.250000f, -0.0000f, -0.0000f, -1.0000f,
2.000000f, -1.000000f, -1.000000f, 0.375000f, 0.500000f, -0.0000f, -0.0000f, -1.0000f,
-2.000000f, -1.000000f, -1.000000f, 0.375000f, 0.250000f, -0.0000f, -0.0000f, -1.0000f,
2.000000f, 1.000000f, -1.000000f, 0.625000f, 0.500000f, 1.0000f, -0.0000f, -0.0000f,
2.000000f, -1.000000f, 1.000000f, 0.375000f, 0.750000f, 1.0000f, -0.0000f, -0.0000f,
2.000000f, -1.000000f, -1.000000f, 0.375000f, 0.500000f, 1.0000f, -0.0000f, -0.0000f,
2.000000f, 1.000000f, 1.000000f, 0.625000f, 0.750000f, -0.0000f, -0.0000f, 1.0000f,
-2.000000f, -1.000000f, 1.000000f, 0.375000f, 1.000000f, -0.0000f, -0.0000f, 1.0000f,
2.000000f, -1.000000f, 1.000000f, 0.375000f, 0.750000f, -0.0000f, -0.0000f, 1.0000f,
2.000000f, -1.000000f, -1.000000f, 0.375000f, 0.500000f, -0.0000f, -1.0000f, -0.0000f,
-2.000000f, -1.000000f, 1.000000f, 0.125000f, 0.750000f, -0.0000f, -1.0000f, -0.0000f,
-2.000000f, -1.000000f, -1.000000f, 0.125000f, 0.500000f, -0.0000f, -1.0000f, -0.0000f,
-2.000000f, 1.000000f, -1.000000f, 0.875000f, 0.500000f, -0.0000f, 1.0000f, -0.0000f,
2.000000f, 1.000000f, 1.000000f, 0.625000f, 0.750000f, -0.0000f, 1.0000f, -0.0000f,
2.000000f, 1.000000f, -1.000000f, 0.625000f, 0.500000f, -0.0000f, 1.0000f, -0.0000f,
-2.000000f, 1.000000f, -1.000000f, 0.625000f, 0.250000f, -1.0000f, -0.0000f, -0.0000f,
2.000000f, 1.000000f, -1.000000f, 0.625000f, 0.500000f, -0.0000f, -0.0000f, -1.0000f,
2.000000f, 1.000000f, 1.000000f, 0.625000f, 0.750000f, 1.0000f, -0.0000f, -0.0000f,
-2.000000f, 1.000000f, 1.000000f, 0.625000f, 1.000000f, -0.0000f, -0.0000f, 1.0000f,
2.000000f, -1.000000f, 1.000000f, 0.375000f, 0.750000f, -0.0000f, -1.0000f, -0.0000f,
-2.000000f, 1.000000f, 1.000000f, 0.875000f, 0.750000f, -0.0000f, 1.0000f, -0.0000f,
};
const int cube_vertices_length = (sizeof (cube_vertices)) / (sizeof (cube_vertices[0]));

View File

@ -2,14 +2,14 @@
# www.blender.org
mtllib cube.mtl
o Cube
v -1.000000 -1.000000 1.000000
v -1.000000 1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v -1.000000 1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v 1.000000 1.000000 1.000000
v 1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v -2.000000 -1.000000 1.000000
v -2.000000 1.000000 1.000000
v -2.000000 -1.000000 -1.000000
v -2.000000 1.000000 -1.000000
v 2.000000 -1.000000 1.000000
v 2.000000 1.000000 1.000000
v 2.000000 -1.000000 -1.000000
v 2.000000 1.000000 -1.000000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,7 @@
#pragma once
#include "state.h"
#ifdef __cplusplus
extern "C" {
#endif
@ -22,7 +24,7 @@ extern "C" {
uint uniform_normal_trans,
uint uniform_base_color,
uint uniform_light_pos,
float paddle_x);
struct game_state * state);
#ifdef __cplusplus
}

19
include/state.h Normal file
View File

@ -0,0 +1,19 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
struct game_state {
float paddle_x;
float paddle_y;
float ball_x;
float ball_y;
float ball_dx;
float ball_dy;
};
#ifdef __cplusplus
}
#endif

View File

@ -5,5 +5,6 @@ cd include/model
python ~/model_generator2/generate_indexed_cpp2.py paddle.obj paddle > paddle.h
python ~/model_generator2/generate_indexed_cpp2.py block.obj block > block.h
python ~/model_generator2/generate_indexed_cpp2.py ball.obj ball > ball.h
python ~/model_generator2/generate_indexed_cpp2.py cube.obj cube > cube.h
rm -f *.mtl

174
src/collision.cpp Normal file
View File

@ -0,0 +1,174 @@
#include <math.h>
#include "collision.hpp"
#include "model/cube.h"
// cube_vertices
// cube_Cube_triangles
vec3 _plane_normal(vec3 a,
vec3 b,
vec3 c)
{
return normalize(cross(b - a, c - a));
}
float _plane_d(vec3 normal,
vec3 origin)
{
return -dot(normal, origin);
}
float _signed_distance(vec3 plane_normal,
float plane_d,
vec3 point)
{
return dot(point, plane_normal) + plane_d;
}
float clamp(float v,
float min,
float max)
{
if (v > max)
return max;
if (v < min)
return min;
return v;
}
vec2 _t0_t1(float signed_distance,
float r_n_dot_v)
{
if (r_n_dot_v == 0.0)
return vec2(0.0, 1.0);
else {
float t0 = (-1.0 - signed_distance) * r_n_dot_v;
float t1 = ( 1.0 - signed_distance) * r_n_dot_v;
if (t0 > t1) {
float tmp = t0;
t0 = t1;
t1 = tmp;
}
t0 = clamp(t0, 0.0, 1.0);
t1 = clamp(t0, 0.0, 1.0);
return vec2(t0, t1);
}
}
bool point_in_triangle(vec3 point,
vec3 ap,
vec3 bp,
vec3 cp)
{
vec3 ba = bp - ap;
vec3 ca = cp - ap;
vec3 vp = point - ap;
float a = dot(ba, ba);
float b = dot(ba, ca);
float c = dot(ca, ca);
float d = dot(vp, ba);
float e = dot(vp, ca);
float x = (d * c) - (e * b);
float y = (e * a) - (d * b);
float z = x + y - ((a * c) - (b * b));
return (z < 0) and not ((x < 0) or (y < 0));
}
vec2 collision_inner(vec3 plane_normal,
vec3 a, vec3 b, vec3 c,
vec3 point,
vec3 velocity)
{
vec3 plane_origin = a;
float plane_d = _plane_d(plane_normal, plane_origin);
float signed_distance = _signed_distance(plane_normal, plane_d, point);
float n_dot_v = dot(plane_normal, velocity);
float r_n_dot_v = 1.0f / n_dot_v;
//bool embedded = n_dot_v == 0.0f;
if (n_dot_v == 0.0f) {
if (fabsf(signed_distance) >= 1.0f)
return false;
}
vec2 t0_t1 = _t0_t1(signed_distance, r_n_dot_v);
float t0 = t0_t1.x;
//float t1 = t0_t1.y;
vec3 plane_intersection_point = point - plane_normal + t0 * velocity;
bool inside = point_in_triangle(plane_intersection_point, a, b, c);
float inside_f = inside ? 1.0f : 0.0f;
return vec2(inside_f, t0);
}
vec4 collision(mat4x4 trans,
vec3 point, vec3 velocity)
{
bool collision = false;
float smallest = 0.0f;
vec3 smallest_normal = vec3(0, 0, 0);
for (int i = 0; i < cube_Cube_triangles_length / 3; i++) {
const float * a = &cube_vertices[cube_Cube_triangles[i * 3 + 0] * 8];
const float * b = &cube_vertices[cube_Cube_triangles[i * 3 + 1] * 8];
const float * c = &cube_vertices[cube_Cube_triangles[i * 3 + 2] * 8];
vec3 ap = trans * vec3(a[0], a[1], a[2]);
vec3 bp = trans * vec3(b[0], b[1], b[2]);
vec3 cp = trans * vec3(c[0], c[1], c[2]);
vec3 plane_normal = _plane_normal(ap, bp, cp);
vec2 res = collision_inner(plane_normal, ap, bp, cp, point, velocity);
bool inside = res.x == 1.0f;
float t0 = res.y;
if (!inside)
continue;
if (collision == false || t0 < smallest) {
smallest = t0;
smallest_normal = plane_normal;
}
collision = true;
}
float collision_f = collision ? 1.0 : 0.0;
return vec4(smallest_normal.x,
smallest_normal.y,
smallest_normal.z,
collision_f);
}
/*
bool collision(float ball_x, float ball_y,
float ball_dx, float ball_dy)
{
const uint8_t * level = (const uint8_t *)src_level_level1_data_start;
const uint8_t * pal = (const uint8_t *)src_level_level1_data_pal_start;
for (int y = 0; y < 28; y++) {
for (int x = 0; x < 13; x++) {
char tile = level[y * 13 + x];
if (tile == 0)
continue;
//if ( (paddle_x + 1.0) >= ((float)x - 1.0)
//&& (paddle_x - 1.0) <= ((float)x + 1.0)
//&& (paddle_y + 1.0) >= ((float)y - 1.0)
//&& (paddle_y - 1.0) <= ((float)y + 1.0)) {
collision_inner(translate(vec3(x, y, 0)),
vec3(ball_x, ball_y, 0),
vec3(ball_dx, ball_dy, 0));
}
}
}
*/

View File

@ -1,5 +1,6 @@
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include "glad/glad.h"
@ -14,9 +15,9 @@
#include "model/block.h"
#include "model/paddle.h"
#include "model/ball.h"
#include "model/cube.h"
//#include "model/cube.h"
int vp_width = 2400;
int vp_width = 1600;
int vp_height = 1200;
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
@ -35,6 +36,14 @@ static const float triangle_vertex_buffer_data[] = {
};
*/
float deadzone(float n)
{
if (fabsf(n) < 0.02)
return 0.0f;
else
return n;
}
int main()
{
//////////////////////////////////////////////////////////////////////
@ -114,10 +123,18 @@ int main()
const double frame_rate = 60.0;
const double first_frame = glfwGetTime();
double last_frame = first_frame;
double frames = 0;
double frames = 1;
const char * last_gamepad_name = NULL;
float paddle_x = 0.0;
struct game_state state;
state.paddle_x = 0.0;
state.paddle_y = 26.0;
state.ball_x = 0.0;
state.ball_y = 25.0;
state.ball_dx = 0.1;
state.ball_dy = 0.1;
while(!glfwWindowShouldClose(window)) {
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
@ -130,6 +147,8 @@ int main()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float paddle_dx = 0.0;
//float paddle_dy = 0.0;
for (int i = 0; i < 16; i++) {
int present = glfwJoystickPresent(GLFW_JOYSTICK_1 + i);
int is_gamepad = glfwJoystickIsGamepad(GLFW_JOYSTICK_1 + i);
@ -142,19 +161,44 @@ int main()
printf("active gamepad: `%s`; axes: %d\n", name, count);
last_gamepad_name = name;
}
float left = axes[2] * 0.5 + 0.5;
float right = axes[5] * 0.5 + 0.5;
paddle_dx = right - left;
//state.ball_dx = deadzone(axes[0]);
//state.ball_dy = deadzone(axes[1]);
break;
}
}
float extent = 0.25;
paddle_x += paddle_dx * 0.4;
if (paddle_x < extent)
paddle_x = extent;
if (paddle_x > 12 - extent)
paddle_x = 12 - extent;
state.paddle_x += paddle_dx * 0.4;
if (state.paddle_x < extent)
state.paddle_x = extent;
if (state.paddle_x > 12 - extent)
state.paddle_x = 12 - extent;
//state.paddle_y += paddle_dy * 0.4;
if ((state.ball_x + state.ball_dx * 0.4) > 12.25f) {
state.ball_x = 12.25f;
state.ball_dx = -state.ball_dx;
} else if ((state.ball_x + state.ball_dx * 0.4) < -0.25f) {
state.ball_x = -0.25f;
state.ball_dx = -state.ball_dx;
} else {
state.ball_x += state.ball_dx * 0.4;
}
if ((state.ball_y + state.ball_dy * 0.4) > 27.0f) {
state.ball_y = 27.0f;
state.ball_dy = -state.ball_dy;
} else if ((state.ball_y + state.ball_dy * 0.4) < 0.0f) {
state.ball_y = 0.0f;
state.ball_dy = -state.ball_dy;
} else {
state.ball_y += state.ball_dy * 0.4;
}
render(paddle_mesh,
block_mesh,
@ -166,14 +210,17 @@ int main()
uniform_normal_trans,
uniform_base_color,
uniform_light_pos,
paddle_x);
&state);
glfwSwapBuffers(window);
glfwPollEvents();
double next_frame = last_frame + 1.0 / frame_rate;
last_frame = glfwGetTime();
while (next_frame - glfwGetTime() > 0) {
double delta = next_frame - glfwGetTime();
if (delta < 0)
break;
glfwWaitEventsTimeout(delta);
}
//printf("fps %f\n", frames / (glfwGetTime() - first_frame));

View File

@ -4,6 +4,7 @@
#include "glad/glad.h"
#include "collision.hpp"
#include "render.hpp"
#include "math/float_types.hpp"
#include "math/transform.hpp"
@ -57,14 +58,18 @@ mat4x4 perspective(float low1, float high1,
return m3;
}
static const float x_scale = 1.0f / 12.0f;
//static const float y_scale = 1.0f / 27.0f;
static const float y_scale = 1.0f / 12.0f;
static inline float px(float x)
{
return (x / 12.0) * 2.0 - 1.0 + 1.0f / 12.0f;
return (x * x_scale) * 2.0 - 1.0 + x_scale;
}
static inline float py(float y)
{
return (y / 27.0) * -2.0 + 1.0 - 1.0f / 27.0f;
return (y * y_scale) * -2.0 + 1.0 - y_scale;
}
/*
@ -81,13 +86,15 @@ void render(mesh paddle_mesh,
uint uniform_normal_trans,
uint uniform_base_color,
uint uniform_light_pos,
float paddle_x)
struct game_state * state)
{
static float theta = 0;
float aspect = (float)vp_height / (float)vp_width;
mat4x4 a = scale(vec3(aspect, 1.0f, 1.0f));
mat4x4 p = perspective(-1, 1, 0, 1);
mat4x4 tt = translate(vec3(-1.2f, 1.4f, 2.0f));
mat4x4 a = scale(vec3(aspect, 1.0f, 1.0f)) * p * tt * scale(0.05f);// * rotate_x(PI / 4.0f);
theta += 0.01;
@ -132,23 +139,27 @@ void render(mesh paddle_mesh,
for (int y = 0; y < 28; y++) {
for (int x = 0; x < 13; x++) {
char tile = level[y * 13 + x];
if (tile == 0)
continue;
//if (tile == 0)
//continue;
const float cs = 1.0f / 255.0f;
vec3 base_color = vec3(((float)pal[tile * 3 + 0]) * cs,
((float)pal[tile * 3 + 1]) * cs,
((float)pal[tile * 3 + 2]) * cs);
mat4x4 rx = rotate_x(PI / 2.0f);
//mat4x4 p = perspective(-1, 1, 0, 1);
mat4x4 s = scale(vec3(1.0f / 12.0f,
1.0f / 27.0f,
1.0f / 27.0f));
mat4x4 rx = rotate_x(-PI / 2.0f);
mat4x4 t = translate(vec3(x * 4.0f, -y * 2.0f, 0.0f));
mat4x4 t = translate(vec3(px(x), py(y), 0.0));
mat4x4 trans = a * t * rx;
mat4x4 trans = a * t * rx * s;
vec4 res = collision(t * rx,
vec3(state->ball_x * 4.0f, -state->ball_y * 2.0f, 0),
vec3(0, 0, 0));
bool collision = res.w == 1.0f;
if (collision) {
//vec3 normal = vec3(res.x, res.y, res.z);
base_color = vec3(1, 0, 0);
}
//mat3x3 normal_trans = transpose(inverse(submatrix(trans, 0, 0)));
mat3x3 normal_trans = submatrix(rx, 3, 3);
@ -169,16 +180,10 @@ void render(mesh paddle_mesh,
{
mat4x4 rx = rotate_y(PI / 2.0f);
mat4x4 s = scale(1.0f / 12.0f);
/*
mat4x4 s = scale(vec3(1.0f,
1.3f,
1.5f));
*/
mat4x4 t = translate(vec3(px(paddle_x), py(26), 0.0));
mat4x4 t = translate(vec3(state->paddle_x * 4.0f, -state->paddle_y * 2.0f, 0.0));
mat4x4 trans = a * t * rx * s;
mat4x4 trans = a * t * rx;
mat3x3 normal_trans = submatrix(rx, 3, 3);
//vec3 base_color = vec3(1, 1, 1);
vec3 base_color = vec3(1, 1, 1) * 0.5f;
@ -226,10 +231,9 @@ void render(mesh paddle_mesh,
{
mat4x4 rx = rotate_y(PI / 2.0f);
mat4x4 s = scale(1.0f / 27.0f);
mat4x4 t = translate(vec3(px(paddle_x), py(25), 0.0));
mat4x4 t = translate(vec3(state->ball_x * 4.0f, -state->ball_y * 2.0f, 0.0));
mat4x4 trans = a * t * rx * s;
mat4x4 trans = a * t * rx;
mat3x3 normal_trans = submatrix(rx, 3, 3);
//vec3 base_color = vec3(1, 1, 1);
vec3 base_color = vec3(1, 1, 1) * 0.5f;