ncca-ngl 0.3.5__py3-none-any.whl → 0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ncca/ngl/PrimData/pack_arrays.py +2 -3
- ncca/ngl/__init__.py +3 -4
- ncca/ngl/base_mesh.py +28 -20
- ncca/ngl/image.py +1 -3
- ncca/ngl/mat2.py +79 -53
- ncca/ngl/mat3.py +104 -185
- ncca/ngl/mat4.py +144 -309
- ncca/ngl/prim_data.py +42 -36
- ncca/ngl/primitives.py +2 -2
- ncca/ngl/pyside_event_handling_mixin.py +0 -108
- ncca/ngl/quaternion.py +69 -36
- ncca/ngl/shader.py +0 -116
- ncca/ngl/shader_program.py +94 -117
- ncca/ngl/texture.py +5 -2
- ncca/ngl/util.py +0 -2
- ncca/ngl/vec2.py +59 -302
- ncca/ngl/vec2_array.py +79 -28
- ncca/ngl/vec3.py +60 -350
- ncca/ngl/vec3_array.py +76 -23
- ncca/ngl/vec4.py +90 -200
- ncca/ngl/vec4_array.py +78 -27
- ncca/ngl/vector_base.py +542 -0
- ncca/ngl/webgpu/__init__.py +20 -0
- ncca/ngl/webgpu/__main__.py +640 -0
- ncca/ngl/webgpu/__main__.py.backup +640 -0
- ncca/ngl/webgpu/base_webgpu_pipeline.py +354 -0
- ncca/ngl/webgpu/custom_shader_pipeline.py +288 -0
- ncca/ngl/webgpu/instanced_geometry_pipeline.py +594 -0
- ncca/ngl/webgpu/line_pipeline.py +405 -0
- ncca/ngl/webgpu/pipeline_factory.py +190 -0
- ncca/ngl/webgpu/pipeline_shaders.py +497 -0
- ncca/ngl/webgpu/point_list_pipeline.py +349 -0
- ncca/ngl/webgpu/point_pipeline.py +336 -0
- ncca/ngl/webgpu/triangle_pipeline.py +419 -0
- ncca/ngl/webgpu/webgpu_constants.py +31 -0
- ncca/ngl/webgpu/webgpu_widget.py +322 -0
- ncca/ngl/webgpu/wip/REFACTORING_SUMMARY.md +82 -0
- ncca/ngl/webgpu/wip/UNIFIED_SYSTEM.md +314 -0
- ncca/ngl/webgpu/wip/buffer_manager.py +396 -0
- ncca/ngl/webgpu/wip/pipeline_config.py +463 -0
- ncca/ngl/webgpu/wip/shader_constants.py +328 -0
- ncca/ngl/webgpu/wip/shader_templates.py +563 -0
- ncca/ngl/webgpu/wip/unified_examples.py +390 -0
- ncca/ngl/webgpu/wip/unified_factory.py +449 -0
- ncca/ngl/webgpu/wip/unified_pipeline.py +469 -0
- ncca/ngl/widgets/__init__.py +18 -2
- ncca/ngl/widgets/__main__.py +2 -1
- ncca/ngl/widgets/lookatwidget.py +2 -1
- ncca/ngl/widgets/mat4widget.py +2 -2
- ncca/ngl/widgets/vec2widget.py +1 -1
- ncca/ngl/widgets/vec3widget.py +1 -0
- {ncca_ngl-0.3.5.dist-info → ncca_ngl-0.5.0.dist-info}/METADATA +3 -2
- ncca_ngl-0.5.0.dist-info/RECORD +105 -0
- ncca/ngl/widgets/transformation_widget.py +0 -299
- ncca_ngl-0.3.5.dist-info/RECORD +0 -82
- {ncca_ngl-0.3.5.dist-info → ncca_ngl-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
ncca/ngl/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
|
|
2
|
+
ncca/ngl/.ruff_cache/0.13.0/10564494386971134025,sha256=cw-J0gIy5ofUkDLcl9l1KuyGeSnM8hZtj8urcZcsVJI,1210
|
|
3
|
+
ncca/ngl/.ruff_cache/0.13.0/7783445477288392980,sha256=eeVnGNALeos37aECRfh4CHPcV_ubWjMAfxMhg3IId5c,82
|
|
4
|
+
ncca/ngl/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
|
|
5
|
+
ncca/ngl/PrimData/NGLDebug.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
ncca/ngl/PrimData/Primitives.npz,sha256=8viufkX_FyT6afB4ZJR_ikv3D3tBG6IuHIXBdw0nE0o,15016264
|
|
7
|
+
ncca/ngl/PrimData/buddah.npy,sha256=D9fBmoqKJdynSqPq9_AWFlGIGFb983G8ZCfvUQogXkk,9600128
|
|
8
|
+
ncca/ngl/PrimData/bunny.npy,sha256=URHm_8eGdFjIzosEbYxVYr-YeQyuAz7fq-V0Ake4mcg,6688064
|
|
9
|
+
ncca/ngl/PrimData/cube.npy,sha256=2_Bim6hRXw0ocfylM9IZHotQbg4-4zIBd_L6Qy83kQM,1280
|
|
10
|
+
ncca/ngl/PrimData/dodecahedron.npy,sha256=o7SI6Thh1Gt_ngS3CUs7oNjKGAXF7KB6K1rXYiX_O7k,3584
|
|
11
|
+
ncca/ngl/PrimData/dragon.npy,sha256=ZVYY3wNlAzcdnycHgrEQNAaQE3uTadTqKNqP4me-Bsk,9600128
|
|
12
|
+
ncca/ngl/PrimData/football.npy,sha256=AQY4VU6ci2ipinNcaBkL1Z6fi5wWsZTzrw8Lk41LX6k,11264
|
|
13
|
+
ncca/ngl/PrimData/icosahedron.npy,sha256=z5CRCy7KMbOUiIOx54Wc8n0CvLlA0F1TIASoFThfb2w,2048
|
|
14
|
+
ncca/ngl/PrimData/octahedron.npy,sha256=Y9qEzBMFGeoB554Jl08zGQQg6NGs_J0ErhZXMQrTE8Q,896
|
|
15
|
+
ncca/ngl/PrimData/pack_arrays.py,sha256=CYUmnS8rfKY0wDyTl9uyVIRRxXzYkal8YlZpx4B332E,299
|
|
16
|
+
ncca/ngl/PrimData/teapot.npy,sha256=fiOfYtB5SkegO7uTSitpjl_HmnS_iIy0sXAGfxCXXjY,1350560
|
|
17
|
+
ncca/ngl/PrimData/tetrahedron.npy,sha256=_KCSpflFXhYB4gGVxFmF5Cv6pQyPHuUlCj9xfL2oyEM,512
|
|
18
|
+
ncca/ngl/PrimData/troll.npy,sha256=ohgGgxLCJrmsFdNrlfRY2Rg9eJgcmvArf6IAspO2BKA,3505280
|
|
19
|
+
ncca/ngl/__init__.py,sha256=t0EdoLVwrOFEEzN7nMo3iArOG3D2o-ZbZt4caXUNR7g,2705
|
|
20
|
+
ncca/ngl/abstract_vao.py,sha256=fi7-BIfw1jefcXe09Qj2gGmnqqA9kzJK-hAwfG14Hrc,2068
|
|
21
|
+
ncca/ngl/base_mesh.py,sha256=ZhpOuUguqHH0HiQw-QGMa91iIMl4GkwS7k6fe_zw1Pc,6053
|
|
22
|
+
ncca/ngl/base_mesh.pyi,sha256=kobLuNnCSZlRRobIgVopQaS7Bjg0tJ3m4M64WXt5I-M,173
|
|
23
|
+
ncca/ngl/bbox.py,sha256=PylB6ju_bkdDUqQkzO1n2E-jsmxiviNkyBLY-sN59n8,6578
|
|
24
|
+
ncca/ngl/bezier_curve.py,sha256=A0aidWJ7c8Bh2KGCgCJ7aH8c8MakP8xrFFEFvCjva38,2297
|
|
25
|
+
ncca/ngl/first_person_camera.py,sha256=IUIdiy17bMnx7Z210bH9Hr5D0RKvq_3lQs7tPt_7WJ0,6104
|
|
26
|
+
ncca/ngl/image.py,sha256=NcQuHB2VAdG3QCErwU68IPc3bPF-LNlbmdkk-j8BFVQ,2646
|
|
27
|
+
ncca/ngl/log.py,sha256=b7l-XNJIpP36VqcCGXBV_0XT5Nkd5eyuC7043lWegcw,1282
|
|
28
|
+
ncca/ngl/mat2.py,sha256=YuLAk8pmOCZzyg7QPyZ0YbRRvUvlGpDvAVykdX5a0Pc,4752
|
|
29
|
+
ncca/ngl/mat3.py,sha256=ik0d7vJWEgOioVXxJHZBluR4XleYiM9PR6OiWUmdavA,9736
|
|
30
|
+
ncca/ngl/mat4.py,sha256=dc2QB59vl_DRkJSoOb-0E5SEzQQ3sdiNMT256nMjrEw,8055
|
|
31
|
+
ncca/ngl/multi_buffer_vao.py,sha256=cuNE6gSrqkNcYvfIOYOZp4MVnpCvChUgnzsf7b60pWg,1752
|
|
32
|
+
ncca/ngl/obj.py,sha256=AGldNouHrkrDs2UhATClGkgo4dzr6lzArR4YeCxQKmo,13667
|
|
33
|
+
ncca/ngl/plane.py,sha256=96WuGzexYKhoeRVevGP2pZcustt9fzyyAjuwJHT25tk,1299
|
|
34
|
+
ncca/ngl/prim_data.py,sha256=FPoIHz5IsI0VcvFGxyCORhWE2TJqGtv0pWnhdbU-Pi4,19518
|
|
35
|
+
ncca/ngl/primitives.py,sha256=Gsu17UgFyT9adJnLJXhzrCzU5Aw6YqYVtQD5XbNHCY0,4828
|
|
36
|
+
ncca/ngl/pyside_event_handling_mixin.py,sha256=rZeeJy4PNVXaedt4X_tE5WGj8Q-iLr3StAq7pdcQR6U,6895
|
|
37
|
+
ncca/ngl/quaternion.py,sha256=5ImlTYQBAtKmrmiedMoaHG9Qc7tLu2nLecpATAN4lho,6771
|
|
38
|
+
ncca/ngl/random.py,sha256=wX1R2rMpb76TP4rk44NUp5XoVuMisH9d-eBG5kFBZsM,5579
|
|
39
|
+
ncca/ngl/shader.py,sha256=wfobb49jrkNO0NusvQQAMO6PluBQqNjnccR7yF9j_ns,3315
|
|
40
|
+
ncca/ngl/shader_lib.py,sha256=YmF3EJM9roTEt5OI5sHonAVN_ydIseyiOUBFZTX4KdA,18627
|
|
41
|
+
ncca/ngl/shader_program.py,sha256=V_y968mSUZU3XDBX_8IxjturBS2-rM0wO49KfIbz3QY,33325
|
|
42
|
+
ncca/ngl/shaders/checker_fragment.glsl,sha256=FGReGg5l_l9QfGyfdXeOQg5i9KCqw3qpKEJ5H0TAW8Q,640
|
|
43
|
+
ncca/ngl/shaders/checker_vertex.glsl,sha256=Xb3SYKs9iSkw1ejtfttrBrTDTgfdlBy2hVcxrUXIzos,411
|
|
44
|
+
ncca/ngl/shaders/colour_fragment.glsl,sha256=Y8CeWyDyQAK7u3-rQhURO6Ee3ibturZR3B75e5vcb2U,118
|
|
45
|
+
ncca/ngl/shaders/colour_vertex.glsl,sha256=MZTFp0KIeiMEi6XPFScxp6I-enpr4wX2Cx8LYmaBnC8,154
|
|
46
|
+
ncca/ngl/shaders/diffuse_fragment.glsl,sha256=vkKJ9R683yk5OlyUGUwdoqrLyOsvFz3CjZS-wRCuzaY,615
|
|
47
|
+
ncca/ngl/shaders/diffuse_vertex.glsl,sha256=j1t1Zv5iky0gsBG0HOQGOix6qyj09RHo7c_irMMJZHo,621
|
|
48
|
+
ncca/ngl/shaders/text_fragment.glsl,sha256=1jrKOSl5EjJOFonWdgj7dNiQtzFSbZy1QaZrUwUidNQ,220
|
|
49
|
+
ncca/ngl/shaders/text_geometry.glsl,sha256=OTLdn4pdZj2BOMh33rE6JBfQ9SHQ1L1e8qn3Hl3YV6w,1015
|
|
50
|
+
ncca/ngl/shaders/text_vertex.glsl,sha256=uPym1x87SJOd0E3zPN1Fx44warJ6IYfvhzPQEtLOO3w,289
|
|
51
|
+
ncca/ngl/simple_index_vao.py,sha256=1IVy1WQH4V8_viZbRoIMbDRJsiH7iAhw0GEWUV9KpAU,2338
|
|
52
|
+
ncca/ngl/simple_vao.py,sha256=jfU2O3yliaM6iWNvfcRbjQ6o2_IVSPrOR3GthDiul6Q,1419
|
|
53
|
+
ncca/ngl/text.py,sha256=yWNfKHnuWn0bxbwhW1H-EkRZ7bEM9DAyjES16cxTnME,13608
|
|
54
|
+
ncca/ngl/texture.py,sha256=GEAOAOV-nEEccc_t7YVByok9smxzqRrmXKyzzBwvFBo,2473
|
|
55
|
+
ncca/ngl/transform.py,sha256=_PibgtFoU_exfvQUWucmts0WF5OreSTNbftvSa3zT8g,2938
|
|
56
|
+
ncca/ngl/util.py,sha256=ljJyaMMMr1iFUnJa42Qr5md6Jq2Up7Rn7BitdwDBmRs,4616
|
|
57
|
+
ncca/ngl/vao_factory.py,sha256=v87VfrUMaoqcsE-CS9kM7h5Fyk_e0LGl_iA6xqaomPg,930
|
|
58
|
+
ncca/ngl/vec2.py,sha256=anhrK8Ac-GZLdaAbHmrXBiLnZx-eQj9NsfOFK-X5Z-I,3292
|
|
59
|
+
ncca/ngl/vec2_array.py,sha256=XwDrpscx82q_nlz9fP010r-89SUkxgMA6ZiWQkippeo,5425
|
|
60
|
+
ncca/ngl/vec3.py,sha256=xZ7e_Ce15rzJ9HtkOrn5z_4WhJzVHSG0H4aXqXFFXqg,3362
|
|
61
|
+
ncca/ngl/vec3_array.py,sha256=rxoyjrblzQx1pbCjGIMrHAog89oudbe3XSsp8h4H5QA,5646
|
|
62
|
+
ncca/ngl/vec4.py,sha256=Gq5_0A0MJ13AA1bmpg3qwo4LzI6hWsHexfhw-ZBL9bY,3862
|
|
63
|
+
ncca/ngl/vec4_array.py,sha256=i4B9zLgo_O55-QGjyV3tuFEx_HHZIQKYRjgEdt-co20,5567
|
|
64
|
+
ncca/ngl/vector_base.py,sha256=PezlSub-1j1SE1qV2VtkBpXWskdhZPsqP5XWvidLiOw,16784
|
|
65
|
+
ncca/ngl/webgpu/__init__.py,sha256=3V3tZ3esdVhvBfs4GyRuX_IaOkoJ7mep-LIUHyXCP1Y,511
|
|
66
|
+
ncca/ngl/webgpu/__main__.py,sha256=dafKxgGcilErhpKheQut1gwko92MNtr3NJnq2jVVGNI,24925
|
|
67
|
+
ncca/ngl/webgpu/__main__.py.backup,sha256=dafKxgGcilErhpKheQut1gwko92MNtr3NJnq2jVVGNI,24925
|
|
68
|
+
ncca/ngl/webgpu/base_webgpu_pipeline.py,sha256=DD4Bxjlg7dk4OrEIWjK_2eufp53H6Ege4A-YgVJNO40,11420
|
|
69
|
+
ncca/ngl/webgpu/custom_shader_pipeline.py,sha256=wAIYJ5nY8K5jLpMzgo3xsgq18xEs-YJNkY7pUQ8Uats,10621
|
|
70
|
+
ncca/ngl/webgpu/instanced_geometry_pipeline.py,sha256=7n2uwhXuOyy0zz_GbCqIn1QLWUX5l0rv8ze7pjT0-bA,23455
|
|
71
|
+
ncca/ngl/webgpu/line_pipeline.py,sha256=oXDfoB6-B1-cZ_M3r6K43XwMmRh9nFwu8YK7OISsQbo,13970
|
|
72
|
+
ncca/ngl/webgpu/pipeline_factory.py,sha256=2YU6FkxJ0-C9YWVp97rsMqpSPza0QsVVYf7Zu-kIZJk,7174
|
|
73
|
+
ncca/ngl/webgpu/pipeline_shaders.py,sha256=JW-VwM58Qx3BbOPT2y40FJAB4MNOcr6r7cdkLovQvKs,15382
|
|
74
|
+
ncca/ngl/webgpu/point_list_pipeline.py,sha256=yZ1_v7QUJgHPP-2eIZ-o0eLI5Jh19741ux92Lr1qdlQ,12120
|
|
75
|
+
ncca/ngl/webgpu/point_pipeline.py,sha256=u8DT_PjOONhBU2kCFYK00EGf-om-AFgQyA_d_egjzcY,12208
|
|
76
|
+
ncca/ngl/webgpu/triangle_pipeline.py,sha256=Sx_HAznveXONNR93WWheNwcepi6aPxSb5yDLG7wHRq4,14691
|
|
77
|
+
ncca/ngl/webgpu/webgpu_constants.py,sha256=s9ssAM6cN25Jy06Xxj2EwLxqexg7pEyB4Af_ezQ6f3g,715
|
|
78
|
+
ncca/ngl/webgpu/webgpu_widget.py,sha256=B_H124q0YJ7WxeOE_C_LVtl--53XlV23R5B6CPNXQT8,11716
|
|
79
|
+
ncca/ngl/webgpu/wip/REFACTORING_SUMMARY.md,sha256=0rwWSCBTHEX11I50d_g2cJL-ZZ-579okeBGedc0Fsq0,3440
|
|
80
|
+
ncca/ngl/webgpu/wip/UNIFIED_SYSTEM.md,sha256=FrltaW0lU_ZVHxpuRqwazstAEblxNiLlAXCgkkuVaYo,8845
|
|
81
|
+
ncca/ngl/webgpu/wip/buffer_manager.py,sha256=VPKjvY_em4vGJ23wZl52XKVqvSkcwCNiKdqPDnWLYQ4,12263
|
|
82
|
+
ncca/ngl/webgpu/wip/pipeline_config.py,sha256=qeNsoL_Tzxw7EfJc5iTPMa76CCYpuzDaHzKTFUtVVkc,14017
|
|
83
|
+
ncca/ngl/webgpu/wip/shader_constants.py,sha256=rbPgwCUEcK5kq2b0i5V7sYnAXRvHfqVrWNZ2AS-HWBI,9371
|
|
84
|
+
ncca/ngl/webgpu/wip/shader_templates.py,sha256=sd_HbmOuvNgp4yVLTb7ZYmD101mLrWYJzqrf1LHLpEs,19112
|
|
85
|
+
ncca/ngl/webgpu/wip/unified_examples.py,sha256=MZFzpL9L81-oeKhq9mjwZ6JETN3gV_UCS_FQ_PxFAWM,12286
|
|
86
|
+
ncca/ngl/webgpu/wip/unified_factory.py,sha256=zV3yZmd7HDDMAfd6__UoYeRhIMc-KXpcZNTWykqnNcg,15123
|
|
87
|
+
ncca/ngl/webgpu/wip/unified_pipeline.py,sha256=uSqhg3Rg4tgWiXD3pdH0a6gBj8Mx9HZGCosOUb6N7rA,17351
|
|
88
|
+
ncca/ngl/widgets/NGLDebug.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
+
ncca/ngl/widgets/__init__.py,sha256=FSGKC1zbk22GWUbq1TpWUXOWHY5CkxwMryykbgAkbQE,713
|
|
90
|
+
ncca/ngl/widgets/__main__.py,sha256=Co0vZy-s8HW95LUdotYP2e5vR2V7R6ck-ljSxui1zgk,2760
|
|
91
|
+
ncca/ngl/widgets/glsl/phong.frag,sha256=iP-4cx0Qh7CS4tDbQmSdDX4huW3_XqleQaXdRBAiZ3A,853
|
|
92
|
+
ncca/ngl/widgets/glsl/phong.vert,sha256=3v1dZba9FTS0ly-3rtEYMTiKPGIzfezDjhu-4m4SwDY,333
|
|
93
|
+
ncca/ngl/widgets/glsl/picking.frag,sha256=372ZzBC1KME9i6lmO7yvUnio9YHp7u6wqiV2cGesTxs,100
|
|
94
|
+
ncca/ngl/widgets/glsl/picking.vert,sha256=Bbn2vZ-lk3nD8qfXfIIaxan2V85XkpWUipYRWCMXobw,128
|
|
95
|
+
ncca/ngl/widgets/lookatwidget.py,sha256=FsBTIhkd3sG2pmP-AJV941exevrbR7MZq8T-HEOrngk,3826
|
|
96
|
+
ncca/ngl/widgets/mat4widget.py,sha256=49IpjnMzIktqL68qoyYaMIxULaaTUyxIa7VdHjcgovA,206
|
|
97
|
+
ncca/ngl/widgets/rgbacolourwidget.py,sha256=dA_Ph7kTtd6ZqSvINt4qCbksMOWrsnT4TeuPfvaw4IQ,5411
|
|
98
|
+
ncca/ngl/widgets/rgbcolourwidget.py,sha256=Z5t_JNUggbCDIpT3kmBtOWXtxrMNJZJxZCBGBOjBFlI,4741
|
|
99
|
+
ncca/ngl/widgets/transformwidget.py,sha256=U5pDZN_uhtBDv0BX28J7_fa1AGg8vc8Q2uG70NsBCJY,4011
|
|
100
|
+
ncca/ngl/widgets/vec2widget.py,sha256=Usfr_vYN8FHl__CqveoJ1OpWijHo4MewS79ETZAh5DQ,4298
|
|
101
|
+
ncca/ngl/widgets/vec3widget.py,sha256=DJRBFM_0jL_RNpiKjVP4loAcAv2fr4Ul1n0T4cwzXMw,4935
|
|
102
|
+
ncca/ngl/widgets/vec4widget.py,sha256=mT7c5paDaRxn-vSv7lbffg7isyD8T-6sUxOUMqJXBZs,5631
|
|
103
|
+
ncca_ngl-0.5.0.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
104
|
+
ncca_ngl-0.5.0.dist-info/METADATA,sha256=3BcnfuoqCxm34o-seYDr7ToiZyiqTTYTjmxl8c4jc2k,1624
|
|
105
|
+
ncca_ngl-0.5.0.dist-info/RECORD,,
|
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
|
|
3
|
-
from OpenGL.GL import *
|
|
4
|
-
from PySide6.QtCore import Property, QEasingCurve, QPoint, QPropertyAnimation, Signal, Slot
|
|
5
|
-
from PySide6.QtGui import QQuaternion
|
|
6
|
-
from PySide6.QtOpenGLWidgets import QOpenGLWidget
|
|
7
|
-
from PySide6.QtWidgets import (
|
|
8
|
-
QApplication,
|
|
9
|
-
QMainWindow,
|
|
10
|
-
QTextEdit,
|
|
11
|
-
QVBoxLayout,
|
|
12
|
-
QWidget,
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
from ncca.ngl.mat4 import Mat4
|
|
16
|
-
from ncca.ngl.prim_data import PrimData, Prims
|
|
17
|
-
from ncca.ngl.quaternion import Quaternion
|
|
18
|
-
from ncca.ngl.shader_lib import ShaderLib
|
|
19
|
-
from ncca.ngl.simple_vao import SimpleVAO, VertexData
|
|
20
|
-
from ncca.ngl.transform import Transform
|
|
21
|
-
from ncca.ngl.vec3 import Vec3
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class TransformationWidget(QOpenGLWidget):
|
|
25
|
-
matrix_updated = Signal(Mat4)
|
|
26
|
-
|
|
27
|
-
def __init__(self, parent=None):
|
|
28
|
-
super().__init__(parent)
|
|
29
|
-
self.transform = Transform()
|
|
30
|
-
self.projection = Mat4()
|
|
31
|
-
self.view = Mat4()
|
|
32
|
-
self.mouse_pos = QPoint()
|
|
33
|
-
self.vao = SimpleVAO()
|
|
34
|
-
|
|
35
|
-
self.face_rotations = {
|
|
36
|
-
"front": Quaternion.from_axis_angle(Vec3(0, 1, 0), 0),
|
|
37
|
-
"back": Quaternion.from_axis_angle(Vec3(0, 1, 0), 180),
|
|
38
|
-
"left": Quaternion.from_axis_angle(Vec3(0, 1, 0), -90),
|
|
39
|
-
"right": Quaternion.from_axis_angle(Vec3(0, 1, 0), 90),
|
|
40
|
-
"top": Quaternion.from_axis_angle(Vec3(1, 0, 0), -90),
|
|
41
|
-
"bottom": Quaternion.from_axis_angle(Vec3(1, 0, 0), 90),
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
self.face_ids = {
|
|
45
|
-
1: "right",
|
|
46
|
-
2: "left",
|
|
47
|
-
3: "top",
|
|
48
|
-
4: "bottom",
|
|
49
|
-
5: "front",
|
|
50
|
-
6: "back",
|
|
51
|
-
}
|
|
52
|
-
self.picking_fbo = None
|
|
53
|
-
self.picking_texture = None
|
|
54
|
-
self.depth_texture = None
|
|
55
|
-
|
|
56
|
-
def initializeGL(self):
|
|
57
|
-
glClearColor(0.4, 0.4, 0.4, 1.0)
|
|
58
|
-
glEnable(GL_DEPTH_TEST)
|
|
59
|
-
glEnable(GL_MULTISAMPLE)
|
|
60
|
-
|
|
61
|
-
# ShaderLib.load_shader("picking", "glsl/picking.vert", "glsl/picking.frag")
|
|
62
|
-
# ShaderLib.load_shader("phong", "glsl/phong.vert", "glsl/phong.frag")
|
|
63
|
-
|
|
64
|
-
# cube_data = PrimData.primitive(Prims.CUBE)
|
|
65
|
-
# print(f"Cube data size: {cube_data.size}")
|
|
66
|
-
# print(f"Cube data shape: {cube_data.shape}")
|
|
67
|
-
# with self.vao:
|
|
68
|
-
# data = VertexData(data=cube_data, size=cube_data.size)
|
|
69
|
-
# self.vao.set_data(data)
|
|
70
|
-
# vert_data_size = 8 * 4 # 4 is sizeof float and 8 is x,y,z,nx,ny,nz,uv
|
|
71
|
-
# self.vao.set_vertex_attribute_pointer(0, 3, GL_FLOAT, vert_data_size, 0)
|
|
72
|
-
# self.vao.set_vertex_attribute_pointer(1, 3, GL_FLOAT, vert_data_size, Vec3.sizeof())
|
|
73
|
-
# self.vao.set_vertex_attribute_pointer(2, 2, GL_FLOAT, vert_data_size, 2 * Vec3.sizeof())
|
|
74
|
-
# self.vao.set_num_indices(cube_data.size // 8)
|
|
75
|
-
|
|
76
|
-
self.view.look_at(Vec3(0, 0, 3), Vec3(0, 0, 0), Vec3(0, 1, 0))
|
|
77
|
-
self.setFocus()
|
|
78
|
-
|
|
79
|
-
def resizeGL(self, w, h):
|
|
80
|
-
if h == 0:
|
|
81
|
-
h = 1
|
|
82
|
-
# self.projection.perspective(45, w / h, 0.01, 20)
|
|
83
|
-
# self._create_picking_buffer(w, h)
|
|
84
|
-
|
|
85
|
-
def paintGL(self):
|
|
86
|
-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
|
87
|
-
# if self.picking_fbo is None:
|
|
88
|
-
# self._create_picking_buffer(self.width(), self.height())
|
|
89
|
-
# self._render_picking_pass()
|
|
90
|
-
# self._render_scene_pass()
|
|
91
|
-
# self.matrix_updated.emit(self.transform.get_matrix())
|
|
92
|
-
|
|
93
|
-
def _create_picking_buffer(self, w, h):
|
|
94
|
-
if self.picking_fbo is not None:
|
|
95
|
-
glDeleteFramebuffers(1, [self.picking_fbo])
|
|
96
|
-
glDeleteTextures(1, [self.picking_texture])
|
|
97
|
-
glDeleteTextures(1, [self.depth_texture])
|
|
98
|
-
|
|
99
|
-
self.picking_fbo = glGenFramebuffers(1)
|
|
100
|
-
glBindFramebuffer(GL_FRAMEBUFFER, self.picking_fbo)
|
|
101
|
-
|
|
102
|
-
self.picking_texture = glGenTextures(1)
|
|
103
|
-
glBindTexture(GL_TEXTURE_2D, self.picking_texture)
|
|
104
|
-
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, None)
|
|
105
|
-
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, self.picking_texture, 0)
|
|
106
|
-
|
|
107
|
-
self.depth_texture = glGenTextures(1)
|
|
108
|
-
glBindTexture(GL_TEXTURE_2D, self.depth_texture)
|
|
109
|
-
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, w, h, 0, GL_DEPTH_COMPONENT, GL_FLOAT, None)
|
|
110
|
-
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, self.depth_texture, 0)
|
|
111
|
-
|
|
112
|
-
if glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE:
|
|
113
|
-
print("Framebuffer is not complete")
|
|
114
|
-
|
|
115
|
-
glBindFramebuffer(GL_FRAMEBUFFER, 0)
|
|
116
|
-
|
|
117
|
-
def _render_picking_pass(self):
|
|
118
|
-
glBindFramebuffer(GL_FRAMEBUFFER, self.picking_fbo)
|
|
119
|
-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
|
120
|
-
|
|
121
|
-
ShaderLib.use("picking")
|
|
122
|
-
mvp = self.projection @ self.view @ self.transform.get_matrix()
|
|
123
|
-
ShaderLib.set_uniform("MVP", mvp)
|
|
124
|
-
with self.vao:
|
|
125
|
-
for i, face_id in self.face_ids.items():
|
|
126
|
-
r = (i & 0x0000FF) / 255.0
|
|
127
|
-
g = ((i & 0x00FF00) >> 8) / 255.0
|
|
128
|
-
b = ((i & 0xFF0000) >> 16) / 255.0
|
|
129
|
-
ShaderLib.set_uniform("face_id", Vec3(r, g, b))
|
|
130
|
-
glDrawArrays(GL_TRIANGLES, (i - 1) * 6, 6)
|
|
131
|
-
|
|
132
|
-
glBindFramebuffer(GL_FRAMEBUFFER, 0)
|
|
133
|
-
|
|
134
|
-
def _render_scene_pass(self):
|
|
135
|
-
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
|
136
|
-
|
|
137
|
-
ShaderLib.use("phong")
|
|
138
|
-
mvp = self.projection @ self.view @ self.transform.get_matrix()
|
|
139
|
-
ShaderLib.set_uniform("MVP", mvp)
|
|
140
|
-
ShaderLib.set_uniform("model", self.transform.get_matrix())
|
|
141
|
-
ShaderLib.set_uniform("normal_matrix", self.transform.get_matrix().inverse().transpose())
|
|
142
|
-
ShaderLib.set_uniform("light_pos", Vec3(0, 0, 3))
|
|
143
|
-
ShaderLib.set_uniform("view_pos", Vec3(0, 0, 3))
|
|
144
|
-
ShaderLib.set_uniform("light_color", Vec3(1, 1, 1))
|
|
145
|
-
ShaderLib.set_uniform("object_color", Vec3(0.6, 0.6, 0.6))
|
|
146
|
-
|
|
147
|
-
with self.vao:
|
|
148
|
-
self.vao.draw()
|
|
149
|
-
|
|
150
|
-
def mousePressEvent(self, event):
|
|
151
|
-
self.mouse_pos = event.pos()
|
|
152
|
-
|
|
153
|
-
glBindFramebuffer(GL_FRAMEBUFFER, self.picking_fbo)
|
|
154
|
-
x, y = int(event.position().x()), int(self.height() - event.position().y())
|
|
155
|
-
pixel = glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE)
|
|
156
|
-
face_id = pixel[0] + (pixel[1] << 8) + (pixel[2] << 16)
|
|
157
|
-
glBindFramebuffer(GL_FRAMEBUFFER, 0)
|
|
158
|
-
|
|
159
|
-
if face_id in self.face_ids:
|
|
160
|
-
face_name = self.face_ids[face_id]
|
|
161
|
-
self.snap_to_face(face_name)
|
|
162
|
-
|
|
163
|
-
def mouseMoveEvent(self, event):
|
|
164
|
-
if event.buttons():
|
|
165
|
-
diff = event.position() - self.mouse_pos
|
|
166
|
-
self.mouse_pos = event.position()
|
|
167
|
-
|
|
168
|
-
axis = Vec3(diff.y(), diff.x(), 0)
|
|
169
|
-
angle = axis.length() * 0.5
|
|
170
|
-
if angle > 0:
|
|
171
|
-
rotation = Quaternion.from_axis_angle(axis.normalize(), angle)
|
|
172
|
-
self.transform.add_rotation(rotation)
|
|
173
|
-
self.update()
|
|
174
|
-
|
|
175
|
-
def snap_to_face(self, face_name):
|
|
176
|
-
target_rotation = self.face_rotations[face_name]
|
|
177
|
-
|
|
178
|
-
animation = QPropertyAnimation(self, b"qrotation")
|
|
179
|
-
animation.setDuration(400)
|
|
180
|
-
animation.setStartValue(self.transform.get_rotation())
|
|
181
|
-
animation.setEndValue(target_rotation)
|
|
182
|
-
animation.setEasingCurve(QEasingCurve.InOutQuad)
|
|
183
|
-
animation.start(QPropertyAnimation.DeletionPolicy.DeleteWhenStopped)
|
|
184
|
-
|
|
185
|
-
@Property(QQuaternion)
|
|
186
|
-
def qrotation(self):
|
|
187
|
-
q = self.transform.get_rotation()
|
|
188
|
-
return QQuaternion(q.w, q.x, q.y, q.z)
|
|
189
|
-
|
|
190
|
-
@qrotation.setter
|
|
191
|
-
def set_qrotation(self, rotation):
|
|
192
|
-
q = Quaternion(rotation.scalar(), rotation.x(), rotation.y(), rotation.z())
|
|
193
|
-
self.transform.set_rotation(q)
|
|
194
|
-
self.update()
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
class MainWindow(QMainWindow):
|
|
198
|
-
def __init__(self):
|
|
199
|
-
super().__init__()
|
|
200
|
-
self.setWindowTitle("3D Transformation Widget")
|
|
201
|
-
self.setGeometry(100, 100, 800, 600)
|
|
202
|
-
|
|
203
|
-
central_widget = QWidget()
|
|
204
|
-
self.setCentralWidget(central_widget)
|
|
205
|
-
layout = QVBoxLayout(central_widget)
|
|
206
|
-
|
|
207
|
-
self.gl_widget = TransformationWidget()
|
|
208
|
-
layout.addWidget(self.gl_widget, 1)
|
|
209
|
-
|
|
210
|
-
self.matrix_display = QTextEdit()
|
|
211
|
-
self.matrix_display.setReadOnly(True)
|
|
212
|
-
self.matrix_display.setFixedHeight(120)
|
|
213
|
-
layout.addWidget(self.matrix_display)
|
|
214
|
-
|
|
215
|
-
self.gl_widget.matrix_updated.connect(self.update_matrix_display)
|
|
216
|
-
|
|
217
|
-
@Slot(Mat4)
|
|
218
|
-
def update_matrix_display(self, matrix):
|
|
219
|
-
self.matrix_display.setText(str(matrix))
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
if __name__ == "__main__":
|
|
223
|
-
# We need to create some dummy shaders for this to run
|
|
224
|
-
# as the shader lib will fail otherwise.
|
|
225
|
-
import os
|
|
226
|
-
|
|
227
|
-
from PySide6.QtGui import QSurfaceFormat
|
|
228
|
-
|
|
229
|
-
if not os.path.exists("glsl"):
|
|
230
|
-
os.makedirs("glsl")
|
|
231
|
-
with open("glsl/picking.vert", "w") as f:
|
|
232
|
-
f.write("""#version 330 core
|
|
233
|
-
layout (location = 0) in vec3 aPos;
|
|
234
|
-
uniform mat4 MVP;
|
|
235
|
-
void main()
|
|
236
|
-
{
|
|
237
|
-
gl_Position = MVP * vec4(aPos, 1.0);
|
|
238
|
-
}""")
|
|
239
|
-
with open("glsl/picking.frag", "w") as f:
|
|
240
|
-
f.write("""#version 330 core
|
|
241
|
-
out vec3 FragColor;
|
|
242
|
-
uniform vec3 face_id;
|
|
243
|
-
void main()
|
|
244
|
-
{
|
|
245
|
-
FragColor = face_id;
|
|
246
|
-
}""")
|
|
247
|
-
with open("glsl/phong.vert", "w") as f:
|
|
248
|
-
f.write("""#version 330 core
|
|
249
|
-
layout (location = 0) in vec3 aPos;
|
|
250
|
-
layout (location = 1) in vec3 aNormal;
|
|
251
|
-
out vec3 FragPos;
|
|
252
|
-
out vec3 Normal;
|
|
253
|
-
uniform mat4 model;
|
|
254
|
-
uniform mat4 MVP;
|
|
255
|
-
uniform mat3 normal_matrix;
|
|
256
|
-
void main()
|
|
257
|
-
{
|
|
258
|
-
FragPos = vec3(model * vec4(aPos, 1.0));
|
|
259
|
-
Normal = normal_matrix * aNormal;
|
|
260
|
-
gl_Position = MVP * vec4(aPos, 1.0);
|
|
261
|
-
}""")
|
|
262
|
-
with open("glsl/phong.frag", "w") as f:
|
|
263
|
-
f.write("""#version 330 core
|
|
264
|
-
out vec4 FragColor;
|
|
265
|
-
in vec3 FragPos;
|
|
266
|
-
in vec3 Normal;
|
|
267
|
-
uniform vec3 light_pos;
|
|
268
|
-
uniform vec3 view_pos;
|
|
269
|
-
uniform vec3 light_color;
|
|
270
|
-
uniform vec3 object_color;
|
|
271
|
-
void main()
|
|
272
|
-
{
|
|
273
|
-
// Ambient
|
|
274
|
-
float ambient_strength = 0.1;
|
|
275
|
-
vec3 ambient = ambient_strength * light_color;
|
|
276
|
-
// Diffuse
|
|
277
|
-
vec3 norm = normalize(Normal);
|
|
278
|
-
vec3 light_dir = normalize(light_pos - FragPos);
|
|
279
|
-
float diff = max(dot(norm, light_dir), 0.0);
|
|
280
|
-
vec3 diffuse = diff * light_color;
|
|
281
|
-
// Specular
|
|
282
|
-
float specular_strength = 0.5;
|
|
283
|
-
vec3 view_dir = normalize(view_pos - FragPos);
|
|
284
|
-
vec3 reflect_dir = reflect(-light_dir, norm);
|
|
285
|
-
float spec = pow(max(dot(view_dir, reflect_dir), 0.0), 32);
|
|
286
|
-
vec3 specular = specular_strength * spec * light_color;
|
|
287
|
-
vec3 result = (ambient + diffuse + specular) * object_color;
|
|
288
|
-
FragColor = vec4(result, 1.0);
|
|
289
|
-
}""")
|
|
290
|
-
|
|
291
|
-
app = QApplication(sys.argv)
|
|
292
|
-
format = QSurfaceFormat()
|
|
293
|
-
format.setProfile(QSurfaceFormat.CoreProfile)
|
|
294
|
-
format.setVersion(4, 1)
|
|
295
|
-
QSurfaceFormat.setDefaultFormat(format)
|
|
296
|
-
|
|
297
|
-
main_win = MainWindow()
|
|
298
|
-
main_win.show()
|
|
299
|
-
sys.exit(app.exec())
|
ncca_ngl-0.3.5.dist-info/RECORD
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
ncca/ngl/.ruff_cache/.gitignore,sha256=njpg8ebsSuYCFcEdVLFxOSdF7CXp3e1DPVvZITY68xY,35
|
|
2
|
-
ncca/ngl/.ruff_cache/0.13.0/10564494386971134025,sha256=cw-J0gIy5ofUkDLcl9l1KuyGeSnM8hZtj8urcZcsVJI,1210
|
|
3
|
-
ncca/ngl/.ruff_cache/0.13.0/7783445477288392980,sha256=eeVnGNALeos37aECRfh4CHPcV_ubWjMAfxMhg3IId5c,82
|
|
4
|
-
ncca/ngl/.ruff_cache/CACHEDIR.TAG,sha256=WVMVbX4MVkpCclExbq8m-IcOZIOuIZf5FrYw5Pk-Ma4,43
|
|
5
|
-
ncca/ngl/PrimData/NGLDebug.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
ncca/ngl/PrimData/Primitives.npz,sha256=8viufkX_FyT6afB4ZJR_ikv3D3tBG6IuHIXBdw0nE0o,15016264
|
|
7
|
-
ncca/ngl/PrimData/buddah.npy,sha256=D9fBmoqKJdynSqPq9_AWFlGIGFb983G8ZCfvUQogXkk,9600128
|
|
8
|
-
ncca/ngl/PrimData/bunny.npy,sha256=URHm_8eGdFjIzosEbYxVYr-YeQyuAz7fq-V0Ake4mcg,6688064
|
|
9
|
-
ncca/ngl/PrimData/cube.npy,sha256=2_Bim6hRXw0ocfylM9IZHotQbg4-4zIBd_L6Qy83kQM,1280
|
|
10
|
-
ncca/ngl/PrimData/dodecahedron.npy,sha256=o7SI6Thh1Gt_ngS3CUs7oNjKGAXF7KB6K1rXYiX_O7k,3584
|
|
11
|
-
ncca/ngl/PrimData/dragon.npy,sha256=ZVYY3wNlAzcdnycHgrEQNAaQE3uTadTqKNqP4me-Bsk,9600128
|
|
12
|
-
ncca/ngl/PrimData/football.npy,sha256=AQY4VU6ci2ipinNcaBkL1Z6fi5wWsZTzrw8Lk41LX6k,11264
|
|
13
|
-
ncca/ngl/PrimData/icosahedron.npy,sha256=z5CRCy7KMbOUiIOx54Wc8n0CvLlA0F1TIASoFThfb2w,2048
|
|
14
|
-
ncca/ngl/PrimData/octahedron.npy,sha256=Y9qEzBMFGeoB554Jl08zGQQg6NGs_J0ErhZXMQrTE8Q,896
|
|
15
|
-
ncca/ngl/PrimData/pack_arrays.py,sha256=aWShJX8QPHXKTj66C8yu1DskmD3VEzFXyaADcxw6YKs,362
|
|
16
|
-
ncca/ngl/PrimData/teapot.npy,sha256=fiOfYtB5SkegO7uTSitpjl_HmnS_iIy0sXAGfxCXXjY,1350560
|
|
17
|
-
ncca/ngl/PrimData/tetrahedron.npy,sha256=_KCSpflFXhYB4gGVxFmF5Cv6pQyPHuUlCj9xfL2oyEM,512
|
|
18
|
-
ncca/ngl/PrimData/troll.npy,sha256=ohgGgxLCJrmsFdNrlfRY2Rg9eJgcmvArf6IAspO2BKA,3505280
|
|
19
|
-
ncca/ngl/__init__.py,sha256=2zCMEMQLSZNeWUTY1i7GnRZqhmerPy1F220NoFPfJB0,2640
|
|
20
|
-
ncca/ngl/abstract_vao.py,sha256=fi7-BIfw1jefcXe09Qj2gGmnqqA9kzJK-hAwfG14Hrc,2068
|
|
21
|
-
ncca/ngl/base_mesh.py,sha256=2JmVT5_bvgLHra1VnwRld-mh-20IqqekgEu1dbGU1a4,5736
|
|
22
|
-
ncca/ngl/base_mesh.pyi,sha256=kobLuNnCSZlRRobIgVopQaS7Bjg0tJ3m4M64WXt5I-M,173
|
|
23
|
-
ncca/ngl/bbox.py,sha256=PylB6ju_bkdDUqQkzO1n2E-jsmxiviNkyBLY-sN59n8,6578
|
|
24
|
-
ncca/ngl/bezier_curve.py,sha256=A0aidWJ7c8Bh2KGCgCJ7aH8c8MakP8xrFFEFvCjva38,2297
|
|
25
|
-
ncca/ngl/first_person_camera.py,sha256=IUIdiy17bMnx7Z210bH9Hr5D0RKvq_3lQs7tPt_7WJ0,6104
|
|
26
|
-
ncca/ngl/image.py,sha256=zpG8egzXWkUJKQxpRhXndpRxJDKOKHZkDjQuKSRXN2E,2692
|
|
27
|
-
ncca/ngl/log.py,sha256=b7l-XNJIpP36VqcCGXBV_0XT5Nkd5eyuC7043lWegcw,1282
|
|
28
|
-
ncca/ngl/mat2.py,sha256=kHyrxLWQ_zGBf5t6huKL6BDrjF5a1skU_9PpcyMFi0I,3710
|
|
29
|
-
ncca/ngl/mat3.py,sha256=k4kD9a5QqamxZZbnSECe4p0kQdVM6bEj5VaUBAf5AOs,12355
|
|
30
|
-
ncca/ngl/mat4.py,sha256=i6ZKnMpwJdh8ULTjcnWKPo9UK39ulU4WeUdoet4yZAE,17574
|
|
31
|
-
ncca/ngl/multi_buffer_vao.py,sha256=cuNE6gSrqkNcYvfIOYOZp4MVnpCvChUgnzsf7b60pWg,1752
|
|
32
|
-
ncca/ngl/obj.py,sha256=AGldNouHrkrDs2UhATClGkgo4dzr6lzArR4YeCxQKmo,13667
|
|
33
|
-
ncca/ngl/plane.py,sha256=96WuGzexYKhoeRVevGP2pZcustt9fzyyAjuwJHT25tk,1299
|
|
34
|
-
ncca/ngl/prim_data.py,sha256=Ji08CdnCJP4KPYEwh5P_NcltC76rPfNPx3MXgnkUW-E,19114
|
|
35
|
-
ncca/ngl/primitives.py,sha256=pThdSWLv7jJa9weBVOXhRgTfVVH54AWCbsDFCEI1YLg,4841
|
|
36
|
-
ncca/ngl/pyside_event_handling_mixin.py,sha256=L8obXeTp-g2Va2eXyd1hnmSp-sY7p4GX6EcFYRnH1F4,10588
|
|
37
|
-
ncca/ngl/quaternion.py,sha256=sKCoHTzKyN-rx-A4q_eAz_4yLWjFcNYS8H8ay6eCBeA,5868
|
|
38
|
-
ncca/ngl/random.py,sha256=wX1R2rMpb76TP4rk44NUp5XoVuMisH9d-eBG5kFBZsM,5579
|
|
39
|
-
ncca/ngl/shader.py,sha256=fEz8R_itsQssIxQp1E8-PhY3aOaTdm7sXpyFYoARSic,7696
|
|
40
|
-
ncca/ngl/shader_lib.py,sha256=YmF3EJM9roTEt5OI5sHonAVN_ydIseyiOUBFZTX4KdA,18627
|
|
41
|
-
ncca/ngl/shader_program.py,sha256=WNEUOl4N4giC6caC0uMXm5ikDUtzCuZl7dqZl4M7p6k,33655
|
|
42
|
-
ncca/ngl/shaders/checker_fragment.glsl,sha256=FGReGg5l_l9QfGyfdXeOQg5i9KCqw3qpKEJ5H0TAW8Q,640
|
|
43
|
-
ncca/ngl/shaders/checker_vertex.glsl,sha256=Xb3SYKs9iSkw1ejtfttrBrTDTgfdlBy2hVcxrUXIzos,411
|
|
44
|
-
ncca/ngl/shaders/colour_fragment.glsl,sha256=Y8CeWyDyQAK7u3-rQhURO6Ee3ibturZR3B75e5vcb2U,118
|
|
45
|
-
ncca/ngl/shaders/colour_vertex.glsl,sha256=MZTFp0KIeiMEi6XPFScxp6I-enpr4wX2Cx8LYmaBnC8,154
|
|
46
|
-
ncca/ngl/shaders/diffuse_fragment.glsl,sha256=vkKJ9R683yk5OlyUGUwdoqrLyOsvFz3CjZS-wRCuzaY,615
|
|
47
|
-
ncca/ngl/shaders/diffuse_vertex.glsl,sha256=j1t1Zv5iky0gsBG0HOQGOix6qyj09RHo7c_irMMJZHo,621
|
|
48
|
-
ncca/ngl/shaders/text_fragment.glsl,sha256=1jrKOSl5EjJOFonWdgj7dNiQtzFSbZy1QaZrUwUidNQ,220
|
|
49
|
-
ncca/ngl/shaders/text_geometry.glsl,sha256=OTLdn4pdZj2BOMh33rE6JBfQ9SHQ1L1e8qn3Hl3YV6w,1015
|
|
50
|
-
ncca/ngl/shaders/text_vertex.glsl,sha256=uPym1x87SJOd0E3zPN1Fx44warJ6IYfvhzPQEtLOO3w,289
|
|
51
|
-
ncca/ngl/simple_index_vao.py,sha256=1IVy1WQH4V8_viZbRoIMbDRJsiH7iAhw0GEWUV9KpAU,2338
|
|
52
|
-
ncca/ngl/simple_vao.py,sha256=jfU2O3yliaM6iWNvfcRbjQ6o2_IVSPrOR3GthDiul6Q,1419
|
|
53
|
-
ncca/ngl/text.py,sha256=yWNfKHnuWn0bxbwhW1H-EkRZ7bEM9DAyjES16cxTnME,13608
|
|
54
|
-
ncca/ngl/texture.py,sha256=OgBBEItgUDohCsVWgmjEWcQWBJaXl9w070PTOOywPx4,2303
|
|
55
|
-
ncca/ngl/transform.py,sha256=_PibgtFoU_exfvQUWucmts0WF5OreSTNbftvSa3zT8g,2938
|
|
56
|
-
ncca/ngl/util.py,sha256=HAr_Xgj7r48OY3m3xP5HBZgyDFHQwv4qwffguViP3Cw,4618
|
|
57
|
-
ncca/ngl/vao_factory.py,sha256=v87VfrUMaoqcsE-CS9kM7h5Fyk_e0LGl_iA6xqaomPg,930
|
|
58
|
-
ncca/ngl/vec2.py,sha256=4Obw_CK5uwdG9LkAVR6zBV9MkTyD-GE4AwpfaLcGLZ0,10531
|
|
59
|
-
ncca/ngl/vec2_array.py,sha256=7QRgXh75fORsmNnSnNxNQWk6_rnDgfmRX3tmJZ4ES9E,3420
|
|
60
|
-
ncca/ngl/vec3.py,sha256=2i-QXJ-VlhLw60WlGRf3mUv5zyOa1DQBkSV6oATiXLI,12578
|
|
61
|
-
ncca/ngl/vec3_array.py,sha256=fLRC8k0TwcaU7CnR2GmJ0prud4dcvvUX0JTbQH_2W3Y,3535
|
|
62
|
-
ncca/ngl/vec4.py,sha256=81kFd3rDFTw4caKzRz9EzZ-tQzAcWv_1JGx0CKTfujQ,7079
|
|
63
|
-
ncca/ngl/vec4_array.py,sha256=PSJXfG0g2AT4oQCLHiVAP6EC5n7vMXRQy0N1rGvv1iw,3426
|
|
64
|
-
ncca/ngl/widgets/NGLDebug.log,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
-
ncca/ngl/widgets/__init__.py,sha256=KBrwCwgDLIl-eAp0Q5HQcmNkfZ9q6waPC_4A8-g9PG0,413
|
|
66
|
-
ncca/ngl/widgets/__main__.py,sha256=EetuulVqYJV7zxxFXunb12XA6boza7vm5Raayj3UeMI,2729
|
|
67
|
-
ncca/ngl/widgets/glsl/phong.frag,sha256=iP-4cx0Qh7CS4tDbQmSdDX4huW3_XqleQaXdRBAiZ3A,853
|
|
68
|
-
ncca/ngl/widgets/glsl/phong.vert,sha256=3v1dZba9FTS0ly-3rtEYMTiKPGIzfezDjhu-4m4SwDY,333
|
|
69
|
-
ncca/ngl/widgets/glsl/picking.frag,sha256=372ZzBC1KME9i6lmO7yvUnio9YHp7u6wqiV2cGesTxs,100
|
|
70
|
-
ncca/ngl/widgets/glsl/picking.vert,sha256=Bbn2vZ-lk3nD8qfXfIIaxan2V85XkpWUipYRWCMXobw,128
|
|
71
|
-
ncca/ngl/widgets/lookatwidget.py,sha256=A2OS4Bsp5nLKFk3EfrTrnAlk7LNUWX_TEseyGpeT9hI,3803
|
|
72
|
-
ncca/ngl/widgets/mat4widget.py,sha256=7vXs5h2EtA6zy3rTpXd8dtlOg2CFeQHlrg4a4F1RMak,202
|
|
73
|
-
ncca/ngl/widgets/rgbacolourwidget.py,sha256=dA_Ph7kTtd6ZqSvINt4qCbksMOWrsnT4TeuPfvaw4IQ,5411
|
|
74
|
-
ncca/ngl/widgets/rgbcolourwidget.py,sha256=Z5t_JNUggbCDIpT3kmBtOWXtxrMNJZJxZCBGBOjBFlI,4741
|
|
75
|
-
ncca/ngl/widgets/transformation_widget.py,sha256=qeEYXKEwUVdWBKz3oXiW6kbTm-MyXghoh0rfU7J3yAE,10568
|
|
76
|
-
ncca/ngl/widgets/transformwidget.py,sha256=U5pDZN_uhtBDv0BX28J7_fa1AGg8vc8Q2uG70NsBCJY,4011
|
|
77
|
-
ncca/ngl/widgets/vec2widget.py,sha256=w4GqwuiNewc2UI5PrSn6ZZYEaB_cxkpxGgrpMQ82WsM,4330
|
|
78
|
-
ncca/ngl/widgets/vec3widget.py,sha256=PnmqdQ1j77v0PQC-p4lT3mTQd_Qi2Iwv9XzSP1Mpa7M,4934
|
|
79
|
-
ncca/ngl/widgets/vec4widget.py,sha256=mT7c5paDaRxn-vSv7lbffg7isyD8T-6sUxOUMqJXBZs,5631
|
|
80
|
-
ncca_ngl-0.3.5.dist-info/WHEEL,sha256=eh7sammvW2TypMMMGKgsM83HyA_3qQ5Lgg3ynoecH3M,79
|
|
81
|
-
ncca_ngl-0.3.5.dist-info/METADATA,sha256=ypLb9CnfpTInsKt3q9g76OVDrccixIEzKOHhly8ibkY,1596
|
|
82
|
-
ncca_ngl-0.3.5.dist-info/RECORD,,
|
|
File without changes
|