Compare commits
407 Commits
61cf91f92d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c37530d999 | ||
|
|
15849c4aa2 | ||
|
|
3f57aec353 | ||
|
|
90562d2ce6 | ||
|
|
daaa8eeb01 | ||
|
|
35e6c0dfb5 | ||
|
|
6ee8932ba4 | ||
|
|
a3558cc1db | ||
|
|
2eea147f82 | ||
|
|
4dca1e7d79 | ||
|
|
0207fc942b | ||
|
|
59c2b266ef | ||
|
|
f6104c8b5d | ||
|
|
676cf5bd87 | ||
|
|
c0a0d2467e | ||
|
|
5e5d0ae116 | ||
|
|
b6ac4f8ce5 | ||
|
|
3fdfa5a0c0 | ||
|
|
fd452889ea | ||
|
|
b3030b886d | ||
|
|
b246f3ba23 | ||
|
|
27b37f17dd | ||
|
|
ffd3f48b9d | ||
|
|
dfedf5f52c | ||
|
|
dd4fe05229 | ||
|
|
0649930f7e | ||
|
|
606536c3f3 | ||
|
|
6a983ee560 | ||
|
|
d349b23a91 | ||
|
|
77c82f6e96 | ||
|
|
e5439eee54 | ||
|
|
fe3bdff7dd | ||
|
|
f1fcebd77d | ||
|
|
c47606438f | ||
|
|
ceb4dea907 | ||
|
|
1bef5baa93 | ||
|
|
2d5093eab9 | ||
|
|
1ed6ce79d1 | ||
|
|
47a2089561 | ||
|
|
9de6929b48 | ||
|
|
9779b15176 | ||
|
|
8a6f4b3e12 | ||
|
|
a4025b907f | ||
|
|
957fb39ec2 | ||
|
|
438cb71b43 | ||
|
|
d479b566b3 | ||
|
|
02556e71d3 | ||
|
|
c08cd56637 | ||
|
|
a51a963ba0 | ||
|
|
77ebfd9018 | ||
|
|
4e88f481ff | ||
|
|
f251fbb825 | ||
|
|
0c4aa1a31c | ||
|
|
83c8ce3f79 | ||
|
|
243490996f | ||
|
|
5ae1cd149c | ||
|
|
32eb08a0c1 | ||
|
|
80044acb4c | ||
|
|
6350c799db | ||
|
|
fb126ec1b0 | ||
|
|
eda56a4ac1 | ||
|
|
6032290f5e | ||
|
|
722795a45f | ||
|
|
e321cd510b | ||
|
|
297d0f478b | ||
|
|
324198eb3f | ||
|
|
4efc950a50 | ||
|
|
ad0272bff1 | ||
|
|
bdd3a53a8c | ||
|
|
cf3fa8f1ce | ||
|
|
0803d45d5c | ||
|
|
111a7519f1 | ||
|
|
90894f8008 | ||
|
|
b0c0cc3140 | ||
|
|
f5eb6cfe78 | ||
|
|
36f1e1df37 | ||
|
|
a575e428b2 | ||
|
|
f5b2e1c227 | ||
|
|
75cb2ff594 | ||
|
|
2b92b3d584 | ||
|
|
ebeb9abf11 | ||
|
|
30ad204b5e | ||
|
|
8e58e59806 | ||
|
|
b83fee3574 | ||
|
|
0ba81b2668 | ||
|
|
d3e630b423 | ||
|
|
bef33435a0 | ||
|
|
86f8f3b53f | ||
|
|
6c78be63d8 | ||
|
|
98248e6cbb | ||
|
|
b3bb7319a7 | ||
|
|
836e8e7c17 | ||
|
|
4e960026d2 | ||
|
|
83b32f6c27 | ||
|
|
93ef224bac | ||
|
|
33de761dcd | ||
|
|
99496a7e57 | ||
|
|
5f69f2f286 | ||
|
|
674654cc62 | ||
|
|
ef1737006d | ||
|
|
ada61cc4fb | ||
|
|
d19c46c25e | ||
|
|
2167808563 | ||
|
|
acbd813d9b | ||
|
|
9aa1f37dcf | ||
|
|
38d3863124 | ||
|
|
f2e324e038 | ||
|
|
f9054a1248 | ||
|
|
936b3dda9e | ||
|
|
48a85f3e70 | ||
|
|
0171c92682 | ||
|
|
93faad3ec2 | ||
|
|
0f15000cf5 | ||
|
|
2ec6a3f11c | ||
|
|
8aaab36673 | ||
|
|
77f4f50477 | ||
|
|
3a4532625e | ||
|
|
2f0894985d | ||
|
|
db527e05c2 | ||
|
|
768c10aa56 | ||
|
|
346a4ed6ad | ||
|
|
a357cd0b1c | ||
|
|
7b9eb5743d | ||
|
|
7525862909 | ||
|
|
24469ba611 | ||
|
|
23254ba7fa | ||
|
|
636e019e97 | ||
|
|
11c8461d38 | ||
|
|
9ad8fcd1c9 | ||
|
|
1fe506b568 | ||
|
|
5e57a65ea8 | ||
|
|
ab8c293cd1 | ||
|
|
4f3140dd32 | ||
|
|
245740d2a2 | ||
|
|
a924f62890 | ||
|
|
3728c5f738 | ||
|
|
aff60cf979 | ||
|
|
454b2ddfbb | ||
|
|
83d4e55871 | ||
|
|
c56db2a87d | ||
|
|
fa8f9578b5 | ||
|
|
58221df55c | ||
|
|
32ca8c29c2 | ||
|
|
572bbc9561 | ||
|
|
f9cd36f83e | ||
|
|
d7960898df | ||
|
|
7ad90524c1 | ||
|
|
98f0354f91 | ||
|
|
0e3a481e14 | ||
|
|
858c4201db | ||
|
|
b123e035d2 | ||
|
|
212993963d | ||
|
|
9560b26090 | ||
|
|
730b4d5a23 | ||
|
|
7fbcbec840 | ||
|
|
46b0f2005b | ||
|
|
0b04ffd359 | ||
|
|
030f2fb2cf | ||
|
|
b3e2cd4ac9 | ||
|
|
75b1b9f741 | ||
|
|
8532b81c36 | ||
|
|
29bed43554 | ||
|
|
40bf162ba8 | ||
|
|
1a2fbe84b9 | ||
|
|
4581bb3e37 | ||
|
|
63b99262a9 | ||
|
|
bebb802f36 | ||
|
|
048148967b | ||
|
|
5706911bde | ||
|
|
9f177bc3fd | ||
|
|
876d574eec | ||
|
|
7c2fc424b3 | ||
|
|
5aa179c8e8 | ||
|
|
70469c7904 | ||
|
|
7a17acc39e | ||
|
|
da5afe8283 | ||
|
|
fcb1fb7467 | ||
|
|
fc8ae98193 | ||
|
|
74892d028c | ||
|
|
be152900c4 | ||
|
|
fef45190f3 | ||
|
|
3ab7c627d9 | ||
|
|
85c447f825 | ||
|
|
b03e7f5571 | ||
|
|
2b1ffaf4cb | ||
|
|
d0bd061b50 | ||
|
|
f127948f49 | ||
|
|
c30c7a7b11 | ||
|
|
ac5272c2c5 | ||
|
|
aefee1de0b | ||
|
|
912eea2f3d | ||
|
|
1f534e88cf | ||
|
|
150c546fb4 | ||
|
|
18c84133b6 | ||
|
|
d911af44c6 | ||
|
|
319e44a072 | ||
|
|
75d51755cb | ||
|
|
90af7dd796 | ||
|
|
b2cbcd928f | ||
|
|
0f72fd1ed0 | ||
|
|
c3b4d94977 | ||
|
|
9a00f7317f | ||
|
|
1c2a4f9be2 | ||
|
|
fd7c2fe707 | ||
|
|
3eae9b7308 | ||
|
|
b324d4a5df | ||
|
|
877b5aaef6 | ||
|
|
50199c18d4 | ||
|
|
d823515699 | ||
|
|
34c94e0338 | ||
|
|
48c5ccbe66 | ||
|
|
c156230406 | ||
|
|
8c60007b71 | ||
|
|
a5f2e41502 | ||
|
|
302b25a790 | ||
|
|
266c9cb543 | ||
|
|
f0e69c9478 | ||
|
|
6dde4cbf0f | ||
|
|
cb43cb4481 | ||
|
|
97f6018cc9 | ||
|
|
a459f22073 | ||
|
|
5b2ef0c558 | ||
|
|
55a174f4f2 | ||
|
|
7d6e50cb7d | ||
|
|
d620783ab8 | ||
|
|
898828b49d | ||
|
|
11717a4f6a | ||
|
|
879dab3239 | ||
|
|
cf0bcb9cab | ||
|
|
32606a5a18 | ||
|
|
abaa6437fd | ||
|
|
f28b260f8d | ||
|
|
540c16b47f | ||
|
|
29d23630b4 | ||
|
|
d25c217e6a | ||
|
|
d30036415a | ||
|
|
bf7550e52e | ||
|
|
5d105ccde9 | ||
|
|
bbd9cf40e5 | ||
|
|
fe94d3036e | ||
|
|
3510b57523 | ||
|
|
71cce4f60c | ||
|
|
3535e16a20 | ||
|
|
92a015b46a | ||
|
|
435d5b56b3 | ||
|
|
3fd4ce827f | ||
|
|
9cb2d9f123 | ||
|
|
9a3b4807e4 | ||
|
|
3ce1994e97 | ||
|
|
03c8c1cbd8 | ||
|
|
3143bb87ba | ||
|
|
c2731bbfc2 | ||
|
|
2a3b3a65b4 | ||
|
|
89e4e1420e | ||
|
|
41af9f42d2 | ||
|
|
5de41466dd | ||
|
|
5c3a56bbef | ||
|
|
1b50ba7616 | ||
|
|
802a4ab8c2 | ||
|
|
ffd73e832c | ||
|
|
c82f6f4de5 | ||
|
|
a9ec016184 | ||
|
|
134fd180c1 | ||
|
|
5361536d30 | ||
|
|
ff733efaa7 | ||
|
|
363274e273 | ||
|
|
3c4012945f | ||
|
|
f338b1e925 | ||
|
|
05ab348be3 | ||
|
|
80cd442a73 | ||
|
|
34e3ef5bf4 | ||
|
|
a8009c0803 | ||
|
|
ebe9eba8da | ||
|
|
bb68a37188 | ||
|
|
b072c816a4 | ||
|
|
b385c14f79 | ||
|
|
c03f402b4c | ||
|
|
095dfbdd39 | ||
|
|
8e7ccfda66 | ||
|
|
04abd21718 | ||
|
|
90eb52f548 | ||
|
|
455578dc33 | ||
|
|
ba9c8e47c7 | ||
|
|
afbeaaf887 | ||
|
|
c65090e4a2 | ||
|
|
f417711da3 | ||
|
|
8bcb56e9ea | ||
|
|
db5eedffe1 | ||
|
|
532560518c | ||
|
|
479e4ee18d | ||
|
|
3ff83f012d | ||
|
|
cd65855f2c | ||
|
|
14a03b78eb | ||
|
|
39adef1e90 | ||
|
|
a95ff22653 | ||
|
|
e7ccaf8089 | ||
|
|
14c6cbb818 | ||
|
|
f9755cf0a2 | ||
|
|
7e7f9fbe40 | ||
|
|
6407a3ed3a | ||
|
|
701b6187a5 | ||
|
|
6f637ca79a | ||
|
|
97950f2483 | ||
|
|
15eedb2034 | ||
|
|
f487f35ccd | ||
|
|
66f54c283d | ||
|
|
955af75151 | ||
|
|
e3b13c0631 | ||
|
|
72d99f9400 | ||
|
|
f737579090 | ||
|
|
46bb5ee3da | ||
|
|
8b5dbb7a99 | ||
|
|
3117141b52 | ||
|
|
aed3fa6cf7 | ||
|
|
3ab1079214 | ||
|
|
32f4b403e2 | ||
|
|
949d5b328d | ||
|
|
1944fdd337 | ||
|
|
b344d0b762 | ||
|
|
9962480356 | ||
|
|
8e02e9e466 | ||
|
|
45ac640ba6 | ||
|
|
27891b70dc | ||
|
|
05f40fae75 | ||
|
|
070679ec5b | ||
|
|
1eac9d4cfc | ||
|
|
cf899967ce | ||
|
|
af4f9fc282 | ||
|
|
b9299568f4 | ||
|
|
22be42d86e | ||
|
|
6828b25402 | ||
|
|
a290042ee9 | ||
|
|
d8de01a0ae | ||
|
|
f8f3dcd85e | ||
|
|
f8fa077655 | ||
|
|
8b3126cd78 | ||
|
|
8d438d5885 | ||
|
|
8c30830837 | ||
|
|
540dc86601 | ||
|
|
6133319acd | ||
|
|
3d779f68c6 | ||
|
|
abda4f6896 | ||
|
|
afefaa9188 | ||
|
|
273312e7c5 | ||
|
|
5d34aac50c | ||
|
|
936afb01b4 | ||
|
|
e62a531a82 | ||
|
|
f06283b570 | ||
|
|
2ed567a33c | ||
|
|
cb36297499 | ||
|
|
afc4fee8a7 | ||
|
|
a60281b684 | ||
|
|
8569be0327 | ||
|
|
7b186fad2a | ||
|
|
384df739dd | ||
|
|
8c548c6f0e | ||
|
|
d89876b633 | ||
|
|
5b7ad96a29 | ||
|
|
124c3bfd5c | ||
|
|
1d91199ebb | ||
|
|
ce8c0f2bd7 | ||
|
|
0285a14e02 | ||
|
|
cf95106744 | ||
|
|
cdc0fb6780 | ||
|
|
e978a02196 | ||
|
|
d993296ea9 | ||
|
|
5c4287a572 | ||
|
|
750a9d7214 | ||
|
|
e02ec90a44 | ||
|
|
977baa89f4 | ||
|
|
e9ae829ab3 | ||
|
|
09792791f7 | ||
|
|
1f330dec14 | ||
|
|
73bcc2a984 | ||
|
|
d16132de30 | ||
|
|
929d59b169 | ||
|
|
8cbae25479 | ||
|
|
8368fe54e8 | ||
|
|
2fa9a9918a | ||
|
|
2a59fba488 | ||
|
|
090981d84c | ||
|
|
adf59ceff6 | ||
|
|
ef23006b9b | ||
|
|
b40680cb62 | ||
|
|
47b0d005c8 | ||
|
|
7e869133a5 | ||
|
|
8a3e889145 | ||
|
|
d299ad13a1 | ||
|
|
89c78425ce | ||
|
|
00790763b1 | ||
|
|
1fc0810d40 | ||
|
|
d0ef5351d3 | ||
|
|
e51921d212 | ||
|
|
ff8ccfea55 | ||
|
|
cda8b7d2cd | ||
|
|
f5007558ed | ||
|
|
c4c2d4a307 | ||
|
|
0eecce13be | ||
|
|
7665329c25 | ||
|
|
2c87793fb1 | ||
|
|
7936e64a06 | ||
|
|
6b16d3fb75 | ||
|
|
6450765979 | ||
|
|
286e384f64 | ||
|
|
76e0955e19 | ||
|
|
e599be8aa3 | ||
|
|
fcd47f8ea4 |
17
.gitignore
vendored
17
.gitignore
vendored
@@ -1,8 +1,21 @@
|
||||
|
||||
frames/*
|
||||
datas/*.xcf
|
||||
!frames/README.md
|
||||
|
||||
WS/timing
|
||||
datas/*.xcf
|
||||
datas/*.ttf
|
||||
datas/*.jpg
|
||||
datas/*.webp
|
||||
!datas/README.md
|
||||
!datas/ega-16colors.png
|
||||
|
||||
WS/*timing
|
||||
WS/log*
|
||||
WS/*.done
|
||||
WS/*.log
|
||||
|
||||
*.png
|
||||
*.gif
|
||||
*.mp4
|
||||
*.pov-state
|
||||
|
||||
|
||||
170
LICENSE
170
LICENSE
@@ -1,170 +0,0 @@
|
||||
Creative Commons Attribution-ShareAlike 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
|
||||
|
||||
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described.
|
||||
|
||||
Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
Section 1 – Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
Section 2 – Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
|
||||
|
||||
C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
|
||||
|
||||
Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
|
||||
|
||||
Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
|
||||
|
||||
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
92
Makefile
92
Makefile
@@ -1,16 +1,96 @@
|
||||
|
||||
DIMS = -W1600 -H1200
|
||||
|
||||
POVOPT = +q9 +a -d -W1024 -H768
|
||||
POVDEP = contexte.inc elements.inc datas/hf.png
|
||||
POVOPT = +q9 +A0.05 -WT2 Declare=NbFrames=450 -d
|
||||
|
||||
POVDEP = contexte.inc hexacone.inc hexabenz.inc \
|
||||
all.inc hexastar.inc \
|
||||
architecture.inc \
|
||||
globals.inc hexawood.inc datas/hf.png \
|
||||
dynamic.inc trident.inc groundbase.inc \
|
||||
gadgets.inc xperiment.inc
|
||||
|
||||
PNG: essai.png scene.png
|
||||
# ! Define a default value for the POV clock
|
||||
# ! You can overide with this command line :
|
||||
# $ make CK=449 essai.png
|
||||
|
||||
CK=225
|
||||
|
||||
essai.png: essai.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) -i$< -o$@
|
||||
PNG: essai.png scene.png topview.png passage.png \
|
||||
orbite.png hexabenz.png escadrille.png \
|
||||
hexacone.png remote.png survol.png cutoff.png \
|
||||
carto.png hexawood.png bubblecut.png \
|
||||
circular.png panoramic.png splined.png \
|
||||
trident.png approche.png hexastar.png \
|
||||
patrouille.png
|
||||
echo "make PNG ck=$(CK) done" >> WS/log
|
||||
|
||||
patrouille.png: patrouille.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
around.png: around.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
approche.png: approche.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
trident.png: trident.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
splined.png: splined.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
topview.png: topview.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
cutoff.png: cutoff.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
bubblecut.png: bubblecut.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
essai.png: essai.pov Makefile $(POVDEP) hexastar.inc
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
noise.png: essai.png Makefile
|
||||
convert -verbose -noise 45x3 $< $@
|
||||
|
||||
hexabenz.png: hexabenz.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
hexacone.png: hexacone.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
hexawood.png: hexawood.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
hexastar.png: hexastar.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
passage.png: passage.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
orbite.png: orbite.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) -K$(CK) -i$< -o$@
|
||||
|
||||
scene.png: scene.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) +K166 -i$< -o$@
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
escadrille.png: escadrille.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
remote.png: remote.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
survol.png: survol.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
carto.png: carto.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
circular.png: circular.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
panoramic.png: panoramic.pov Makefile $(POVDEP)
|
||||
povray $(POVOPT) $(DIMS) +K$(CK) -i$< -o$@
|
||||
|
||||
|
||||
|
||||
79
README.md
79
README.md
@@ -1,8 +1,77 @@
|
||||
# HexaCone
|
||||
|
||||
Projet POVray de l'hiver 2024/2025 : un objet hexaconal,7
|
||||
prenant en compte les divergences d'opinion. Le concept
|
||||
sera amélioré au fil du temps, et vous pourrez lire son
|
||||
évolution dans
|
||||
[Mastodon](https://mastodon.tetaneutral.net/@tth) #hexacone.
|
||||
Un projet POVray né pendant l'hiver 2024/2025, au fin fond du Gers :
|
||||
un objet **hexaconal**
|
||||
prenant en compte les divergences d'opinion et les fluctuations
|
||||
de la température du salon.
|
||||
Le concept initial, assez inprécis, sera amélioré au fil du temps,
|
||||
et vous pouvez
|
||||
suivre son évolution par l'intermédiaire de
|
||||
[Mastodon](https://mastodon.tetaneutral.net/@tth)
|
||||
avec le *croisimot* `#hexacone`.
|
||||
Quelques images sont disponibles sur mon serveur de
|
||||
[cuisine](http://maison.tth.netlib.re/pov/hexacone.html),
|
||||
avec même des liens vers les vidz.
|
||||
|
||||
## Prérequis
|
||||
|
||||
Avant toute chose, il faut avoir installé les logiciels
|
||||
suivants : bash, awk, gnuplot, imagemagick, ffmpeg, et bien
|
||||
entendu, [povray](https://povray.org/).
|
||||
Une bonne maitrise des scripts shell (en Bash) sera un plus.
|
||||
|
||||
## Utilisation
|
||||
|
||||
Il y a deux choses que l'on peut raytracer :
|
||||
les images fixes, qui sont traitées
|
||||
par un classique [`Makefile`](./Makefile) et les séquences animées
|
||||
produites par un [script shell](./mkloop.sh).
|
||||
|
||||
Avant toute chose, vous devrez vérifier la présence de plusieurs
|
||||
répertoires :
|
||||
|
||||
D'un coté `./frames/<name>` pour stocker les images calculées
|
||||
de chaque séquence et
|
||||
./frames/Spool` pour l'assemblage de la vidéo intégrale :
|
||||
|
||||
```
|
||||
frames/
|
||||
├── essai
|
||||
├── orbite
|
||||
├── passage
|
||||
├── escadrille
|
||||
├── scene
|
||||
├── Spool
|
||||
└── topview
|
||||
```
|
||||
et de l'autre coté `./WS/` pour ranger les
|
||||
[fichiers de travail](./WS/README.md).
|
||||
|
||||
Ensuite, il faut assembler toutes ces images calculées en une vidéo
|
||||
de qualité (ce que fait je très empiriquement). Tout d'abord, on encode
|
||||
(avec ce [script](./tools/encode.sh)) chaque séquence individuelle
|
||||
pour les mettre dans le grand Ternet mondial à partir de mon
|
||||
[ADSL](http://maison.tth.netlib.re/pov/hexacone.html) de campagne.
|
||||
Ensuite, un autre [script](./tools/linkfarmer.sh) assemble toute
|
||||
les séquences dans le produit
|
||||
[final](http://maison.tth.netlib.re/v/hc/full.mp4), en ajoutant
|
||||
générique et inter-titres.
|
||||
|
||||
À vous de jouer maintenant : *« Fork & Enjoy »*
|
||||
|
||||
## Contact
|
||||
|
||||
* La [mailing-list du tetalab](https://lists.tetalab.org/postorius/lists/tetalab.tetalab.org/) ;
|
||||
* Par IRC, canal `#tetalab` ou `#povray` sur le réseau de [Libera](https://libera.chat/).
|
||||
* Dans [Mastodon](https://mastodon.tetaneutral.net/@tth) et [Peertube](https://tube.interhacker.space/c/tth_channel/videos)
|
||||
|
||||
## La suite
|
||||
|
||||
Il reste bien des choses à faire : [TODO](TODO.md) list.
|
||||
|
||||
**Le gras c'est la vie** (proverbe local)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
30
TODO.md
Normal file
30
TODO.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# TODO hexagoniste
|
||||
|
||||
## Urgent
|
||||
|
||||
- finaliser le revamping du début de 2026.
|
||||
|
||||
## Outils
|
||||
|
||||
- automatiser la création des répertoires dans `frames/`
|
||||
- Génération de sous titres automatisée.
|
||||
|
||||
## Trucages
|
||||
|
||||
- Se remettre à (enfin) améliorer
|
||||
[libtthimage](https://git.tetalab.org/tTh/libtthimage).
|
||||
- Relire le livre de Brunus sur ImageMagick.
|
||||
|
||||
## Audio
|
||||
|
||||
- Songer à un cadriciel pour la piste son.
|
||||
- Trouver un compositeur et les musiciens.
|
||||
- Étudier à fond la documentation de `sox`
|
||||
|
||||
## ... en bref ...
|
||||
|
||||
Il reste encore beaucoup de chemin à parcourir, mais la
|
||||
route est bien plaisante.
|
||||
Je me permet néamoins de déplorer le peu de présence de
|
||||
[povistes](https://mastodon.tetaneutral.net/tags/Povray) dans
|
||||
mon entourage.
|
||||
@@ -1,3 +1,3 @@
|
||||
# Workspace
|
||||
|
||||
|
||||
workspace
|
||||
For intermediates files, and timing log.
|
||||
|
||||
31
all.inc
Normal file
31
all.inc
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Tous les includes dans le bon ordre
|
||||
*/
|
||||
|
||||
#debug "+++++++++++++++++++++++++++ DEBUT ALL\n"
|
||||
|
||||
// tous les petits elements
|
||||
#include "gadgets.inc"
|
||||
|
||||
// les hexatrucs qui sont OK
|
||||
#include "hexacone.inc"
|
||||
#include "hexabenz.inc"
|
||||
#include "hexawood.inc"
|
||||
#include "trident.inc"
|
||||
#include "hexastar.inc"
|
||||
|
||||
// les machins avec des bugs
|
||||
#include "architecture.inc"
|
||||
|
||||
// les constructions en chantier
|
||||
#include "xperiment.inc"
|
||||
|
||||
// et on assemble tout !
|
||||
#include "contexte.inc"
|
||||
|
||||
// les machins qui bougent
|
||||
#if ( ! NO_DYNAMIC )
|
||||
#include "dynamic.inc"
|
||||
#end
|
||||
|
||||
#debug "+++++++++++++++++++++++++++ FIN ALL\n"
|
||||
36
approche.pov
Normal file
36
approche.pov
Normal file
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* H E X A C O N E - A P P R O C H E
|
||||
*
|
||||
* new: Sun Oct 19 05:20:49 PM UTC 2025
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare LocX = -0.5 + Cos_010(NormClock);
|
||||
#declare LocY = 2.6 - NormClock;
|
||||
#declare LocZ = -200 + (118 * NormClock);
|
||||
#declare LocCam = <LocX, LocY, LocZ>;
|
||||
#declare LatCam = <0, 0.92+NormClock, 0>;
|
||||
|
||||
// object { Repere scale 5 translate Interpolate(LocCam, LatCam, 0.50) }
|
||||
|
||||
camera {
|
||||
location <LocX, LocY, LocZ>
|
||||
look_at LatCam
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <0.37, 0.0, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 42
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
106
architecture.inc
Normal file
106
architecture.inc
Normal file
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* H E X A C O N E - A R C H I T E C T U R E
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*
|
||||
* file created on Sat Jan 31 07:07:28 AM UTC 2026
|
||||
*/
|
||||
|
||||
// ===========================================================
|
||||
#declare SzC = 0.3;
|
||||
#macro Base_Col_A ()
|
||||
merge {
|
||||
box { <-SzC, 0, -SzC>, <SzC, 0.222, SzC> }
|
||||
#local B = SzC * 0.7;
|
||||
box { <-B, 0, -B>, <B, 0.333, B> }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.33)
|
||||
texture { T_Stone25 }
|
||||
#else
|
||||
texture { T_Stone26 }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
// -----------------------------------------------------------
|
||||
#macro Haut_Col_A ()
|
||||
difference {
|
||||
#local S = SzC * 0.87;
|
||||
box { <-S, 0, -S>, <S, 0.222, S> }
|
||||
#local E = SzC + 1;
|
||||
#local R = S * 0.42;
|
||||
cylinder { <-E, 0, S>, <E, 0, S>, R }
|
||||
cylinder { <-E, 0, -S>, <E, 0, -S>, R }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.33)
|
||||
texture { T_Stone27 }
|
||||
#else
|
||||
texture { T_Stone28 }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
// -----------------------------------------------------------
|
||||
#macro Fut_Col_A (H)
|
||||
object {
|
||||
cylinder { 0, H*y, 0.15 }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.43)
|
||||
texture { T_Stone29 }
|
||||
#else
|
||||
texture { T_Stone34 scale 3 }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
// -----------------------------------------------------------
|
||||
#macro Colonne_A (H)
|
||||
union {
|
||||
object { Haut_Col_A () translate y*H }
|
||||
object { Fut_Col_A (H) }
|
||||
object { Base_Col_A () }
|
||||
}
|
||||
#end
|
||||
// ===========================================================
|
||||
// bon, on a un pilier/colonne donc de quoi poser
|
||||
// dessus un linteau pour avoir un genre de portique
|
||||
// pour remplacer les arches de l'approche.
|
||||
#macro Linteau_A (Lg, Epp)
|
||||
merge {
|
||||
#local L = Lg + 0.42;
|
||||
#local K = 0.28;
|
||||
box { <-L, 0, -K>, <L, Epp, K> }
|
||||
cylinder { <0, Epp, -K*0.9>, <0, Epp, K*0.9>, K }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.63)
|
||||
texture { T_Grnt6 scale 4 }
|
||||
#else
|
||||
texture { T_Stone34 scale 3+rand(Rng1) }
|
||||
#end
|
||||
}
|
||||
#end // macro
|
||||
// -----------------------------------------------------------
|
||||
#macro Linteau_B (Lg, Epp)
|
||||
merge {
|
||||
#local L = Lg + 0.20;
|
||||
#local K = 0.36;
|
||||
box { <-L, 0, -K>, <L, Epp, K> }
|
||||
cylinder { <0, Epp, -K*0.9>, <0, Epp, K*0.9>, K }
|
||||
texture { T_WIP_dents rotate y*(rand(Rng1)*77) }
|
||||
}
|
||||
#end // macro
|
||||
|
||||
// ===========================================================
|
||||
#macro Portique_A ()
|
||||
union {
|
||||
#local Larg = 2.8;
|
||||
#local Haut = 3.4;
|
||||
object { Colonne_A (Haut) translate -x*Larg }
|
||||
object { Colonne_A (Haut) translate x*Larg }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.80)
|
||||
object { Linteau_A (Larg,0.26) translate y*(Haut+0.20) }
|
||||
#else
|
||||
object { Linteau_B (Larg,0.28) translate y*(Haut+0.20) }
|
||||
#end
|
||||
}
|
||||
#end // macro
|
||||
// ===========================================================
|
||||
|
||||
|
||||
31
around.pov
Normal file
31
around.pov
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* H E X A C O N E - A R O U N D
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*
|
||||
* scene imaginée le 26 janvier 2026
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare R_around = 120;
|
||||
#declare CK = 2.9 + (3.141592654 * NormClock);
|
||||
|
||||
#declare CamX = R_around * cos(CK);
|
||||
#declare CamY = 15 + (6*Cos_010(NormClock));
|
||||
#declare CamZ = R_around * 1.8 * sin(CK);
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <0, 0.5 + NormClock, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 36
|
||||
}
|
||||
60
bubblecut.pov
Normal file
60
bubblecut.pov
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* H E X A C O N E - C U T O F F
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 1;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare POS_Cutoff = <-21, 0, -8>;
|
||||
|
||||
#local TY = 1.55;
|
||||
|
||||
#declare Position = <0.50, -0.70, 0.75>;
|
||||
#declare Rayon = 0.70 + 1.52 * NormClock; // rayon de la sphere
|
||||
// de découpe
|
||||
#debug concat("Rayon decoupe = ", str(Rayon, 8, 3), "\n\n")
|
||||
|
||||
difference {
|
||||
object { HexaBenz () }
|
||||
sphere { Position, Rayon }
|
||||
translate y*TY + POS_Cutoff
|
||||
}
|
||||
|
||||
/*
|
||||
sphere { Position, 0.020 translate y*TY + POS_Cutoff
|
||||
texture { T_WIP_alert } }
|
||||
*/
|
||||
|
||||
/* those are for for debugging */
|
||||
// object { OpenBox (1, 0.05) translate y*TY + POS_Cutoff }
|
||||
// object { Repere translate y*2.8 + POS_Cutoff }
|
||||
|
||||
// =======================================================
|
||||
light_source {
|
||||
<-24, 0.4, -1>
|
||||
colour Orange
|
||||
parallel
|
||||
point_at y*TY + POS_Cutoff
|
||||
}
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
#local CamX = -27.4 + (2.29*Cos_01(NormClock));
|
||||
#local CamY = 2.7 - (0.24*sqrt(NormClock));
|
||||
#local CamZ = -0.85 + (2.02*NormClock);
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <0, 1.5, 0> + POS_Cutoff
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 35 - 5*Cos_01(NormClock)
|
||||
}
|
||||
38
carto.pov
Normal file
38
carto.pov
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* H E X A C O N E
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*
|
||||
* cartographie de l'hexamonde
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// ---------------------------------------------------------
|
||||
object { Repere scale 20 translate y*20 }
|
||||
// ---------------------------------------------------------
|
||||
// dessiner une grille
|
||||
union {
|
||||
#for (Foo, -140, 140, 10)
|
||||
#local H = 0.07;
|
||||
#local Ra = 0.05;
|
||||
cylinder { <-150, H, Foo>, <150, H, Foo>, Ra }
|
||||
cylinder { <Foo, H, -150>, <Foo, H, 150>, Ra }
|
||||
#end
|
||||
pigment { color Black }
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
object { Le_Decor }
|
||||
|
||||
camera {
|
||||
location <46, 149+(117*NormClock), 18-(12*NormClock)>
|
||||
look_at <0, 1.18, 0.17 + (2.4*NormClock)>
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 50
|
||||
}
|
||||
|
||||
37
circular.pov
Normal file
37
circular.pov
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* H E X A C O N E - E S S A I
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare R_circ = R_circular + 0.07;
|
||||
#declare CK = 2.9 + (1.51 * Cos_01(NormClock));
|
||||
|
||||
#declare CamX = R_circ * cos(CK);
|
||||
#declare CamY = 3.08 + abs(sin(CK/4.00));
|
||||
#declare CamZ = R_circ * sin(CK);
|
||||
|
||||
#declare AV = 0.070;
|
||||
#declare LatX = R_circ * 0.96 * cos(CK + AV);
|
||||
#declare LatY = 2.65;
|
||||
#declare LatZ = R_circ * 0.95 * sin(CK + AV);
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <LatX, LatY, LatZ>
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 64
|
||||
}
|
||||
|
||||
415
contexte.inc
415
contexte.inc
@@ -2,33 +2,408 @@
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
// plane { y, 0 pigment { color DarkGreen } }
|
||||
/* voir aussi le fichier 'globals.inc' */
|
||||
|
||||
height_field {
|
||||
png "datas/hf.png"
|
||||
smooth
|
||||
texture {
|
||||
pigment { DarkGreen }
|
||||
finish { phong 0.333 }
|
||||
}
|
||||
translate <-.5, 0, -.5>
|
||||
scale <18, 0.85, 18>
|
||||
/* ======================================================= */
|
||||
// #debug "+++++++++++++++++++++ debut contexte\n"
|
||||
/* ======================================================= */
|
||||
|
||||
#macro Trois_Portiques (Dist)
|
||||
union {
|
||||
object { Portique_A () }
|
||||
object { Portique_A () scale <1, 1.2, 1> translate z*11 }
|
||||
object { Portique_A () rotate y*11 translate z*22 }
|
||||
// XXX scale 1.85
|
||||
}
|
||||
#end // macro trois portiques
|
||||
|
||||
/* ======================================================= */
|
||||
/*
|
||||
* essai du 12 mars 2025
|
||||
*/
|
||||
|
||||
#if (0)
|
||||
cylinder { 0, <1, 0, 0>, 0.008 pigment { color Red } }
|
||||
cylinder { 0, <0, 0, 1>, 0.008 pigment { color Blue } }
|
||||
#declare RedB_0_X = 19; #declare RedB_0_Z = 29;
|
||||
|
||||
#declare RedB_1_X = -24; #declare RedB_1_Z = 8;
|
||||
|
||||
// XXX #declare RedB_2_X = 36; #declare RedB_2_Z = -21;
|
||||
#declare RedB_2_X = 2; #declare RedB_2_Z = -40;
|
||||
|
||||
#declare RedB_3_X = 42; #declare RedB_3_Z = -5;
|
||||
|
||||
#declare Pos_RedB_0 = <RedB_0_X, 0, RedB_0_Z>;
|
||||
#declare Pos_RedB_1 = <RedB_1_X, 0, RedB_1_Z>;
|
||||
#declare Pos_RedB_2 = <RedB_2_X, 0, RedB_2_Z>;
|
||||
#declare Pos_RedB_3 = <RedB_3_X, 0, RedB_3_Z>;
|
||||
|
||||
#macro RoundBase_0 ( T )
|
||||
difference {
|
||||
#local R = 2.46;
|
||||
cylinder { 0, y*0.40, R }
|
||||
cylinder { 0, y*0.36, R*0.99 }
|
||||
cone { y*0.37, R*0.80, y*0.425, R*0.83 }
|
||||
#for (Foo, 0, 359, 10)
|
||||
#if (rand(Rng1) > 0.17)
|
||||
#local Dx = R * sin(radians(Foo));
|
||||
#local Dz = R * cos(radians(Foo));
|
||||
cone { 0, 0.01, y*0.41, 0.10 translate <Dx, 0, Dz> }
|
||||
#end // if random
|
||||
#end
|
||||
}
|
||||
texture { T }
|
||||
#end // macro
|
||||
|
||||
/* ======================================================= */
|
||||
|
||||
#macro GyroPhare_mat ()
|
||||
union {
|
||||
cylinder { 0, y*H_gyro, R_gyro }
|
||||
intersection {
|
||||
sphere { 0, R_gyro scale <1, 1.717, 1> }
|
||||
box { <-1, 0, -1>, <1, 1.94, 1> }
|
||||
translate y*(H_gyro+H_gylampe+0.04)
|
||||
}
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.33) texture { T_Stone25 scale 1+rand(Rng1) }
|
||||
#elseif (R < 0.66) texture { T_Stone15 scale 1+rand(Rng1) }
|
||||
#else texture { T_Stone6 scale 1+rand(Rng1) }
|
||||
#end
|
||||
#undef R
|
||||
}
|
||||
#end // macro
|
||||
|
||||
#macro GyroPhare_lampe ()
|
||||
union {
|
||||
difference {
|
||||
cylinder { 0, y*H_gylampe, R_gyro * 1.12345678 }
|
||||
cylinder { y*0.01, y*(H_gylampe-0.01), R_gyro*0.97 }
|
||||
#local WB = 0.017;
|
||||
union {
|
||||
box { <-1, 0.03, -WB>, <1, (H_gylampe-0.03), WB> }
|
||||
box { <-WB, 0.03, -1>, <WB, (H_gylampe-0.03), 1> }
|
||||
}
|
||||
#undef WB
|
||||
pigment { color Gray90 }
|
||||
#local Ro = 0.5 + (1.0 * rand(Rng1));
|
||||
#if (rand(Rng1) < 0.50)
|
||||
#local Ro = -Ro;
|
||||
#end
|
||||
rotate y * Ro * clock
|
||||
#undef Ro
|
||||
}
|
||||
light_source { y*0.10
|
||||
rgb <0.8, 0.9, 0.999999999>
|
||||
fade_distance 3.90
|
||||
fade_power 1.55
|
||||
}
|
||||
}
|
||||
#end // macro
|
||||
|
||||
#macro GyroPhare ()
|
||||
union {
|
||||
object { GyroPhare_mat () }
|
||||
object { GyroPhare_lampe ()
|
||||
translate y*(H_gyro+0.02) }
|
||||
}
|
||||
#end // macro
|
||||
|
||||
#macro Les_GyroPhares ()
|
||||
union {
|
||||
#local E = SzSol * 0.471;
|
||||
#for (Idx, 0, 359, 60)
|
||||
#local Ang = radians(Idx+9.33);
|
||||
#local Dx = E * sin(Ang);
|
||||
#local Dz = E * cos(Ang);
|
||||
object { GyroPhare () translate <Dx, H_sol, Dz> }
|
||||
#end
|
||||
#undef E
|
||||
}
|
||||
#end
|
||||
/* ======================================================= */
|
||||
/* 11 avril 2025, je pose un grand cercle d'hexapoles
|
||||
* 9 octobre 2025, je rajoute un rail circulaire
|
||||
* les navettes qui circulent sont dans 'dynamic.inc'
|
||||
*/
|
||||
#declare Les_HexaPoles = object
|
||||
{
|
||||
union {
|
||||
#for (Ang, 0, 359, 6)
|
||||
#local De = 3.6 + (0.5*rand(Rng1));
|
||||
#if (rand(Rng1) < 0.50)
|
||||
#local E = R_circular + De;
|
||||
#else
|
||||
#local E = R_circular - De;
|
||||
#end
|
||||
#local Ra = radians(Ang);
|
||||
#local Xp = E * cos(Ra);
|
||||
#local Zp = E * sin(Ra);
|
||||
object { HexaPole () translate <Xp, 0, Zp> }
|
||||
#end // for
|
||||
|
||||
/* pourquoi ce truc est là ? */
|
||||
torus { R_circular, 0.28
|
||||
scale <1, 0.3210, 1>
|
||||
translate 0.33*y
|
||||
// !!! pigment { color Cyan }
|
||||
texture { T_Planete_A scale 3 }
|
||||
}
|
||||
|
||||
#for (Ang, 0,359, 2)
|
||||
#local Ra = radians(Ang);
|
||||
#local Xp = R_circular * cos(Ra);
|
||||
#local Zp = R_circular * sin(Ra);
|
||||
cylinder { 0, 0.33*y, 0.10
|
||||
translate <Xp, 0, Zp>
|
||||
texture { T_Planete_A scale 3 }
|
||||
}
|
||||
#end
|
||||
}
|
||||
}
|
||||
/* ======================================================= */
|
||||
|
||||
#declare HexaBalls = object
|
||||
{
|
||||
#declare Rhxba = 0.30;
|
||||
#declare R2hxba = Rhxba * 0.48;
|
||||
merge {
|
||||
sphere { 0, Rhxba }
|
||||
#local E = Rhxba * 1.260;
|
||||
sphere { 0, R2hxba translate <-E, 0, 0> }
|
||||
sphere { 0, R2hxba translate < E, 0, 0> }
|
||||
sphere { 0, R2hxba translate < 0, -E, 0> }
|
||||
sphere { 0, R2hxba translate < 0, E, 0> }
|
||||
sphere { 0, R2hxba translate < 0, 0, -E> }
|
||||
sphere { 0, R2hxba translate < 0, 0, E> }
|
||||
#undef E
|
||||
}
|
||||
}
|
||||
|
||||
#declare Les_HexaBalls = object
|
||||
{
|
||||
union {
|
||||
object { HexaBalls
|
||||
texture { Lightning1 scale 0.44 }
|
||||
rotate <clock/3, clock/4, clock/9>
|
||||
translate <2, 0.57+Cos_010(NormClock), 4>
|
||||
}
|
||||
|
||||
object { HexaBalls
|
||||
texture { Lightning2 scale 0.56 }
|
||||
rotate <-clock, clock*0.33333, clock*3>
|
||||
translate <4, 0.61+Cos_010(NormClock), -3>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
|
||||
/*
|
||||
* on déclare et rempli le tableau avec la place des trous
|
||||
*/
|
||||
#declare UnderHoles = array[6]
|
||||
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#debug "Underholes : DEBUG_LEVEL activated\n"
|
||||
#fopen Trid "WS/underholes.log" write
|
||||
#end // if debulevel
|
||||
|
||||
#for (Idx, 0, 5)
|
||||
#local Angle = (Idx + 0.19) * 1.09; // magic numbers ?
|
||||
#local Kr = 5 - (rand(Rng1)*2.5);
|
||||
#local Px = Kr + sin(Angle) * (SzSol * 0.98);
|
||||
#local Kr = 5 - (rand(Rng1)*2.5);
|
||||
#local Pz = Kr + cos(Angle) * (SzSol * 1.02);
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#write (Trid, "Def_", Idx, " ", NormClock, " ", Px, " ", Pz, "\n")
|
||||
#end
|
||||
// put the coords in the array.
|
||||
#declare UnderHoles[Idx] = <Px, 0, Pz>;
|
||||
#end // for loop
|
||||
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#fclose Trid
|
||||
#end
|
||||
|
||||
#declare Underground = object
|
||||
{
|
||||
difference {
|
||||
// plane { y, 0 }
|
||||
#local Big = 300;
|
||||
box { <-Big, -0.21, -Big>, < Big, 0.0000, Big> }
|
||||
#undef Big
|
||||
#for (Foo, 0, 5)
|
||||
cylinder { -y*5, y*5, R_hole translate UnderHoles[Foo] }
|
||||
#end
|
||||
texture { Ground_Texture }
|
||||
}
|
||||
}
|
||||
|
||||
/* 10 fev 2026, on place des bordures autour des trous */
|
||||
/* voir aussi -> xperiment.inc */
|
||||
#declare Les_Bordures = object
|
||||
{
|
||||
union {
|
||||
#for (foo, 0, 5)
|
||||
// #local YHB = (0.08 + (0.5*rand(Rng1)) * y);
|
||||
#if (rand(Rng1) < 0.5)
|
||||
object { HoleBorder_A (1.04) translate UnderHoles[foo] }
|
||||
#else
|
||||
object { HoleBorder_B (1.06) translate UnderHoles[foo] }
|
||||
#end // if
|
||||
#end // for
|
||||
}
|
||||
}
|
||||
/* ======================================================= */
|
||||
/*
|
||||
* nouvel éclairage du 10 février 2025
|
||||
*/
|
||||
#declare Quad_lampe = object
|
||||
{
|
||||
light_source {
|
||||
<2, 2.50, 3> color White
|
||||
spotlight
|
||||
radius 12
|
||||
falloff 20
|
||||
tightness 10
|
||||
point_at <0, 0.95, 0.22222222>
|
||||
0
|
||||
color White
|
||||
fade_distance SzSol * 0.40
|
||||
fade_power 1.25
|
||||
}
|
||||
}
|
||||
|
||||
#declare QuadriLight = object
|
||||
{
|
||||
#local T = E_QuadriLight;
|
||||
#local H = H_QuadriLight;
|
||||
|
||||
union {
|
||||
object { Quad_lampe translate <-T, H, -T> }
|
||||
object { Quad_lampe translate < T, H, -T> }
|
||||
object { Quad_lampe translate <-T, H, T> }
|
||||
object { Quad_lampe translate < T, H, T> }
|
||||
}
|
||||
rotate -19 * y
|
||||
}
|
||||
/* ======================================================= */
|
||||
/* new Fri Oct 17 07:13:51 PM CEST 2025 */
|
||||
#declare Les_Choses = object
|
||||
{
|
||||
union {
|
||||
/* a l'interieur du 'circular' */
|
||||
object { Chose () translate <-25, 0, -31> }
|
||||
object { Chose () translate < 20, 0, -36> }
|
||||
/* a l'exterieur du 'circular' */
|
||||
#for (foo, 0, 359, 18)
|
||||
#local CK = radians(foo + (9*rand(Rng1)));
|
||||
#local DX = 76 * sin(CK);
|
||||
#local DZ = 74 * cos(CK);
|
||||
object { Chose () translate < DX, 0, DZ> } // XXX
|
||||
#end
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
/*
|
||||
* cette partie demande des explications
|
||||
*/
|
||||
#declare Les_Lumieres = object
|
||||
{
|
||||
union {
|
||||
#if (1)
|
||||
light_source {
|
||||
<2.3, 5.50, 2.86> color Gray70
|
||||
spotlight
|
||||
radius 19 falloff 10 tightness 8
|
||||
point_at <0, 0.95, 0.22222222>
|
||||
}
|
||||
#end
|
||||
|
||||
#if (1)
|
||||
light_source {
|
||||
<-5, 5.60, 18>
|
||||
#if ( (clock > 290) & (clock<344) )
|
||||
#local Couleur = rgb <0.20, 0.20, 0.90>;
|
||||
#else
|
||||
#local Couleur = rgb <0.80, 0.80, 0.70>;
|
||||
#end
|
||||
color Couleur
|
||||
spotlight
|
||||
radius 12 falloff 10 tightness 5
|
||||
point_at <0, 0.95, -0.22>
|
||||
}
|
||||
#end
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
/*
|
||||
* why a skysphere can't be an object ?
|
||||
*/
|
||||
sky_sphere {
|
||||
pigment {
|
||||
gradient y
|
||||
color_map {
|
||||
[ 0.2 color Gray20 ]
|
||||
[ 0.4 color rgb <.5, .45, .43> ]
|
||||
[ 0.7 color Gray50 ]
|
||||
[ 0.9 color rgb <.5, .5, .47> ]
|
||||
[ 1.0 color Gray20 ]
|
||||
}
|
||||
turbulence 3.14159 + 0.84 * Cos_010(NormClock)
|
||||
scale 1.600
|
||||
// translate -1
|
||||
}
|
||||
#local Kem = 0.09;
|
||||
emission rgb <Kem, Kem, Kem>
|
||||
}
|
||||
|
||||
// light_source { <-6, 7, -4>, rgb <0.81, 0.65, 0.40> }
|
||||
/* ======================================================= */
|
||||
/*
|
||||
* Et on rassemble tous les éléments...
|
||||
*/
|
||||
#declare Le_Decor = object
|
||||
{
|
||||
union {
|
||||
object { Underground }
|
||||
object { Les_Bordures }
|
||||
|
||||
#include "groundbase.inc"
|
||||
object { La_GroundBase }
|
||||
|
||||
object { RoundBase_0 (T_Beton_1)
|
||||
translate <RedB_0_X, 0, RedB_0_Z> }
|
||||
object { RoundBase_0 (T_Beton_2)
|
||||
translate <RedB_1_X, 0, RedB_1_Z> }
|
||||
object { RoundBase_0 (T_Planete_B)
|
||||
translate <RedB_2_X, 0, RedB_2_Z> }
|
||||
object { RoundBase_0 (T_Planete_A)
|
||||
translate <RedB_3_X, 0, RedB_3_Z> }
|
||||
|
||||
// object { Les_Lumieres }
|
||||
object { QuadriLight }
|
||||
object { Les_GyroPhares () }
|
||||
object { Les_HexaPoles }
|
||||
object { HorlogeDouble rotate y*(104*NormClock)
|
||||
translate < 8, 0, -30> }
|
||||
object { Les_Choses }
|
||||
object { Les_Arches (1.9) rotate y*132 translate <-34, 0, -26> }
|
||||
|
||||
// XXX object { Les_Cahutes () rotate y*17 translate <2, 0, -40> }
|
||||
object { Les_Cahutes () rotate y*17 translate <37, 0, -20> }
|
||||
|
||||
/* --------- les trucs dans le Y négatif */
|
||||
// object { Trois_Arches (1.4) scale 2.4 translate <0, 0, -131> }
|
||||
object { Trois_Portiques (1.4) translate <0, 0, -111> }
|
||||
|
||||
object { OpenBox(1.5, 0.06) translate <-19, 1.49, -88> }
|
||||
object { OpenBox(1.5, 0.06) translate <-21, 1.52, -104> }
|
||||
object { OpenBox(1.5, 0.06) translate <-20, 1.52, -144> }
|
||||
|
||||
#for (Foo, 0, 5)
|
||||
object { Les_Cahutes () translate <27, 0, -(77+Foo*11)> }
|
||||
#end // for
|
||||
|
||||
/* --------- les trucs dans le Y positif */
|
||||
// object { OpenBox(1.6, 0.11) translate <-3, 3.58, 112> }
|
||||
object { Blob_Boxed scale 4 translate <-3, 3.58, 112> }
|
||||
object { Blob_Boxed scale 4 rotate y*45 translate <3, 6.7, 161> }
|
||||
|
||||
}
|
||||
}
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
51
cutoff.pov
Normal file
51
cutoff.pov
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* H E X A C O N E - C U T O F F
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare POS_Cutoff = <30.33, 0, -11>;
|
||||
|
||||
#local TY = 1.5;
|
||||
|
||||
#declare Kbox = (2.03*NormClock);
|
||||
difference {
|
||||
object { HexaCone () rotate <9-(11*NormClock), 6, -7> }
|
||||
box { -1, 1 translate z*Kbox }
|
||||
translate y*TY + POS_Cutoff
|
||||
}
|
||||
|
||||
/* this two objects are for debugging */
|
||||
// object { Repere scale 2 translate y*2.1 + POS_Cutoff }
|
||||
// object { OpenBox (1, 0.02) translate y*TY + POS_Cutoff }
|
||||
|
||||
// =======================================================
|
||||
light_source {
|
||||
<-14, 0.4, -1>
|
||||
colour Orange
|
||||
parallel
|
||||
point_at y*TY + POS_Cutoff
|
||||
}
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
#local CamX = POS_Cutoff.x + 3.5 + (3.14*Cos_01(NormClock));
|
||||
#local CamY = 2.01 + (1.14*sqrt(NormClock));
|
||||
#local CamZ = POS_Cutoff.z + 4.30 - (1.02*NormClock);
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <0, 1.5, 0> + POS_Cutoff
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 40 - 12*Cos_01(NormClock)
|
||||
}
|
||||
@@ -1,4 +1,14 @@
|
||||
# statics datas
|
||||
|
||||
This directory is the home of things like :
|
||||
|
||||
statics datas, like height-fields files...
|
||||
- `height_fields`, or « Champs d'altitude »
|
||||
- `image_map`, or « Papier peint »
|
||||
|
||||
But you have to provide your homebrewed one, who must be of high
|
||||
quality, larger than 512x512 pixels. On the other side, you are
|
||||
free to experiment with ugly files *:)*
|
||||
|
||||
You can also see the colors for the EGA conversion :
|
||||
, used by this
|
||||
[script](tools/build-ega-mp4.sh).
|
||||
BIN
datas/ega-16colors.png
Normal file
BIN
datas/ega-16colors.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 220 B |
178
dynamic.inc
Normal file
178
dynamic.inc
Normal file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
*/
|
||||
|
||||
// =======================================================
|
||||
// rajout d'une patrouille en vol
|
||||
// 2 janvier 2026
|
||||
|
||||
|
||||
object {
|
||||
#local CK = (clock / 230) - 0.75; // en radians
|
||||
#local RD = 63; // rayon deplacement
|
||||
#local Xp = RD * sin(CK);
|
||||
#local Zp = RD * cos(CK);
|
||||
#declare Loc_Patrouille = <Xp+10, 70+(11*NormClock), Zp>;
|
||||
|
||||
object { Patrouille }
|
||||
rotate y*degrees(CK)
|
||||
translate Loc_Patrouille
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
// on va tenter de placer quelques trucs
|
||||
// qui bougent sur le rail circulaire
|
||||
|
||||
#for (foo, 0, 5)
|
||||
#local CK = (NormClock+(foo*0.0200)) * 4.05; // radians
|
||||
#declare Xpos = R_circular * sin(CK);
|
||||
#declare Zpos = R_circular * cos(CK);
|
||||
#declare AR = degrees(CK);
|
||||
object {
|
||||
Wagonnet_0 (2.4)
|
||||
rotate y*AR
|
||||
translate <Xpos, 0.75, Zpos>
|
||||
}
|
||||
#end // for
|
||||
|
||||
/// =======================================================
|
||||
/* des trucs autour des trous du sol. */
|
||||
// Les_Machins --> 'gadgets.inc'
|
||||
object { Les_Machins rotate -y*clock translate UnderHoles[2] }
|
||||
object { Les_Machins rotate y*clock translate UnderHoles[5] }
|
||||
|
||||
// object { Les_HexaBalls rotate y*clock translate UnderHoles[2] }
|
||||
|
||||
/// =======================================================
|
||||
/*
|
||||
* deux hexabenz sur une base exterieure
|
||||
*/
|
||||
#declare BiBenz = object
|
||||
{
|
||||
#local K = 1.39;
|
||||
union {
|
||||
object { HexaBenz () rotate y*94 translate <-K, 1.86, 0> }
|
||||
object { HexaBenz () rotate -x*7 translate < K, 1.96, 0> }
|
||||
}
|
||||
}
|
||||
object { BiBenz rotate -y*(clock*0.28) translate Pos_RedB_0 }
|
||||
|
||||
/*
|
||||
* deux hexacones se tournent autour
|
||||
*/
|
||||
#declare BiCone = object
|
||||
{
|
||||
#local K = 1.27;
|
||||
union {
|
||||
object { HexaCone () rotate y*90 translate <-K, 1.7, 0> }
|
||||
object { HexaCone () rotate <9, 1, 7> translate < K, 1.9, 0> }
|
||||
}
|
||||
}
|
||||
object { BiCone rotate -y*(Cos_010(NormClock)*65.38) translate Pos_RedB_1 }
|
||||
|
||||
/* les tridents posés sur leur estrade */
|
||||
#declare BiTrident = object
|
||||
{
|
||||
union {
|
||||
object { Trident_A () rotate -z * 9.9 translate -x*0.92 }
|
||||
object { Trident_A () rotate z * 8.4 translate x*0.90 }
|
||||
}
|
||||
}
|
||||
object { BiTrident
|
||||
rotate y*(670*Cos_01(NormClock))
|
||||
translate Pos_RedB_2 + (y*2)
|
||||
}
|
||||
|
||||
/* l'hexastar est une nouvelle venue du 4 janvier 2026 */
|
||||
// elle est ici présentée sur son estrade.
|
||||
object { HexaStar rotate -z*5
|
||||
rotate y*(670*sin(NormClock))
|
||||
translate Pos_RedB_3 + (y*2)
|
||||
}
|
||||
|
||||
/*
|
||||
* on fait passer un hexatruc dans le ciel
|
||||
*/
|
||||
#declare A = <-SzSol, 24, -10>;
|
||||
#declare B = < SzSol+4, 26, -11>;
|
||||
#declare P = Interpolate(A, B, NormClock);
|
||||
object { HexaCone () rotate y*((12*NormClock)+80) translate P }
|
||||
|
||||
/* -----------------------------------------------
|
||||
* * le vaisseau "trident" passe a travers les
|
||||
* trous de l'underground.
|
||||
* * les coordonnées de ces trous sont définies
|
||||
* dans le fichier 'contexte.inc'.
|
||||
*/
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#fopen Trid "WS/underholes.log" append
|
||||
#end
|
||||
|
||||
#for (Foo, 0, 5)
|
||||
#declare Dy = (14*rand(Rng1))-9+(14*NormClock);
|
||||
#declare Tr = UnderHoles[Foo] + <0, Dy, 0>;
|
||||
#declare Ry = (( 0.5+rand(Rng1)-NormClock ) * 166);
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#write (Trid, "Trid ", Foo, " ", NormClock, " ", Dy, " ",
|
||||
Ry, " ", Tr, "\n")
|
||||
#end
|
||||
object { Trident_A () rotate y*Ry
|
||||
// translate y+( (10*rand(Rng1)) - 5)
|
||||
translate Tr }
|
||||
#end
|
||||
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#fclose Trid
|
||||
#end
|
||||
|
||||
/*
|
||||
* ----------------------------
|
||||
* echange hexacone et hexabenz
|
||||
*/
|
||||
#declare HC_A = <0.03, 2.18, 0.17>;
|
||||
#declare HC_B = <3.00, 11.07, 11.09>;
|
||||
#declare HC_P = Interpolate(HC_A, HC_B, Cos_01(NormClock));
|
||||
#declare RX = -9+(NormClock*11);
|
||||
#declare RY = 122 * (exp(NormClock) - 1.0);
|
||||
#declare RZ = 33 * cos(NormClock*7.65);
|
||||
object { HexaCone ()
|
||||
rotate <RX, RY, RZ>
|
||||
translate HC_P
|
||||
}
|
||||
#declare HB_A = <-5.00, 10.0, 6.33>;
|
||||
#declare HB_B = < 0.03, 2.32, -0.37>;
|
||||
#declare HB_P = Interpolate(HB_A, HB_B, Cos_01(NormClock));
|
||||
#declare RX = Cos_01(NormClock);
|
||||
#declare RY = -75 * (exp(NormClock*1.8) - 1.0);
|
||||
#declare RZ = abs(33 * sin(NormClock*7.65));
|
||||
object { HexaBenz ()
|
||||
rotate <RX, RY, RZ> translate HB_P }
|
||||
|
||||
/*
|
||||
* passage d'un hexawood près de la base
|
||||
*/
|
||||
#declare A = <-25, 0.4, (SzSol/2)+5>;
|
||||
#declare B = < 29, 0.5, (SzSol/2)+2>;
|
||||
#declare P = Interpolate(A, B, NormClock);
|
||||
#local K = NormClock*31;
|
||||
#local R = 16.64 * cos(K);
|
||||
#local H = 0.50 * pow(sin(K), 3);
|
||||
#declare P_hexawood = P + <0, 0.26+H, 0>;
|
||||
// #debug "+++++++++++++ P_hexawood defined\n"
|
||||
|
||||
object { HexaWood rotate z*R translate P_hexawood }
|
||||
|
||||
/*
|
||||
* survol par un trident
|
||||
*/
|
||||
#declare A = < 2, 47, -20>;
|
||||
#declare B = <-3, 35, 22>;
|
||||
#declare P = Interpolate(A, B, NormClock);
|
||||
object { Trident_A () rotate y*(clock*2.7)
|
||||
rotate z*80
|
||||
rotate <2, 94, 0>
|
||||
translate P }
|
||||
|
||||
/* ----------------------------------- */
|
||||
#debug "dynamic is loaded\n"
|
||||
/* ----------------------------------- */
|
||||
|
||||
87
elements.inc
87
elements.inc
@@ -1,87 +0,0 @@
|
||||
/*
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#declare HexaCone_shape = object
|
||||
{
|
||||
#local RA = 0.125;
|
||||
#local RB = 0.001;
|
||||
union {
|
||||
cone { 0, RA, <-1, 0, 0>, RB }
|
||||
cone { 0, RA, < 1, 0, 0>, RB }
|
||||
cone { 0, RA, < 0, 0, 1>, RB }
|
||||
cone { 0, RA, < 0, 0, -1>, RB }
|
||||
cone { 0, RA, < 0, 1, 0>, RB }
|
||||
cone { 0, RA, < 0, -1, 0>, RB }
|
||||
}
|
||||
}
|
||||
|
||||
#declare HexaCone_body = object
|
||||
{
|
||||
union {
|
||||
difference {
|
||||
object { HexaCone_shape }
|
||||
object { HexaCone_shape scale 0.99 }
|
||||
sphere {0, 0.24 }
|
||||
cylinder { <-1, 0, 0.55>, <1, 0, 0.55>,
|
||||
RA*0.40 }
|
||||
}
|
||||
difference {
|
||||
sphere {0, 0.20 }
|
||||
sphere {0, 0.18 }
|
||||
cylinder {-x, x, 0.10 }
|
||||
cylinder {-y, y, 0.10 }
|
||||
cylinder {-z, z, 0.10 }
|
||||
}
|
||||
light_source { 0, rgb <0.99, 0.05, 0.05> }
|
||||
}
|
||||
texture { New_Penny }
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
#declare HexaCone_radar = object
|
||||
{
|
||||
union {
|
||||
#for (foo, 0, 360, 60)
|
||||
#local RR = 0.16;
|
||||
#local PX = RR * sin(radians(foo));
|
||||
#local PZ = RR * cos(radians(foo));
|
||||
sphere { 0, 0.008
|
||||
scale <1, 1.37, 1>
|
||||
translate <PX, 0, PZ>
|
||||
}
|
||||
cylinder { -0.11*y, <PX, 0, PZ>, 0.003 }
|
||||
#end
|
||||
}
|
||||
texture { PinkAlabaster scale 8 }
|
||||
}
|
||||
|
||||
#declare HexaCone_head = object
|
||||
{
|
||||
#local DTa = 0.278;
|
||||
#local DTb = 0.030;
|
||||
|
||||
merge {
|
||||
difference {
|
||||
torus { DTa, DTb }
|
||||
#local TB = 0.50;
|
||||
box { <-TB, -TB, TB>, <TB, TB, 0> }
|
||||
}
|
||||
sphere { 0, DTb*1.55 translate -DTa*x }
|
||||
sphere { 0, DTb*1.55 translate DTa*x }
|
||||
}
|
||||
texture { Orange_Glass }
|
||||
}
|
||||
|
||||
#declare HexaCone = object
|
||||
{
|
||||
union {
|
||||
object { HexaCone_body }
|
||||
#local T = 0.55;
|
||||
object { HexaCone_head translate <0, 0, T+DTa> }
|
||||
object { HexaCone_radar translate <0, T+0.07, 0> }
|
||||
}
|
||||
rotate <-7, 0, -9>
|
||||
}
|
||||
67
escadrille.pov
Normal file
67
escadrille.pov
Normal file
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* H E X A C O N E
|
||||
*
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
#local Y_mean = 0;
|
||||
#local Y_count = 0;
|
||||
|
||||
#for (idX, -3, 3)
|
||||
#for (idZ, -3, 3)
|
||||
|
||||
#local posX = (idX * 4.76) + (rand(Rng1)-0.5);
|
||||
#local posY = 3.2 + (NormClock * 17 * (rand(Rng1)+0.95));
|
||||
#local posZ = (idZ * 4.44) ;
|
||||
#local Rx = (rand(Rng1) - 0.5) * 12;
|
||||
#local Ry = (rand(Rng1) - 0.5) * (24+NormClock);
|
||||
#local Rz = (rand(Rng1) - 0.5) * 11;
|
||||
|
||||
// #debug concat("X ", str(posX,7,3), " Z ", str(posZ,7,3), "\n")
|
||||
// #debug concat("position Z ", str(posZ,7,3),"\n")
|
||||
|
||||
#declare Limit = 1.470;
|
||||
#if ( (abs(posX)>Limit) & (abs(posZ)>Limit) ) // position
|
||||
#local Y_mean = Y_mean + posY;
|
||||
#local Y_count = Y_count + 1;
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.30)
|
||||
object { HexaCone () rotate <Rx, Ry, Rz>
|
||||
translate <posX, posY, posZ> }
|
||||
#elseif (R < 0.60)
|
||||
object { HexaStar rotate y*90 rotate <Rx, Ry, Rz>
|
||||
translate <posX, posY, posZ> }
|
||||
#else
|
||||
object { HexaBenz () rotate <Rx, Ry, Rz>
|
||||
translate <posX, posY, posZ> }
|
||||
#end
|
||||
#end // if position...
|
||||
#end // loop idX
|
||||
#end // loop idZ
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
#local CamX = 8.7 + ( 6.9 * Cos_01(NormClock));
|
||||
#local CamY = 0.42 + (18.36 * Cos_01(NormClock));
|
||||
#local CamZ = 122 - (22.9 * Cos_01(NormClock));
|
||||
|
||||
#local LatY = (Y_mean / Y_count) - (0.5*NormClock);
|
||||
// #debug concat("escadrille: Lat Y ", str(LatY, 7, 3),"\n")
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <0.0, LatY, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 54 - (31 * NormClock)
|
||||
}
|
||||
402
essai.pov
402
essai.pov
@@ -1,22 +1,402 @@
|
||||
/*
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
* H E X A C O N E - E S S A I
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
global_settings {
|
||||
assumed_gamma 1.0
|
||||
// #declare DEBUG_LEVEL = 1; // un nouveau test ?
|
||||
|
||||
#include "globals.inc"
|
||||
#declare NO_DYNAMIC = 1;
|
||||
#include "all.inc"
|
||||
|
||||
/*
|
||||
* il faut faire le tri ici !
|
||||
-* __________________________
|
||||
*/
|
||||
// =======================================================
|
||||
// nouveau du 10 février 2026
|
||||
#macro Anemone_A (E, H)
|
||||
union {
|
||||
#for (foo, 0, 5)
|
||||
#local A = radians(foo*60);
|
||||
#local DX = E * sin(A);
|
||||
#local DZ = E * cos(A);
|
||||
cone { y*(H/8), 0.20, <DX, H, DZ>, 0.001
|
||||
#local Rv = 0.7 + (0.2*rand(Rng1));
|
||||
#local Gv = 0.6 + (0.2*rand(Rng1));
|
||||
#local Bv = 0.6 + (0.3*rand(Rng1));
|
||||
texture {
|
||||
pigment { rgb <Rv, Gv, Bv> }
|
||||
finish { phong 0.51 reflection 0.05 }
|
||||
}
|
||||
}
|
||||
sphere { 0, 0.45 texture { T_WIP_color } }
|
||||
#end // for
|
||||
}
|
||||
#end // macro
|
||||
|
||||
// =======================================================
|
||||
/*
|
||||
* new Thu Dec 18 01:14:19 AM UTC 2025
|
||||
* 14 janvier 2026, j'ajoute un truc pour {enfin} gérer
|
||||
* un DEBUG_LEVEL correct.
|
||||
*/
|
||||
#macro Le_ConeStack ()
|
||||
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#debug "Cone Stack : DEBUG_LEVEL activated\n"
|
||||
#fopen Log "WS/log.essai" write
|
||||
#end // debug level
|
||||
|
||||
union {
|
||||
#local Hcs = 0.550;
|
||||
#local Rco = R_basecone * 3.333;
|
||||
#for (Foo, 0, 5)
|
||||
#local Dx = 0.385 * sin(Foo+NormClock);
|
||||
#local Dy = Foo * (Hcs + 0.0333);
|
||||
#local Dz = 0.385 * cos(Foo+NormClock);
|
||||
#local DV = <Dx, Dy, Dz>;
|
||||
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#write (Log, Foo, " ", DV, "\n")
|
||||
#end
|
||||
|
||||
union {
|
||||
cone { 0, Rco, <0, Hcs, 0>, 0.001
|
||||
#if (rand(Rng1) < 0.50) texture { Y_Texture }
|
||||
#else texture { M_Texture }
|
||||
#end // if rand
|
||||
}
|
||||
cylinder { 0, -0.08*y, Rco
|
||||
#if (rand(Rng1) < 0.50) texture { R_Texture }
|
||||
#else texture { G_Texture }
|
||||
#end // if rand
|
||||
}
|
||||
translate DV
|
||||
}
|
||||
#end // for Foo
|
||||
}
|
||||
|
||||
#include "colors.inc"
|
||||
#include "textures.inc"
|
||||
#include "elements.inc"
|
||||
#include "contexte.inc"
|
||||
#ifdef (DEBUG_LEVEL)
|
||||
#fclose Log
|
||||
#end // debug level
|
||||
|
||||
object { HexaCone_radar translate y*0.6 }
|
||||
#end // macro
|
||||
|
||||
|
||||
// =======================================================
|
||||
/* nouveau du 20 octobre 2025
|
||||
* Un semblant de wagonnet qui va tourner sur le
|
||||
* rail circulaire
|
||||
*/
|
||||
|
||||
#declare Les_Wagonnets = object
|
||||
{
|
||||
#local L = 2.4;
|
||||
|
||||
union {
|
||||
object { Wagonnet_0(L) translate <0, 1, 1.9> }
|
||||
object { Wagonnet_0(L+1) translate <0, 3+NormClock, 0> }
|
||||
object { Wagonnet_0(L) translate <0, 1, -1.8> }
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
/*
|
||||
* nouveau du 25 octobre 2025
|
||||
*/
|
||||
#declare Obj_BasicTexture = object
|
||||
{
|
||||
#local R = 0.385;
|
||||
#local H = 1.51;
|
||||
merge {
|
||||
cylinder { 0, y*H, R }
|
||||
sphere { 0, R scale <1, 0.50, 1> translate y*H }
|
||||
difference {
|
||||
#local R1 = R+0.46;
|
||||
#local R2 = R+0.63;
|
||||
box { <-0.19, 0, -0.17>, <R+0.4, H*0.48, R+0.6> }
|
||||
cylinder { <R1, -1, R2>, <R1, 1, R2>, 0.33 }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------------------
|
||||
|
||||
// -------------------------------------------------------
|
||||
// the place to try new textures
|
||||
#declare ProtoTextures = object
|
||||
{
|
||||
#local TX = 2.55;
|
||||
#local TZ = 2.95;
|
||||
#local Kro = 32 + (NormClock * 37);
|
||||
union {
|
||||
object { Obj_BasicTexture texture { R_Texture }
|
||||
rotate y * (rand(Rng1)*Kro)
|
||||
translate <TX, 0, -TZ> }
|
||||
object { Obj_BasicTexture texture { G_Texture }
|
||||
rotate y * (rand(Rng1)*Kro)
|
||||
translate <TX, 0, 0> }
|
||||
object { Obj_BasicTexture texture { B_Texture }
|
||||
rotate y * (rand(Rng1)*Kro)
|
||||
translate <TX, 0, TZ> }
|
||||
|
||||
object { Obj_BasicTexture texture { T_WIP_dents }
|
||||
rotate y * (rand(Rng1)*Kro)
|
||||
translate <-TX, 0, TZ> }
|
||||
object { Obj_BasicTexture texture { T_WIP_rasta }
|
||||
rotate y * (rand(Rng1)*Kro)
|
||||
translate <-TX, 0, 0> }
|
||||
object { Obj_BasicTexture texture { T_WIP_bluewave }
|
||||
rotate y * (rand(Rng1)*Kro)
|
||||
translate <-TX, 0, -TZ> }
|
||||
|
||||
object { Repere scale 1.5 translate y*0.5 }
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
/* Les choses, c'est l'espèce de vase avec des tiges
|
||||
qui bougent, je devrais trouver un nom plus parlant.
|
||||
|
||||
Mieux, on garde la chose mais on en dérive le vase
|
||||
*/
|
||||
|
||||
#macro Vase_le_corps_a ()
|
||||
intersection {
|
||||
box { <-5, -5, -5>, <5, 0, 5> }
|
||||
difference {
|
||||
sphere { 0, 0.34 }
|
||||
sphere { 0, 0.30 }
|
||||
scale <1, 1.64, 1>
|
||||
}
|
||||
texture { T_WIP_redwave scale 0.15 + 0.333*rand(Rng1)
|
||||
rotate <75*rand(Rng1), 75*rand(Rng1), 75*rand(Rng1)>
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
// ------------------------------------
|
||||
#macro Vase_le_corps_b ()
|
||||
union {
|
||||
#for (foo, 0, 359.999, 60)
|
||||
#local Dx = 0.35 * sin(radians(foo));
|
||||
#local Dz = 0.35 * cos(radians(foo));
|
||||
torus { 0.09, 0.016
|
||||
rotate z*30 rotate y*(foo-90)
|
||||
translate <Dx, 0, Dz>
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.50) texture { Y_Texture }
|
||||
#else texture { M_Texture }
|
||||
#end // end if
|
||||
} // torus
|
||||
#end // end for (foo
|
||||
}
|
||||
#end // end macro
|
||||
|
||||
// ------------------------------------
|
||||
// ASSEMBLER LE CORPS
|
||||
#macro Vase_le_corps ()
|
||||
union {
|
||||
object { Vase_le_corps_a () }
|
||||
object { Vase_le_corps_b () }
|
||||
translate y*0.95
|
||||
}
|
||||
#end
|
||||
// ------------------------------------
|
||||
// LE PIED
|
||||
|
||||
#macro Vase_le_pied ()
|
||||
union {
|
||||
cylinder { 0, y*0.80, 0.07 texture { T_WIP_dents scale 0.2 } }
|
||||
cylinder { 0, y*0.08, 0.20 texture { T_WIP_dents scale 0.4 } }
|
||||
}
|
||||
#end
|
||||
// ------------------------------------
|
||||
// LES TIGES
|
||||
|
||||
#macro Vase_les_tiges ()
|
||||
union {
|
||||
#local CK = NormClock * (7.876+rand(Rng1));
|
||||
#for (Foo, 0, 9)
|
||||
|
||||
// tout cela est bien tortueux !
|
||||
|
||||
#local CK2 = CK + Foo;
|
||||
#local C2X = (R_C + 0.051) * sin(CK2+rand(Rng1)) * sin(CK*3);
|
||||
#local C2Z = (R_C + 0.051) * (sin(-CK2+rand(Rng1)) *
|
||||
cos(CK*(rand(Rng1))));
|
||||
#local Rt = 0.02+(0.02*Cos_010(NormClock))-0.03*rand(Rng1);
|
||||
#local H = 0.38 + 0.55*rand(Rng1);
|
||||
union {
|
||||
cylinder { 0, <C2X, H, C2Z>, Rt }
|
||||
sphere { <C2X, H, C2Z>, Rt }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.25) texture { tPlasticOrange }
|
||||
#elseif (R < 0.50) texture { tPlasticBlue }
|
||||
#elseif (R < 0.75) texture { tPlasticPrune }
|
||||
#else texture { tPlasticGreen }
|
||||
#end // if
|
||||
}
|
||||
#end // for
|
||||
translate y*0.87
|
||||
}
|
||||
// #debug "== Fin chose les tiges\n"
|
||||
#end // macro
|
||||
|
||||
|
||||
// ------------------------------------
|
||||
// ------------------------------------
|
||||
|
||||
#macro Vase ()
|
||||
union {
|
||||
Vase_le_pied ()
|
||||
Vase_le_corps ()
|
||||
Vase_les_tiges ()
|
||||
}
|
||||
#end // macro
|
||||
|
||||
// ------------------------------------
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare Des_Choses = object
|
||||
{
|
||||
union {
|
||||
object { Vase () scale 2 translate < 2.2, 0, 2.32> }
|
||||
object { Vase () scale 1.4 translate <-2.9, 0, 3.91> }
|
||||
object { Vase () scale 2 translate < 2.9, 0, -4.07> }
|
||||
object { Vase () translate <-4.5, 0, -4> }
|
||||
object { Repere translate 0.15*y }
|
||||
}
|
||||
}
|
||||
// =======================================================
|
||||
|
||||
#declare GyroTrucs = object
|
||||
{
|
||||
union {
|
||||
#for (I, 0, 359, 30)
|
||||
#declare E = 12 + (3*rand(Rng1));
|
||||
#declare Dx = E * sin(radians(I));
|
||||
#declare Dz = E * cos(radians(I));
|
||||
#local R = rand(Rng1);
|
||||
#if (R > 0.52)
|
||||
object { GyroPhare () translate <Dx, 0, Dz> }
|
||||
#elseif (R > 0.36)
|
||||
object { Colonne_A (3.8)
|
||||
rotate y*(90*rand(Rng1))
|
||||
translate <Dx, 0, Dz> }
|
||||
#else
|
||||
object { Colonne_A (2.8)
|
||||
rotate y*(90*rand(Rng1))
|
||||
translate <Dx, 0, Dz> }
|
||||
#end
|
||||
#end // for
|
||||
}
|
||||
}
|
||||
|
||||
object { GyroTrucs }
|
||||
|
||||
// ========================================================##
|
||||
|
||||
#declare Architecture = object
|
||||
{
|
||||
union {
|
||||
object { Portique_A () translate z*6.5 }
|
||||
object { Portique_A () scale 2 translate z*2 }
|
||||
object { Portique_A () scale 1.8 }
|
||||
object { Portique_A () scale 2 translate -z*3 }
|
||||
object { Portique_A () rotate y*9 translate -z*6.5 }
|
||||
// object { Fleche translate y }
|
||||
}
|
||||
}
|
||||
// ------------------------------------------------------ ##
|
||||
|
||||
#debug " !!! ACTION !!!\n"
|
||||
|
||||
#local Rv = 0.5 + (0.1*sin(clock*0.113));
|
||||
#local Gv = 0.11;
|
||||
#local Bv = 0.2 * abs(sin(clock*0.014));
|
||||
light_source {
|
||||
<-32, 40, -7>
|
||||
colour <Rv, Gv, Bv>
|
||||
parallel
|
||||
point_at 0
|
||||
}
|
||||
|
||||
// ------------------------------------------------------ ##
|
||||
|
||||
#declare Selector = int(clock/57);
|
||||
#debug concat("Selector = ", str(Selector, 6, 0), "\n")
|
||||
|
||||
#declare AngleCam = 27 - 3*Cos_01(NormClock);
|
||||
|
||||
#switch (Selector)
|
||||
#case (0)
|
||||
object { Des_Choses }
|
||||
#local AngleCam = 17;
|
||||
#break
|
||||
#case (1)
|
||||
object { Architecture rotate -y*(clock*0.666) }
|
||||
#local AngleCam = 31.0;
|
||||
#break
|
||||
#case (2)
|
||||
object { HoleBorder_B (2.222) }
|
||||
#break
|
||||
#case (3)
|
||||
object { HorlogeDouble scale 2 rotate -y*(6*clock) }
|
||||
object { Repere translate y*1 }
|
||||
#break
|
||||
#case (4)
|
||||
object { Blob_Boxed
|
||||
scale 4.000
|
||||
rotate <7, 0, 12> translate 3.7*y
|
||||
}
|
||||
#break
|
||||
#case (5)
|
||||
object { Anemone_A (3.10-NormClock, 1.50+NormClock)
|
||||
translate < 4, 0, 0> }
|
||||
object { Anemone_A (2.40-NormClock, 2.50+NormClock)
|
||||
translate <-4, 0, 0> }
|
||||
object { Anemone_A (1.40+NormClock, 1.50*NormClock)
|
||||
translate < 0, 0, -4> }
|
||||
object { Anemone_A (1.40+NormClock, 1.50-NormClock)
|
||||
translate < 0, 0, 4> }
|
||||
object { Repere }
|
||||
#break
|
||||
#case (6)
|
||||
object { HexaStar scale 3 rotate y*(clock*1.5) translate y*3.5 }
|
||||
#break
|
||||
#case (7)
|
||||
#local Pos = <0.5-NormClock, 0, 0>;
|
||||
object { ProtoTextures rotate -y*(55*Cos_01(NormClock)) }
|
||||
#break
|
||||
|
||||
#end // switch selector
|
||||
|
||||
plane {
|
||||
y, 0
|
||||
texture { Ground_Texture }
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
|
||||
#local CamX = -2.7 + (1.8*Cos_010(NormClock));
|
||||
#local CamY = 0.61 + (0.9*exp(NormClock));
|
||||
#local CamZ = -5.777 + (1.2*Cos_01(NormClock));
|
||||
|
||||
#local K = 8.6;
|
||||
#local CamX = CamX * K;
|
||||
#local CamY = CamY * K * 0.41;
|
||||
#local CamZ = CamZ * K;
|
||||
|
||||
camera {
|
||||
location <-3, 2, 1>
|
||||
look_at <0, 0.6, 0>
|
||||
angle 10
|
||||
orthographic
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <0, 1.5, 0>
|
||||
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle AngleCam
|
||||
}
|
||||
|
||||
25
fonctions.sh
25
fonctions.sh
@@ -1,25 +0,0 @@
|
||||
|
||||
set -eu
|
||||
|
||||
ff_encodage()
|
||||
{
|
||||
ffmpeg -nostdin \
|
||||
-y -r 30 -f image2 -i frames/%05d.png \
|
||||
-metadata artist='--[ tTh ]--' \
|
||||
-metadata title='-- HexaCone --' \
|
||||
-c:v libx264 \
|
||||
-pix_fmt yuv420p \
|
||||
-tune film \
|
||||
wip.mp4
|
||||
}
|
||||
|
||||
mp_encodage()
|
||||
{
|
||||
mencoder 'mf://frames/*.png' \
|
||||
-mf \
|
||||
fps=30 \
|
||||
-ovc lavc \
|
||||
-lavcopts vcodec=mpeg4 \
|
||||
-o output.avi
|
||||
}
|
||||
|
||||
19
frames/README.md
Normal file
19
frames/README.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# Le silo des frames
|
||||
|
||||
Avant tout, il faut créer ces répertoires :
|
||||
|
||||
```
|
||||
frames/
|
||||
+--- essai
|
||||
+--- orbite
|
||||
+--- passage
|
||||
+--- scene
|
||||
+--- scene
|
||||
+--- orbite
|
||||
+--- survol
|
||||
+--- escadrille
|
||||
+--- topview
|
||||
+--- Spool
|
||||
```
|
||||
|
||||
|
||||
331
gadgets.inc
Normal file
331
gadgets.inc
Normal file
@@ -0,0 +1,331 @@
|
||||
/*
|
||||
* H E X A C O N E - G A D G E T S
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
/* ======================================================= */
|
||||
/* moved here from 'contexte.inc' */
|
||||
#declare Repere = object
|
||||
{
|
||||
union {
|
||||
#local R = 0.015;
|
||||
#local R2 = R * 2.33;
|
||||
#local LC = 1.15;
|
||||
merge {
|
||||
cylinder { 0, <1, 0, 0>, R }
|
||||
cone { <1, 0, 0>, R2, <LC, 0, 0>, 0 }
|
||||
texture { R_Texture }
|
||||
}
|
||||
merge {
|
||||
cylinder { 0, <0, 1, 0>, R }
|
||||
cone { <0, 1, 0>, R2, <0, LC, 0>, 0 }
|
||||
texture { G_Texture }
|
||||
}
|
||||
merge {
|
||||
cylinder { 0, <0, 0, 1>, R }
|
||||
cone { <0, 0, 1>, R2, <0, 0, LC>, 0 }
|
||||
texture { B_Texture }
|
||||
}
|
||||
}
|
||||
}
|
||||
#declare Fleche = object
|
||||
{
|
||||
union {
|
||||
cylinder { -5*x, 5*x, 0.09 }
|
||||
cone { 5*x, 0.27, 6.66*x, 0.00007 }
|
||||
}
|
||||
texture { LeGris }
|
||||
}
|
||||
// ------------------------------------------------------ ##
|
||||
|
||||
#declare R_C = 0.335;
|
||||
|
||||
/* ce truc mérite un nom plus parlant ! */
|
||||
#macro Chose_le_pied ()
|
||||
merge {
|
||||
#local RCP = R_C * 0.666;
|
||||
cylinder { 0, y/2, 0.07 }
|
||||
sphere { 0, RCP scale <1, 0.17, 1> translate y*0.125 }
|
||||
cylinder { 0, y*0.125, RCP }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.25) texture { tPlasticOrange }
|
||||
#elseif (R < 0.50) texture { tPlasticBlue }
|
||||
#elseif (R < 0.75) texture { tPlasticPrune }
|
||||
#else texture { tPlasticGreen }
|
||||
#end // if
|
||||
}
|
||||
// #debug "== Fin chose le pied\n"
|
||||
#end // macro
|
||||
// ------------------------------------------------------ ##
|
||||
/*
|
||||
* Il doit être possible de dissocier le noyau des tiges
|
||||
* 29 novembre 2025, je tente l'expérience
|
||||
*/
|
||||
#macro Chose_les_tiges ()
|
||||
union {
|
||||
#local CK = NormClock * (7.876+rand(Rng1));
|
||||
#for (Foo, 0, 7)
|
||||
#local CK2 = CK + Foo;
|
||||
#local C2X = (R_C + 0.1) * sin(CK2+rand(Rng1)) * sin(CK*3);
|
||||
#local C2Z = (R_C + 0.1) * (sin(-CK2+rand(Rng1)) *
|
||||
cos(CK*(rand(Rng1))));
|
||||
#local Rt = 0.015+(0.03*Cos_010(NormClock));
|
||||
#local B = <0, -0.05, 0>;
|
||||
#local H = 0.80;
|
||||
cylinder { B, <C2X, H, C2Z>, Rt }
|
||||
sphere { <C2X, H, C2Z>, Rt }
|
||||
#end
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.25) texture { tPlasticOrange }
|
||||
#elseif (R < 0.50) texture { tPlasticBlue }
|
||||
#elseif (R < 0.75) texture { tPlasticPrune }
|
||||
#else texture { tPlasticGreen }
|
||||
#end // if
|
||||
translate y*0.87
|
||||
}
|
||||
// #debug "== Fin chose les tiges\n"
|
||||
#end // macro
|
||||
// ------------------------------------------------------ ##
|
||||
#macro Chose_le_corps () // = object
|
||||
difference {
|
||||
#local H = 0.42 + (0.10 * rand(Rng1));
|
||||
cone { 0, R_C*0.52, y*H, R_C }
|
||||
sphere { y*H, R_C*0.75 }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.25) texture { tPlasticOrange }
|
||||
#elseif (R < 0.50) texture { tPlasticBlue }
|
||||
#elseif (R < 0.75) texture { tPlasticPrune }
|
||||
#else texture { tPlasticGreen }
|
||||
#end // if
|
||||
translate y*0.48
|
||||
}
|
||||
// #debug "== Fin chose le corps\n"
|
||||
#end // macro
|
||||
// ------------------------------------------------------ ##
|
||||
#macro Chose ()
|
||||
union {
|
||||
Chose_le_pied ()
|
||||
Chose_le_corps ()
|
||||
Chose_les_tiges ()
|
||||
}
|
||||
#end // macro
|
||||
|
||||
/* ======================================================= */
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#declare HexaBlob = object
|
||||
{
|
||||
#declare RHBlo = 0.24;
|
||||
#declare RHBlo2 = RHBlo * 0.777;
|
||||
blob {
|
||||
// threshold 0.01 + NormClock
|
||||
threshold 0.07
|
||||
sphere { <0, 0, 0>, RHBlo, 1 }
|
||||
#local E = RHBlo * 1.210; // XXX
|
||||
#local W = 0.15;
|
||||
sphere { <-E, 0, 0>, RHBlo2, W }
|
||||
sphere { < E, 0, 0>, RHBlo2, W }
|
||||
sphere { < 0, -E, 0>, RHBlo2, W }
|
||||
sphere { < 0, E, 0>, RHBlo2, W }
|
||||
sphere { < 0, 0, -E>, RHBlo2, W }
|
||||
sphere { < 0, 0, E>, RHBlo2, W }
|
||||
}
|
||||
texture { T_WIP_bluewave scale 0.21 rotate <clock, clock/2, clock/3> }
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
/*
|
||||
* 18 février 2026, cette horloge mérite vraiment
|
||||
* d'être refaite de fond en comble, parce que ce
|
||||
* code est vraiment gruik.
|
||||
*/
|
||||
|
||||
#declare Horloge = object
|
||||
{
|
||||
#local Texte = str(NormClock, 6, 3);
|
||||
#debug concat("Texte horloge ", Texte, "\n\n")
|
||||
|
||||
text {
|
||||
// ttf "datas/DSEG7Classic-Regular.ttf" Texte 0.1, 0
|
||||
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
|
||||
texture { tPlasticBlue }
|
||||
}
|
||||
scale 1.96
|
||||
rotate 90*x
|
||||
translate <-4.5, 0.046, 0>
|
||||
}
|
||||
// ----------------------------------------------------------
|
||||
// nouveau du 3 janvier 2026
|
||||
#local Horloge2 = object
|
||||
{
|
||||
object { Horloge scale <1, 0.28, 1> rotate -x*90
|
||||
translate <0.802, 0.18, 0> }
|
||||
}
|
||||
#declare HorlogeDouble = object
|
||||
{
|
||||
union {
|
||||
box { <-3.10, 0.0, -0.06>, <3.10, 1.68, 0.06>
|
||||
texture { LeGris } }
|
||||
#local EC = 0.18;
|
||||
object { Horloge2 rotate y*180 translate z*EC }
|
||||
object { Horloge2 translate -z*EC }
|
||||
}
|
||||
scale 0.42
|
||||
translate y*0.666
|
||||
}
|
||||
// =======================================================
|
||||
/*
|
||||
* need more work !
|
||||
*/
|
||||
#macro Base_hexapole ()
|
||||
prism {
|
||||
linear_sweep
|
||||
linear_spline
|
||||
0, // sweep the following shape from here ...
|
||||
1, // ... up through here
|
||||
7, // the number of points making up the shape ...
|
||||
<3,5>, <-3,5>, <-5,0>, <-3,-5>, <3, -5>, <5,0>, <3,5>
|
||||
#if (rand(Rng1) < 0.5) texture { T_Beton_1 }
|
||||
#else texture { T_Beton_2 }
|
||||
#end // if
|
||||
scale 0.621 // WTF ?
|
||||
/* Pourquoi ce scale ?
|
||||
* parce que la spline est 'hardcoded' quelques
|
||||
* lignes plus haut, et qu'il y a des méthodes
|
||||
* probablement bien tordues pour rendre ça en
|
||||
* même temps kitch et technofutile
|
||||
*/
|
||||
}
|
||||
#end // macro
|
||||
// ------------------------------------------------------ ##
|
||||
|
||||
#macro HexaPole_tubes ()
|
||||
#local R = 0.033;
|
||||
#local E = 0.49;
|
||||
#local H = H_cone*0.705;
|
||||
union {
|
||||
#for (A, 0, 359, 60)
|
||||
#local Xp = E * cos(radians(A));
|
||||
#local Zp = E * sin(radians(A));
|
||||
union {
|
||||
#local H2 = H + rand(Rng1) + rand(Rng1);
|
||||
cylinder { 0, y*H2, R }
|
||||
sphere { 0, R*3 scale <1, 0.555, 1> }
|
||||
sphere { 0, R*2 scale <1, 1.555, 1> translate y*H2 }
|
||||
#local Ra = rand(Rng1);
|
||||
#if (Ra < 0.25) texture { T_Chrome_1A }
|
||||
#elseif (Ra < 0.50) texture { T_Chrome_4D }
|
||||
#elseif (Ra < 0.75) texture { T_Brass_2C }
|
||||
#else texture { Soft_Silver }
|
||||
#end
|
||||
translate <Xp, 0, Zp>
|
||||
}
|
||||
#end
|
||||
}
|
||||
|
||||
#undef E
|
||||
#undef H
|
||||
#undef R
|
||||
#end
|
||||
// ------------------------------------------------------ ##
|
||||
/*
|
||||
* l'assemblage en grand cercle de ces trucs est
|
||||
* dans le fichier "contexte.inc"
|
||||
*/
|
||||
|
||||
#macro HexaPole ()
|
||||
union {
|
||||
object { Base_hexapole () scale <0.24, 0.2, 0.24> }
|
||||
object { HexaPole_tubes () translate y*0.15 }
|
||||
rotate y*(53*rand(Rng1))
|
||||
}
|
||||
#end // macro
|
||||
|
||||
// =======================================================
|
||||
#macro OpenBox (D, R)
|
||||
union {
|
||||
/* les verticales */
|
||||
cylinder { <-D, -D, -D>, <-D, D, -D>, R }
|
||||
cylinder { < D, -D, -D>, < D, D, -D>, R }
|
||||
cylinder { <-D, -D, D>, <-D, D, D>, R }
|
||||
cylinder { < D, -D, D>, < D, D, D>, R }
|
||||
|
||||
/* en bas */
|
||||
cylinder { < D, -D, D>, <-D, -D, D>, R }
|
||||
cylinder { < D, -D, -D>, <-D, -D, -D>, R }
|
||||
cylinder { <-D, -D, D>, <-D, -D, -D>, R }
|
||||
cylinder { < D, -D, D>, < D, -D, -D>, R }
|
||||
|
||||
/* en haut */
|
||||
cylinder { < D, D, D>, <-D, D, D>, R }
|
||||
cylinder { < D, D, -D>, <-D, D, -D>, R }
|
||||
cylinder { <-D, D, D>, <-D, D, -D>, R }
|
||||
cylinder { < D, D, D>, < D, D, -D>, R }
|
||||
|
||||
/* les 8 coins */
|
||||
#local R2 = R * 1.38;
|
||||
sphere { <-D, -D, -D>, R2 }
|
||||
sphere { < D, -D, -D>, R2 }
|
||||
sphere { <-D, -D, D>, R2 }
|
||||
sphere { < D, -D, D>, R2 }
|
||||
sphere { <-D, D, -D>, R2 }
|
||||
sphere { < D, D, -D>, R2 }
|
||||
sphere { <-D, D, D>, R2 }
|
||||
sphere { < D, D, D>, R2 }
|
||||
|
||||
texture { Soft_Silver scale 6.50 }
|
||||
}
|
||||
#end
|
||||
// ----------------------------------------------------------- ##
|
||||
/* XXX +++ make this a #macro +++ */
|
||||
#declare Blob_Boxed = object
|
||||
{
|
||||
union {
|
||||
object { OpenBox(0.5, 0.01) }
|
||||
object { HexaBlob rotate <clock*0.9, clock*0.7, clock*0.5> }
|
||||
}
|
||||
}
|
||||
// =======================================================
|
||||
/*
|
||||
* first written macro for testing the generation of
|
||||
* differente instances of the same shape.
|
||||
*/
|
||||
#macro Bubble ()
|
||||
sphere {
|
||||
0, 0.070 + 0.056*rand(Rng1)
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.25 ) texture { Ruby_Glass }
|
||||
#elseif ( R < 0.50 ) texture { Orange_Glass }
|
||||
#elseif ( R < 0.75 ) texture { Shadow_Clouds }
|
||||
#else texture { Gold_Nugget }
|
||||
#end
|
||||
#undef R
|
||||
scale <1.414, 1.000, 1.414>
|
||||
}
|
||||
#end
|
||||
|
||||
#macro Un_Machin ()
|
||||
union {
|
||||
#for (Y, 1, 8, 1)
|
||||
object { Bubble() translate y*Y*0.115 }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
// ------------------------------------------------------ ##
|
||||
|
||||
#declare Les_Machins = object
|
||||
{
|
||||
union {
|
||||
#local Rk = 3.60 + NormClock;
|
||||
#for (foo, 0, 359, 45)
|
||||
#local Xpos = Rk * sin(radians(foo));
|
||||
#local Zpos = Rk * cos(radians(foo));
|
||||
object { Un_Machin () translate <Xpos, 0.22, Zpos> }
|
||||
#end
|
||||
#undef Rk
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
3
gif89a/README.md
Normal file
3
gif89a/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
|
||||
|
||||
Space for the flashy Compuserve pictures.
|
||||
287
globals.inc
Normal file
287
globals.inc
Normal file
@@ -0,0 +1,287 @@
|
||||
|
||||
global_settings {
|
||||
assumed_gamma 1.0
|
||||
ambient_light rgb <0.48, 0.49, 0.48>
|
||||
max_trace_level 15
|
||||
}
|
||||
|
||||
#include "colors.inc"
|
||||
#include "metals.inc"
|
||||
#include "textures.inc"
|
||||
#include "stones.inc"
|
||||
#include "woods.inc"
|
||||
|
||||
#declare Rng1 = seed(1221);
|
||||
#declare foo = rand(Rng1);
|
||||
#declare Rng2 = seed(now*24*60*60);
|
||||
#declare bar = rand(Rng2);
|
||||
|
||||
#declare NormClock = clock / (NbFrames - 1);
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
* Some constants...
|
||||
*/
|
||||
|
||||
#declare SzSol = 36;
|
||||
#declare H_sol = 0.000; // c'est quoi exactement ?
|
||||
|
||||
#declare SzBase = 2.97;
|
||||
#declare H_base = 0.23;
|
||||
|
||||
#declare R_basecone = 0.117;
|
||||
#declare H_cone = 0.97;
|
||||
|
||||
#declare R_gyro = 0.14;
|
||||
#declare H_gyro = 1.80;
|
||||
#declare H_gylampe = 0.25;
|
||||
|
||||
#declare H_QuadriLight = 37;
|
||||
#declare E_QuadriLight = SzSol * 1.35;
|
||||
|
||||
#declare R_circular = (SzSol * 1.60);
|
||||
|
||||
#declare R_hole = 3.1; // holes in the background
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
* Some textures...
|
||||
*/
|
||||
|
||||
#declare LeGris = texture
|
||||
{
|
||||
/* moi j'dis qu'il est temps de définir un "gris de base" */
|
||||
pigment { color Gray70 }
|
||||
finish { phong 0.33 ambient 0.33 }
|
||||
}
|
||||
|
||||
#declare T_WIP_color = texture
|
||||
{
|
||||
#local V = (sin(clock*0.142) / 2) + 0.5;
|
||||
pigment { color Orange * V }
|
||||
finish { phong 0.23 ambient 0.30 }
|
||||
}
|
||||
|
||||
#declare T_WIP_alert = texture
|
||||
{
|
||||
pigment { color Red }
|
||||
finish { ambient 1 specular 0.80 }
|
||||
}
|
||||
|
||||
#declare T_Planete_A = texture
|
||||
{
|
||||
pigment { color rgb <0.20, 0.30, 0.10> }
|
||||
normal { dents 0.28 scale 0.5}
|
||||
finish { phong 0.70 reflection 0.05 }
|
||||
}
|
||||
#declare T_Planete_B = texture
|
||||
{
|
||||
pigment { rgb <0.42, 0.50, 0.70> }
|
||||
normal { dents 0.14 scale 0.5}
|
||||
finish { metallic 0.50 reflection 0.33 }
|
||||
}
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
* deux textures pour faire des batiments
|
||||
*/
|
||||
#declare T_Beton_1 = texture
|
||||
{
|
||||
pigment { color <0.9, 0.8, 0.7> }
|
||||
normal { dents 1.75 scale 0.3 }
|
||||
finish { roughness 1.00 }
|
||||
}
|
||||
|
||||
#declare T_Beton_2 = texture
|
||||
{
|
||||
pigment { color <0.7, 0.6, 0.4> }
|
||||
normal { dents 0.35 scale 3 }
|
||||
finish { roughness 1.00 }
|
||||
}
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
* XXX the finish need a refactoring
|
||||
*/
|
||||
#declare tPlasticOrange = texture
|
||||
{
|
||||
pigment{rgb <2.000, 0.50, 0.0>}
|
||||
finish {
|
||||
ambient 0.1
|
||||
diffuse 0.6
|
||||
specular 0.4
|
||||
}
|
||||
}
|
||||
|
||||
#declare tPlasticGreen = texture
|
||||
{
|
||||
pigment{rgb <0.20, 1.600, 0.0>}
|
||||
finish {
|
||||
ambient 0.1
|
||||
diffuse 0.6
|
||||
specular 0.4
|
||||
}
|
||||
}
|
||||
|
||||
#declare tPlasticBlue = texture
|
||||
{
|
||||
pigment{rgb <0.20, 0, 2.0>}
|
||||
finish {
|
||||
ambient 0.1
|
||||
diffuse 0.6
|
||||
specular 0.4
|
||||
}
|
||||
}
|
||||
#declare tPlasticPrune = texture
|
||||
{
|
||||
pigment{rgb <1.50, 0.30, 1.50>}
|
||||
finish {
|
||||
ambient 0.1
|
||||
diffuse 0.6
|
||||
specular 0.4
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* this texture will be clock dependent XXX */
|
||||
#declare Flashy = texture {
|
||||
pigment {
|
||||
onion
|
||||
colour_map {
|
||||
[0.00, Red * 0.70 ]
|
||||
[0.33, Gray40 ]
|
||||
[1.00, Blue * 0.70 ]
|
||||
}
|
||||
turbulence 3.14159 + sin(NormClock*3.14159)
|
||||
scale 0.50
|
||||
}
|
||||
finish {
|
||||
emission 0 ambient 0.717 diffuse 0.209 specular 0
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* new: 28 octobre 2025 */
|
||||
#declare Ground_Texture = texture
|
||||
{
|
||||
pigment { rgb <0.31, 0.33, 0.24> }
|
||||
normal { dents 0.22 scale 1.666}
|
||||
finish {
|
||||
ambient 0 specular 0.3 metallic roughness 0.33
|
||||
reflection { 0.21 metallic }
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
* Textures avec les six teintes "de base"
|
||||
*/
|
||||
#declare R_Texture = texture {
|
||||
pigment { rgb <1.0, 0.0, 0.0> } finish { ambient 0.33 } }
|
||||
#declare G_Texture = texture {
|
||||
pigment { rgb <0.0, 1.0, 0.0> } finish { ambient 0.33 } }
|
||||
#declare B_Texture = texture {
|
||||
pigment { rgb <0.0, 0.0, 1.0> } finish { ambient 0.33 } }
|
||||
|
||||
#declare Y_Texture = texture {
|
||||
pigment { rgb <0.8, 0.8, 0.0> } finish { ambient 0.33 } }
|
||||
#declare M_Texture = texture {
|
||||
pigment { rgb <0.8, 0.0, 0.8> } finish { ambient 0.33 } }
|
||||
#declare C_Texture = texture {
|
||||
pigment { rgb <0.0, 0.8, 0.8> } finish { ambient 0.33 } }
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* nouvelle texture du début du jour de l'hiver 2025 */
|
||||
|
||||
#declare T_WIP_rasta = texture
|
||||
{
|
||||
pigment {
|
||||
granite
|
||||
color_map {
|
||||
[0.00 color Black ]
|
||||
[0.30 color Red ]
|
||||
[0.50 color Green ]
|
||||
[0.70 color Yellow ]
|
||||
[1.00 color Black ]
|
||||
}
|
||||
}
|
||||
finish { phong 0.23 ambient 0.30 }
|
||||
scale <3, 4, 3>
|
||||
}
|
||||
/* ------------------------------------------------------------ */
|
||||
/* nouveau du lundi d'après noël 2025 */
|
||||
|
||||
#declare T_WIP_bluewave = texture
|
||||
{
|
||||
pigment {
|
||||
wood
|
||||
color_map {
|
||||
[0.0 color Gray60 ]
|
||||
[0.5 color Gray80 ]
|
||||
[0.5 color Blue ]
|
||||
[1.0 color Blue ]
|
||||
}
|
||||
turbulence 0.04
|
||||
translate <NormClock*0.1, sqrt(NormClock*0.4),
|
||||
NormClock*0.333>
|
||||
scale <0.2, 0.3, 1>
|
||||
}
|
||||
finish { phong 1 }
|
||||
}
|
||||
|
||||
#declare T_WIP_redwave = texture
|
||||
{
|
||||
pigment {
|
||||
wood
|
||||
color_map {
|
||||
[0.0 color Gray60 ]
|
||||
[0.49 color Gray80 ]
|
||||
[0.51 color Red ]
|
||||
[1.0 color Red ]
|
||||
}
|
||||
turbulence 0.14
|
||||
translate <NormClock*0.5, sqrt(NormClock*0.49),
|
||||
NormClock*0.6>
|
||||
scale <0.7, 0.23, 1>
|
||||
}
|
||||
finish { ambient 0.7 }
|
||||
}
|
||||
|
||||
// le 10 fevrier 2026 -----------------
|
||||
#declare T_WIP_dents = texture
|
||||
{
|
||||
pigment { color <0.36, 0.6, 0.79> }
|
||||
normal { dents 2.94 scale 0.15 }
|
||||
rotate <12, 34, 56>
|
||||
finish { specular 0.40 ambient 0.59 }
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#declare GoldDark = texture
|
||||
{
|
||||
pigment{ rgb <0.81, 0.71, 0.23> }
|
||||
finish{ diffuse 0.5 ambient 0 specular 1 metallic roughness 0.01
|
||||
reflection{0.6 metallic}
|
||||
}
|
||||
} // This is a metal.
|
||||
|
||||
/* ============================================================ */
|
||||
/*
|
||||
* Usefull macros
|
||||
*/
|
||||
#macro Cos_01( X )
|
||||
(0.5-0.5*cos( 3.141592654 * X))
|
||||
#end
|
||||
#macro Cos_010( X )
|
||||
(0.5-0.5*cos( 2 * 3.141592654 * X))
|
||||
#end
|
||||
|
||||
/* Interpolate */
|
||||
#macro Interpolate(A, B, pos)
|
||||
#local resultat = ( (B-A) * pos) +A;
|
||||
resultat
|
||||
#end
|
||||
|
||||
/* ============================================================ */
|
||||
|
||||
#debug "\n GLOBALS INCLUDED\n"
|
||||
|
||||
156
groundbase.inc
Normal file
156
groundbase.inc
Normal file
@@ -0,0 +1,156 @@
|
||||
/*
|
||||
* _ _
|
||||
* __ _ _ __ ___ _ _ _ __ __| || |__ __ _ ___ ___
|
||||
* / _` || '__|/ _ \ | | | || '_ \ / _` || '_ \ / _` |/ __| / _ \
|
||||
* | (_| || | | (_) || |_| || | | || (_| || |_) || (_| |\__ \| __/
|
||||
* \__, ||_| \___/ \__,_||_| |_| \__,_||_.__/ \__,_||___/ \___|
|
||||
* |___/
|
||||
*
|
||||
* nouveau debut fevrier 2025 - we love raytracing
|
||||
*
|
||||
* une cabane pour faire riche.
|
||||
* une seule forme de cabane pour le moment
|
||||
*/
|
||||
#declare Base_cabane_forme = object
|
||||
{
|
||||
difference {
|
||||
#local Hc = 0.90;
|
||||
box { <-0.90, 0, 0>, <0.90, Hc, 0.80> }
|
||||
box { <-0.89, 0.01, -1> <0.89, Hc-0.01, 0.79> }
|
||||
#local Hc = Hc * 0.75;
|
||||
cylinder { <-1, Hc, -0.29>, <1, Hc, 0.29>, 0.09 }
|
||||
#undef Hc
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* comparaison des deux textures par le rendu
|
||||
* de la meme forme de cabane.
|
||||
*/
|
||||
#declare Cabane_Base_1 = object
|
||||
{
|
||||
object { Base_cabane_forme }
|
||||
texture { T_Beton_1 }
|
||||
}
|
||||
|
||||
#declare Cabane_Base_2 = object
|
||||
{
|
||||
object { Base_cabane_forme }
|
||||
texture { T_Beton_2 }
|
||||
}
|
||||
// ------------------------------------------------------ ##
|
||||
|
||||
#declare Compteur = object
|
||||
{
|
||||
#local Texte = str(clock, 3, 0);
|
||||
#debug concat("Texte du compteur ", Texte, "\n\n")
|
||||
text {
|
||||
ttf "datas/ComicMono-Bold.ttf" Texte 0.1, 0
|
||||
// texture { T_WIP_alert }
|
||||
texture { T_WIP_bluewave rotate <clock, clock, clock>
|
||||
scale 0.79 }
|
||||
}
|
||||
}
|
||||
#declare Cabane_Compteur = object
|
||||
{
|
||||
union {
|
||||
object { Compteur scale 0.666
|
||||
translate <-0.46, 0.22, 0.32> }
|
||||
object { Cabane_Base_2 }
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
#declare GroundBase_Sol = object
|
||||
{
|
||||
intersection {
|
||||
height_field {
|
||||
png "datas/hf.png" smooth
|
||||
translate <-.5, 0, -.5>
|
||||
#local SC = SzSol * 1.111;
|
||||
scale <SC, 0.95, SC>
|
||||
texture {
|
||||
pigment {
|
||||
image_map { png "datas/cuivre.png" }
|
||||
rotate x*90
|
||||
translate <-.5, 0, -.5>
|
||||
scale <SC, 1, SC>
|
||||
}
|
||||
}
|
||||
}
|
||||
cylinder { -y*5, y*5, SzSol*0.52 }
|
||||
}
|
||||
finish { phong 0.096 }
|
||||
translate y*H_sol
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
#declare GroundBase_a = object
|
||||
{
|
||||
/*
|
||||
le soubassement de l'abribus
|
||||
*/
|
||||
union {
|
||||
#local Dx = 1.5;
|
||||
#local Dz = 1.0;
|
||||
box { <-Dx, 0, -Dz>, <Dx, H_base, Dz> }
|
||||
#local Ha = y*(H_base*3);
|
||||
cylinder { 0, Ha, 0.08 translate < Dx, 0, -Dz> }
|
||||
cylinder { 0, Ha, 0.08 translate <-Dx, 0, -Dz> }
|
||||
#local Hb = Ha * 1.17;
|
||||
cone { Ha, 0.08, Hb, 0.05 translate < Dx, 0, -Dz> }
|
||||
cone { Ha, 0.08, Hb, 0.05 translate <-Dx, 0, -Dz> }
|
||||
#undef Ha
|
||||
#undef Hb
|
||||
#undef Dx
|
||||
#undef Dz
|
||||
}
|
||||
texture { T_Grnt7 rotate 49 scale 0.333 }
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#declare GroudBase_coin = object
|
||||
{
|
||||
merge {
|
||||
cylinder { 0, y*0.5, 0.14 }
|
||||
sphere { 0, 0.14 scale <1, 0.25, 1> translate y*0.5 }
|
||||
}
|
||||
}
|
||||
|
||||
#declare GroundBase_estrade = object
|
||||
{
|
||||
#local Sz = SzBase - 0.14;
|
||||
#local Hc = H_base;
|
||||
union {
|
||||
box { <-SzBase, 0, -SzBase>, <SzBase, H_base, SzBase> }
|
||||
object { GroudBase_coin translate <-Sz, Hc, -Sz> }
|
||||
object { GroudBase_coin translate < Sz, Hc, -Sz> }
|
||||
object { GroudBase_coin translate <-Sz, Hc, Sz> }
|
||||
object { GroudBase_coin translate < Sz, Hc, Sz> }
|
||||
}
|
||||
texture { T_Grnt27 rotate 9 scale 0.302 }
|
||||
#undef Sz
|
||||
#undef Hc
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#declare La_GroundBase = object
|
||||
{
|
||||
union {
|
||||
object { GroundBase_Sol }
|
||||
object { GroundBase_estrade translate y*H_sol }
|
||||
/*
|
||||
* ici, mettre la cabane
|
||||
*/
|
||||
#local Dz = <0, 0, -7>;
|
||||
object { GroundBase_a translate Dz }
|
||||
object { Cabane_Compteur rotate y*180
|
||||
translate Dz + y*H_base }
|
||||
#undef Dz
|
||||
}
|
||||
translate y*(H_sol+H_base) // XXX Why ?
|
||||
}
|
||||
|
||||
/* ======================================================= */
|
||||
211
hexabenz.inc
Normal file
211
hexabenz.inc
Normal file
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* H E X A B E N Z
|
||||
*/
|
||||
// =======================================================
|
||||
|
||||
#macro Benz_Cone_Base () // = object
|
||||
// {
|
||||
union {
|
||||
#local RA = R_basecone;
|
||||
#local RB = 0.001;
|
||||
difference {
|
||||
cone { 0, RA, y*0.89, 0.0001 }
|
||||
cone { 0, RA, y*0.89, 0.0001 translate -0.014*y }
|
||||
}
|
||||
difference {
|
||||
sphere { 0, RA*1.098 scale <1, 0.58, 3.03> }
|
||||
sphere { 0, RA*1.096 scale <1, 0.58, 3.03> }
|
||||
translate -0.02*y
|
||||
}
|
||||
}
|
||||
// }
|
||||
#end
|
||||
// ------------------------------------------------------
|
||||
/* nouveau Fri Oct 17 05:54:38 PM UTC 2025 */
|
||||
#macro Benz_attache_cones (Ec)
|
||||
torus { Ec, Ec*0.06
|
||||
scale <1, 2.4, 1> rotate x*90
|
||||
#if ( rand(Rng1) < 0.55 )
|
||||
texture { GoldDark }
|
||||
#else
|
||||
texture { T_Brass_1C }
|
||||
#end
|
||||
}
|
||||
#end // macro
|
||||
|
||||
// ------------------------------------------------------
|
||||
|
||||
#macro Benz_Cones () // = object
|
||||
// {
|
||||
union {
|
||||
#for (foo, 0, 360, 60)
|
||||
#local E = 0.31;
|
||||
#local Tx = E * sin(radians(foo));
|
||||
#local Ty = E * cos(radians(foo));
|
||||
object {
|
||||
Benz_Cone_Base ()
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.3333 )
|
||||
texture { T_Silver_2C scale 11.50 }
|
||||
#elseif ( R < 0.6666 )
|
||||
texture { T_Brass_2C scale 13.50 }
|
||||
#else
|
||||
texture { T_Brass_4A scale 13.50 }
|
||||
#end
|
||||
rotate -z*foo
|
||||
translate <Tx, Ty, 0>
|
||||
}
|
||||
#end // end for
|
||||
#local SBAC = 0.300;
|
||||
object { Benz_attache_cones (SBAC) translate -z*0.175 }
|
||||
object { Benz_attache_cones (SBAC) translate z*0.202 }
|
||||
}
|
||||
#end
|
||||
|
||||
// ------------------------------------------------------
|
||||
|
||||
#declare R_Tube = 0.17;
|
||||
#local L_Tube = 0.54;
|
||||
|
||||
#macro Benz_Tubules ()
|
||||
merge {
|
||||
#local E = R_Tube * 0.75;
|
||||
#local R = 0.009;
|
||||
#for (foo, 0, 360, 30)
|
||||
#local Tx = E * sin(radians(foo));
|
||||
#local Ty = E * cos(radians(foo));
|
||||
#local Dza = z * 0.27;
|
||||
#local Dzb = z * 0.97;
|
||||
cylinder { -Dza, Dzb, R translate <Tx, Ty, 0> }
|
||||
sphere { -Dza, R*1.8 translate <Tx, Ty, 0> }
|
||||
sphere { Dzb, R*1.8 translate <Tx, Ty, 0> }
|
||||
#end
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.320) texture { Orange_Glass }
|
||||
#elseif (R < 0.64) texture { Ruby_Glass }
|
||||
#else texture { Yellow_Glass }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
|
||||
#macro Benz_Fuseau ()
|
||||
difference {
|
||||
sphere { 0, R_Tube*0.39 }
|
||||
sphere { 0, R_Tube*0.37 }
|
||||
cylinder { <-1, 0, -1>, < 1, 0, 1>, R_Tube*0.21 }
|
||||
cylinder { < 1, 0, -1>, <-1, 0, 1>, R_Tube*0.21 }
|
||||
}
|
||||
scale <1, 1, 4.4>
|
||||
#if ( rand(Rng1) < 0.420) texture { Shadow_Clouds scale 0.56 }
|
||||
#else texture { Flashy }
|
||||
#end
|
||||
|
||||
#end // end macro
|
||||
|
||||
#declare Benz_Fuseau_Flash = object
|
||||
{
|
||||
union {
|
||||
object { Benz_Fuseau () }
|
||||
light_source { 0,
|
||||
rgb <rand(Rng2), rand(Rng2), rand(Rng2)>
|
||||
fade_distance 0.96
|
||||
fade_power 1.95
|
||||
}
|
||||
}
|
||||
rotate -z*clock*8
|
||||
}
|
||||
|
||||
// -------------------------------------------
|
||||
/*
|
||||
* This part need more work
|
||||
*/
|
||||
#local Forme_Cockpit = object
|
||||
{
|
||||
difference {
|
||||
sphere { 0, R_Tube*0.72 }
|
||||
sphere { 0, R_Tube*0.72 scale 0.99 }
|
||||
#for (Foo, 0, 359, 36)
|
||||
cylinder { x, 0, R_Tube*0.15
|
||||
translate y*(R_Tube*0.34)
|
||||
rotate y*Foo }
|
||||
#end
|
||||
}
|
||||
scale <1, 0.92, 1>
|
||||
translate z*L_Tube*1.18
|
||||
}
|
||||
|
||||
#declare Benz_Cylindre = object
|
||||
{
|
||||
#local E_tube = 0.02;
|
||||
#local R_int = R_Tube - E_tube;
|
||||
difference {
|
||||
union {
|
||||
cylinder { z*L_Tube*1.6, -z*L_Tube, R_Tube }
|
||||
/* les deux bouts du cylindre creux */
|
||||
#local R2 = (R_Tube + R_int) / 2;
|
||||
torus { R2, E_tube scale <1, 5, 1>
|
||||
rotate x*90 translate z*L_Tube*1.6 }
|
||||
torus { R2, E_tube scale <1, 5, 1>
|
||||
rotate x*90 translate -z*L_Tube }
|
||||
|
||||
/* cette sphere devrait devenir
|
||||
un vrai cockpit ? */
|
||||
object { Forme_Cockpit
|
||||
translate y*R_Tube*0.97}
|
||||
}
|
||||
cylinder { z*4, -z*4, R_int }
|
||||
}
|
||||
texture { Soft_Silver scale 6.0 }
|
||||
}
|
||||
|
||||
// ------------------------------------------------------
|
||||
// 1er janvier 2026, il est temps de s'y remettre */
|
||||
#macro Benz_Antenne ()
|
||||
union {
|
||||
#local RBA = 0.020;
|
||||
sphere { 0, RBA scale <1, 1, 10> }
|
||||
union {
|
||||
#local RBA2 = RBA*0.149;
|
||||
#local E = 0.018;
|
||||
cylinder { E*z, <0, 0.20, E>, RBA2 }
|
||||
cylinder { -E*z, <0, 0.20, E>, RBA2 }
|
||||
scale <1, 1, 5.555>
|
||||
}
|
||||
|
||||
#if ( mod(clock, 10+3*rand(Rng1)) < (10*rand(Rng1)) )
|
||||
texture { tPlasticPrune }
|
||||
#else texture { tPlasticGreen }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
// ------------------------------------------------------
|
||||
|
||||
#macro Benz_Tube ()
|
||||
// #declare Benz_Tube = object
|
||||
// {
|
||||
union {
|
||||
object { Benz_Tubules () }
|
||||
object { Benz_Fuseau_Flash translate z*0.35 }
|
||||
object { Benz_Cylindre }
|
||||
|
||||
/* XXX */
|
||||
object { Benz_Antenne ()
|
||||
translate <0, -0.37, 0.76>
|
||||
rotate z*45 }
|
||||
}
|
||||
// }
|
||||
#end
|
||||
|
||||
// ------------------------------------------------------
|
||||
|
||||
#macro HexaBenz ()
|
||||
// #declare HexaBenz = object
|
||||
// {
|
||||
union {
|
||||
#local Rk = (rand(Rng1)-0.54) * 1312;
|
||||
object { Benz_Cones () rotate z*NormClock*Rk}
|
||||
object { Benz_Tube () }
|
||||
}
|
||||
// }
|
||||
#end
|
||||
|
||||
29
hexabenz.pov
Normal file
29
hexabenz.pov
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* H E X A C O N E - H E X A B E N Z
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
#declare Loc_cam = <0.63, 2, 2*NormClock> + (Pos_RedB_0 * 1.32);
|
||||
|
||||
#declare Lat_Y = 1.21 + 0.16*NormClock;
|
||||
|
||||
camera {
|
||||
location Loc_cam
|
||||
look_at Pos_RedB_0 + <0, Lat_Y, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <0.37, 0.0, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 40 - 15 * Cos_01(NormClock)
|
||||
}
|
||||
|
||||
289
hexacone.inc
Normal file
289
hexacone.inc
Normal file
@@ -0,0 +1,289 @@
|
||||
/*
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#declare RA = R_basecone;
|
||||
// #declare RB = 0.001;
|
||||
|
||||
#declare HexaCone_shape = object
|
||||
{
|
||||
union {
|
||||
cone { 0, RA, <-1, 0, 0>, 0.0001 }
|
||||
cone { 0, RA, < 1, 0, 0>, 0.0001 }
|
||||
cone { 0, RA, < 0, 0, 1>, 0.0001 }
|
||||
cone { 0, RA, < 0, 0, -1>, 0.0001 }
|
||||
cone { 0, RA, < 0, 1, 0>, 0.0001 }
|
||||
cone { 0, RA, < 0, -1, 0>, 0.0001 }
|
||||
}
|
||||
}
|
||||
|
||||
#macro HexaCone_Body ()
|
||||
// #declare HexaCone_body = object
|
||||
// {
|
||||
union {
|
||||
difference {
|
||||
object { HexaCone_shape }
|
||||
object { HexaCone_shape scale 0.98 }
|
||||
sphere {0, 0.24 }
|
||||
cylinder { <-1, 0, 0.55>, <1, 0, 0.55>,
|
||||
RA*0.40 }
|
||||
}
|
||||
difference {
|
||||
sphere {0, 0.21 }
|
||||
sphere {0, 0.19 }
|
||||
cylinder {-x, x, 0.11 }
|
||||
cylinder {-y, y, 0.11 }
|
||||
cylinder {-z, z, 0.11 }
|
||||
}
|
||||
// XXX not very tested
|
||||
#local Sc = 3.57;
|
||||
#local Rt1 = 0.333;
|
||||
#local Rta = Rt1 / Sc;
|
||||
#local Rt2 = 0.0062;
|
||||
torus { Rta, Rt2 scale <Sc, 1, Sc> }
|
||||
torus { Rt1, Rt2 scale <1, Sc, 1> rotate x*90 }
|
||||
torus { Rta, Rt2 scale <Sc, 1, Sc> rotate z*90 }
|
||||
|
||||
// clignotement de la lumiere \o/
|
||||
#local kR = 0.065;
|
||||
#local xR = (rand(Rng2)-0.5000) * kR;
|
||||
#local yR = (rand(Rng2)-0.5000) * kR;
|
||||
#local zR = (rand(Rng2)-0.5000) * kR;
|
||||
#local Value = sin( (NormClock * 26.536) +
|
||||
(3.14*rand(Rng1)) );
|
||||
#if (Value < 0)
|
||||
#local Couleur = rgb <abs(Value), 0, 0>;
|
||||
#else
|
||||
#local Couleur = rgb <0, abs(Value), 0>;
|
||||
#end
|
||||
#local Couleur = Couleur * rand(Rng2);
|
||||
light_source {
|
||||
<xR, yR, xR>, Couleur
|
||||
fade_distance 0.99
|
||||
fade_power 1.58
|
||||
}
|
||||
}
|
||||
#if (rand(Rng1) < 0.30)
|
||||
texture { New_Penny }
|
||||
#else
|
||||
texture { GoldDark }
|
||||
#end
|
||||
// }
|
||||
#end // macro
|
||||
|
||||
// ---------------------------------------------------------
|
||||
/*
|
||||
*
|
||||
*/
|
||||
#local Branche_radar = object
|
||||
{
|
||||
#local D1 = 0.08;
|
||||
#local D2 = 0.0045;
|
||||
merge {
|
||||
cone { 0, D2, 0.08*y, 0.00007 }
|
||||
sphere { 0, D2*2.3 scale <1, 1.77, 1> }
|
||||
intersection {
|
||||
torus { D1, D2 }
|
||||
box { <2, -2, 2>, <0, 2, 0> }
|
||||
rotate x*90
|
||||
translate -D1*x
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#declare HexaCone_radar_A = object
|
||||
{
|
||||
union {
|
||||
#for (foo, 0, 360, 60)
|
||||
#local RR = 0.12;
|
||||
#local PX = RR * sin(radians(foo));
|
||||
#local PZ = RR * cos(radians(foo));
|
||||
object { Branche_radar
|
||||
rotate y*(foo-90)
|
||||
translate <PX, 0, PZ>
|
||||
}
|
||||
#end
|
||||
torus { 0.08, 0.0034 translate -0.08*y }
|
||||
}
|
||||
texture { Soft_Silver scale 6.50 }
|
||||
}
|
||||
|
||||
#declare HexaCone_radar_B = object
|
||||
{
|
||||
union {
|
||||
#for (foo, 0, 360, 60)
|
||||
#local RR = 0.12;
|
||||
#local PX = RR * sin(radians(foo));
|
||||
#local PZ = RR * cos(radians(foo));
|
||||
object { Branche_radar scale 2
|
||||
rotate y*(foo-90)
|
||||
translate <PX, 0, PZ>
|
||||
}
|
||||
#local R2 = 0.11;
|
||||
#end
|
||||
torus { R2, 0.0039 translate -0.08*y }
|
||||
}
|
||||
texture { GoldDark scale 6.50 }
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------
|
||||
* new Mon Dec 16 12:44:44 PM UTC 2024
|
||||
*/
|
||||
#local Une_derive = object
|
||||
{
|
||||
difference {
|
||||
merge {
|
||||
sphere { 0, 0.0141 scale <1, 1, 4.70>
|
||||
translate <0, 0.26, -0.17> }
|
||||
cone { <0, -0.1, 0>, 0.114, <0, 0.26, -0.17>, 0.0096
|
||||
scale <0.15, 1, 1> }
|
||||
}
|
||||
box { <-1, -1, -1>, <1, 0, 1> }
|
||||
}
|
||||
texture { Soft_Silver scale 6.0 }
|
||||
}
|
||||
#declare HexaCone_derives = object
|
||||
{
|
||||
union {
|
||||
object { Une_derive }
|
||||
object { Une_derive rotate 120*z }
|
||||
object { Une_derive rotate -120*z }
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------
|
||||
|
||||
#declare DTa = 0.278;
|
||||
#declare DTb = 0.030;
|
||||
|
||||
// XXX #declare HexaCone_head = object
|
||||
// XXX {
|
||||
#macro HexaCone_head ()
|
||||
merge {
|
||||
difference {
|
||||
torus { DTa, DTb }
|
||||
#local TB = 0.60;
|
||||
box { <-TB, -TB, TB>, <TB, TB, 0> }
|
||||
}
|
||||
sphere { 0, DTb*1.65 translate -DTa*x }
|
||||
sphere { 0, DTb*1.65 translate DTa*x }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.4)
|
||||
texture { Orange_Glass }
|
||||
#elseif (R < 0.8)
|
||||
texture { Dark_Green_Glass }
|
||||
#else
|
||||
texture { Flashy scale 2 }
|
||||
#end
|
||||
}
|
||||
#end // macro
|
||||
// XXX }
|
||||
|
||||
/* ------------------------------------------
|
||||
* new Sat Dec 21 11:17:36 PM UTC 2024
|
||||
*/
|
||||
#declare DXail = 0.0007;
|
||||
#declare DYail = 0.0039;
|
||||
#declare DZail = 0.031;
|
||||
|
||||
#declare Une_Ailettte = object
|
||||
{
|
||||
box { <-DXail, -DYail, -DZail> , <DXail, DYail, 0> }
|
||||
}
|
||||
|
||||
#macro Le_rotor ()
|
||||
union {
|
||||
#local Rrot = 0.0034;
|
||||
#local Lrot = 0.13;
|
||||
sphere { -x*Lrot, Rrot }
|
||||
cylinder { <-Lrot, 0, 0>, <Lrot, 0, 0>, Rrot }
|
||||
sphere { x*Lrot, Rrot }
|
||||
#for (foo, -9, 9)
|
||||
object { Une_Ailettte
|
||||
translate -0.004*z
|
||||
rotate z*21
|
||||
rotate (foo*35)*x
|
||||
translate (foo*0.013)*x }
|
||||
#end
|
||||
texture {
|
||||
#if ( rand(Rng1) < 0.333 )
|
||||
pigment { color Orange }
|
||||
#else
|
||||
pigment { color Magenta }
|
||||
#end
|
||||
// finish { emission 0.7 }
|
||||
finish { ambient 0.7 phong 0.5 brilliance 0.9 }
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
/* ------------------------------------------------------
|
||||
*
|
||||
*/
|
||||
#local Rtuy = 0.06;
|
||||
#local Ltuy = 0.09;
|
||||
#local Etuy = 0.01; // epaisseur des parois
|
||||
#declare Tuyere = object
|
||||
{
|
||||
#local dX = Ltuy;
|
||||
merge {
|
||||
#local R2 = Rtuy - (Etuy/2.0);
|
||||
intersection {
|
||||
torus { R2, Etuy/2 scale <1, 18, 1> }
|
||||
box { <-1, 0, -1>, <1, 1, 1> }
|
||||
rotate 90*z translate -dX*x
|
||||
}
|
||||
torus { R2, Etuy/2 scale <1, 0.75, 1> rotate 90*z translate dX*x }
|
||||
|
||||
#if (1)
|
||||
#difference {
|
||||
cylinder { <-dX, 0, 0>, <dX, 0, 0>, Rtuy }
|
||||
cylinder { <-(dX+1), 0, 0>, <dX+2, 0, 0>, Rtuy-Etuy }
|
||||
}
|
||||
#end
|
||||
|
||||
cylinder { y*Rtuy, y*(Rtuy+0.08), 0.011 scale <2.95, 1, 1> }
|
||||
sphere { 0, 0.017 scale <4.8, 1, 0.717>
|
||||
translate z*(Rtuy+Etuy/3) }
|
||||
}
|
||||
texture { T_Brass_1C }
|
||||
}
|
||||
|
||||
#declare Reacteur = object
|
||||
{
|
||||
union {
|
||||
object { Tuyere }
|
||||
object { Le_rotor () rotate x*(clock*5.8) translate -0.06*x }
|
||||
}
|
||||
}
|
||||
|
||||
#declare Les_Reacteurs = object
|
||||
{
|
||||
union {
|
||||
#local E = 0.59;
|
||||
object { Reacteur scale <1, 1, -1> translate -E*z }
|
||||
object { Reacteur translate E*z }
|
||||
}
|
||||
rotate -y*90
|
||||
}
|
||||
|
||||
|
||||
// ###########################################################""
|
||||
|
||||
#macro HexaCone ()
|
||||
// #declare HexaCone = object
|
||||
// {
|
||||
union {
|
||||
object { HexaCone_Body () }
|
||||
#local T = 0.55;
|
||||
object { HexaCone_head () translate <0, 0, T+DTa> }
|
||||
#if ( (rand(Rng1) > 0.47) )
|
||||
object { HexaCone_radar_A translate <0, T+0.18, 0> }
|
||||
#else
|
||||
object { HexaCone_radar_B translate <0, T+0.18, 0> }
|
||||
#end
|
||||
object { HexaCone_derives translate <0, 0, -0.67> }
|
||||
object { Les_Reacteurs translate -0.18*y }
|
||||
}
|
||||
// }
|
||||
#end // macro
|
||||
31
hexacone.pov
Normal file
31
hexacone.pov
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* H E X A C O N E - H E X A C O N E
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
// #declare DEBUG_LEVEL = 1;
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
// object { Repere scale 2 }
|
||||
|
||||
#declare Loc_cam = <2, 2.7-NormClock, 1> + (Pos_RedB_1 * 1.308);
|
||||
|
||||
camera {
|
||||
location Loc_cam
|
||||
#local H = 1.16 + (NormClock*0.39);
|
||||
look_at Pos_RedB_1 + <0.02, H, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <0.37, 0.90, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 59 - 25 * Cos_01(NormClock)
|
||||
}
|
||||
|
||||
109
hexastar.inc
Normal file
109
hexastar.inc
Normal file
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* H E X A S T A R
|
||||
*
|
||||
* nouveau du dernier jour de 2025, courage paur 2026 <3
|
||||
*/
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
/* ============================================================ */
|
||||
/* Un des six éléments de base */
|
||||
|
||||
#declare HS_radius = 0.409;
|
||||
|
||||
#macro HS_element_pointe ()
|
||||
union {
|
||||
#local R_a = HS_radius * 0.369;
|
||||
#local Small = 0.00001;
|
||||
cone { <-1.34, 0, 0>, Small, <-0.6, 0, 0>, R_a }
|
||||
sphere { 0, R_a scale <0.42, 1, 1> translate <-0.6, 0, 0> }
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.45 ) texture { GoldDark }
|
||||
#elseif ( R < 0.60 ) texture { Aluminum }
|
||||
#else texture { T_Gold_3C }
|
||||
#end
|
||||
}
|
||||
#end // macro
|
||||
/* ------------------------------------------------------------ */
|
||||
/*
|
||||
* element central --- À REFAIRE EN MACRO !
|
||||
*/
|
||||
#macro HS_element_central ()
|
||||
union {
|
||||
#local HSCR = HS_radius*0.70;
|
||||
torus { HSCR, 0.0180 }
|
||||
|
||||
// le noyau central
|
||||
#local L = 0.0028;
|
||||
#local R = 0.0577;
|
||||
cylinder { -y*L, y*L, R }
|
||||
sphere { 0, R translate y*L }
|
||||
sphere { 0, R scale <1, 0.20, 1>translate -y*L }
|
||||
|
||||
// les ailettes intérieures
|
||||
#for (foo, 0, 5)
|
||||
cylinder { 0, x*HSCR, R*0.15 rotate y*foo*60 }
|
||||
#end
|
||||
|
||||
// traitement final
|
||||
scale <1, 23.10, 1>
|
||||
rotate z*90
|
||||
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.17 ) texture { Y_Texture }
|
||||
#elseif ( R < 0.66 ) texture { T_Gold_1A }
|
||||
#else texture { Aluminum }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
/* ------------------------------------------------------------ */
|
||||
/* nouveau 14 janvier 2026 */
|
||||
#macro HS_element_queue ()
|
||||
union {
|
||||
#local R_a = HS_radius * 0.228;
|
||||
#local Small = 0.001;
|
||||
cone { < 0.44, 0, 0>, Small, < 0.88, 0, 0>, R_a }
|
||||
sphere { 0, R_a scale <0.7, 1, 1> translate <0.88, 0, 0> }
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.35 ) texture { Rust scale 3.33
|
||||
rotate y*(rand(Rng1)*273) }
|
||||
#elseif ( R < 0.50 ) texture { T_Gold_5A }
|
||||
#elseif ( R < 0.80 ) texture { Aluminum }
|
||||
#else texture { T_Gold_3C }
|
||||
#end
|
||||
}
|
||||
#end // macro
|
||||
/* ------------------------------------------------------------ */
|
||||
/* nouveau XXX janvier 2026 */
|
||||
|
||||
// UNE ANTENNE ?
|
||||
|
||||
/* ============================================================ */
|
||||
/* On regroupe les N*six élements */
|
||||
#declare HS_les_elements = object
|
||||
{
|
||||
union {
|
||||
#for (Foo, 0, 360, 60)
|
||||
#local E = HS_radius;
|
||||
#local Ty = E * cos(radians(Foo));
|
||||
#local Tz = E * sin(radians(Foo));
|
||||
union {
|
||||
object { HS_element_pointe ()
|
||||
translate <0, Ty*1.16, Tz*1.16> }
|
||||
object { HS_element_queue ()
|
||||
translate <0, Ty*0.80, Tz> }
|
||||
}
|
||||
#end // end for
|
||||
object { HS_element_central () }
|
||||
|
||||
// object { Repere }
|
||||
}
|
||||
}
|
||||
/* ============================================================ */
|
||||
/* Et voici l'engin final */
|
||||
#declare HexaStar = object
|
||||
{
|
||||
object { HS_les_elements }
|
||||
}
|
||||
// #debug "++++++++++ hexastar loaded !\n"
|
||||
|
||||
/* ============================================================ */
|
||||
33
hexastar.pov
Normal file
33
hexastar.pov
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* H E X A C O N E - HE X A S T A R
|
||||
* nouveau du 3 janvier 2026
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
#declare CK = 2.03 - (NormClock * 2.72);
|
||||
#declare DX_cam = 6.1 * cos(CK);
|
||||
#declare DZ_cam = 5.2 * sin(CK);
|
||||
#declare Loc_cam = <DX_cam, 1.10, DZ_cam> + Pos_RedB_3;
|
||||
#declare Lat_cam = <0, 1.95, 0> + Pos_RedB_3;
|
||||
camera {
|
||||
location Loc_cam
|
||||
look_at Lat_cam
|
||||
right <image_width/image_height, 0, 0>
|
||||
|
||||
/* quand j'aurais la bonne machine... */
|
||||
// focal_point <0.37, 0.0, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 65 - 11 * Cos_01(NormClock)
|
||||
}
|
||||
|
||||
167
hexawood.inc
Normal file
167
hexawood.inc
Normal file
@@ -0,0 +1,167 @@
|
||||
/*
|
||||
* H E X A W O O D
|
||||
*/
|
||||
// =======================================================
|
||||
|
||||
#declare Hc_ep = 0.42; // epaisseur chassis
|
||||
#declare Hc_rad = 0.70; // rayon du chassis
|
||||
#declare Hc_elo = 1.85; // elongation sur x
|
||||
|
||||
// -------------------------------------------------------
|
||||
|
||||
#macro HW_Un_Cone ()
|
||||
merge {
|
||||
#local RA = R_basecone * 0.92;
|
||||
cone { 0, RA, y*0.91, 0.000001 }
|
||||
sphere { 0, RA }
|
||||
#undef RA
|
||||
}
|
||||
#end
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#macro HW_Cones ()
|
||||
union {
|
||||
#for (foo, 0, 360, 60)
|
||||
#local E = Hc_rad * 0.85;
|
||||
#local Tx = Hc_elo * E * sin(radians(foo));
|
||||
#local Tz = E * cos(radians(foo));
|
||||
object {
|
||||
HW_Un_Cone ()
|
||||
#if ( rand(Rng1) < 0.5 )
|
||||
texture { T_Wood32 rotate 37 scale 1.30 }
|
||||
#else
|
||||
texture { T_Wood23 rotate x*87 scale 1.33 }
|
||||
#end
|
||||
// rotate -z*foo
|
||||
translate <Tx, Hc_ep - 0.22, Tz>
|
||||
}
|
||||
#end // end for
|
||||
}
|
||||
#end
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#macro HW_Chassis ()
|
||||
difference {
|
||||
#local El = Hc_elo;
|
||||
merge {
|
||||
torus { Hc_rad, 0.20 translate y*0.20 }
|
||||
cylinder { 0, y*0.40, Hc_rad }
|
||||
scale <El, 0.5, 1>
|
||||
}
|
||||
|
||||
/* trou pour mettre une lampe */
|
||||
cylinder { -1*y, 0.12*y, 0.08 }
|
||||
|
||||
torus { Hc_rad*0.30, 0.18 scale <1, 1.45, 1>
|
||||
translate y*0.39 }
|
||||
|
||||
#for (foo, 0, 360, 60)
|
||||
#local E = Hc_rad * 0.85;
|
||||
#local Tx = El * E * sin(radians(foo));
|
||||
#local Tz = E * cos(radians(foo));
|
||||
sphere { 0, 0.17 translate <Tx, 0.20, Tz> }
|
||||
#local E = Hc_rad * 1.14;
|
||||
#local Tx = El * E * sin(radians(foo+30));
|
||||
#local Tz = E * cos(radians(foo+30));
|
||||
cylinder { -y, y, 0.07 translate <Tx, 0, Tz> }
|
||||
#end
|
||||
#local R = rand(Rng1);
|
||||
#if (R<0.20)
|
||||
texture { T_Wood17 rotate <10, 20, 30> scale 0.82 }
|
||||
#else
|
||||
texture { T_Wood15 rotate <17, 28, 39> scale 1.42 }
|
||||
#end
|
||||
translate y*0.10 // why ?
|
||||
}
|
||||
#end
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#macro HW_une_patte ()
|
||||
merge {
|
||||
/* XXX */
|
||||
#local RP = 0.040;
|
||||
sphere { 0, RP scale <1, 0.84, 1> translate 0.35*y }
|
||||
cylinder { 0, 0.35*y, RP }
|
||||
sphere { 0, 0.09 scale <1, 0.26, 1> }
|
||||
}
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.3 ) texture { Tinny_Brass }
|
||||
#elseif ( R < 0.8 ) texture { New_Penny }
|
||||
#else texture { T_Brass_2C }
|
||||
#end // if
|
||||
#end // macro
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
|
||||
#declare HW_les_pattes = object
|
||||
{
|
||||
union {
|
||||
#local E = Hc_rad * 1.14;
|
||||
#local El = Hc_elo;
|
||||
#for (foo, 0, 360, 60)
|
||||
#local Tx = El * E * sin(radians(foo+30));
|
||||
#local Tz = E * cos(radians(foo+30));
|
||||
object { HW_une_patte () translate <Tx, 0, Tz> }
|
||||
#end
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
#declare HW_Anneau_0 = object
|
||||
{
|
||||
merge {
|
||||
torus { Hc_rad*0.31, 0.0666 scale <1, 0.55, 1> }
|
||||
#for (Foo, 0, 359, 60)
|
||||
#local DX = Hc_rad*0.31 * sin(radians(Foo));
|
||||
#local DZ = Hc_rad*0.31 * cos(radians(Foo));
|
||||
#local HC = 0.30 + (0.03*rand(Rng2));
|
||||
cone { 0, 0.037, y*HC*1.2, 0.0001 translate <DX, 0, DZ> }
|
||||
#end // FOR
|
||||
}
|
||||
texture { GoldDark }
|
||||
}
|
||||
|
||||
#declare HW_Anneau_1 = object
|
||||
{
|
||||
merge {
|
||||
#for (Foo, 0, 359, 60)
|
||||
#local DX = Hc_rad*0.35 * sin(radians(Foo+30));
|
||||
#local DZ = Hc_rad*0.35 * cos(radians(Foo+30));
|
||||
merge {
|
||||
cylinder { 0, 0.05*y, 0.006 }
|
||||
cone { 0.03*y, 0.006, 0.08*y, 0.012 }
|
||||
sphere { 0.08*y, 0.013 }
|
||||
translate <DX, 0, DZ>
|
||||
}
|
||||
#end
|
||||
}
|
||||
texture { T_WIP_color }
|
||||
}
|
||||
|
||||
#declare HW_Anneau = object
|
||||
{
|
||||
union {
|
||||
object { HW_Anneau_0 }
|
||||
object { HW_Anneau_1 }
|
||||
}
|
||||
rotate y * (1664 * NormClock)
|
||||
translate y*0.32
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------ */
|
||||
#declare HexaWood = object
|
||||
{
|
||||
union {
|
||||
object { HW_Chassis () }
|
||||
object { HW_les_pattes }
|
||||
#if (mod(clock, 8) < 5)
|
||||
light_source { 0.20*y rgb <0, 0.20, 0.99> }
|
||||
#end
|
||||
object { HW_Cones () translate y*0.15 }
|
||||
object { HW_Anneau }
|
||||
}
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
30
hexawood.pov
Normal file
30
hexawood.pov
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* H E X A C O N E - H E X A W O O D
|
||||
*
|
||||
* le troisième de la famille.
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// object { Repere translate <10, 1, 10> }
|
||||
|
||||
#declare LOC = <-3.4 - NormClock, 3.35, 31.9-NormClock>;
|
||||
|
||||
#declare LAT = <P_hexawood.x, 0.95+(NormClock*0.11), P_hexawood.z>;
|
||||
|
||||
camera {
|
||||
location LOC
|
||||
look_at LAT
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 20 + 2.87*NormClock
|
||||
}
|
||||
|
||||
47
mkloop.sh
47
mkloop.sh
@@ -1,47 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
source fonctions.sh
|
||||
|
||||
set -e ; set -u
|
||||
|
||||
TYPE="gif89a"
|
||||
NBFRAMES=180
|
||||
|
||||
case $TYPE in
|
||||
"gif89a") DIMS="-W640 -H400" ;;
|
||||
"mp4") DIMS="-W1280 -H1024" ;;
|
||||
esac
|
||||
POVOPT="+q9 +a -d ${DIMS}"
|
||||
echo $POVOPT ; echo ; sleep 2
|
||||
|
||||
TMPIMG=/dev/shm/tmpimg.png
|
||||
|
||||
for frame in $(seq 0 $((NBFRAMES-1)))
|
||||
do
|
||||
img=$(printf "frames/%05d.png" $frame)
|
||||
|
||||
debut=$(date +%s)
|
||||
povray ${POVOPT} +K${frame} -iscene.pov -o${TMPIMG}
|
||||
|
||||
txt=$(printf "#%03d" $frame)
|
||||
echo $frame $img $txt
|
||||
convert ${TMPIMG} \
|
||||
-pointsize 14 \
|
||||
-fill white \
|
||||
-gravity south \
|
||||
-annotate +0+0 "$txt" \
|
||||
${img}
|
||||
fin=$(date +%s)
|
||||
echo
|
||||
echo $frame $(( fin - debut )) | tee -a WS/timing
|
||||
echo ; echo
|
||||
done
|
||||
|
||||
echo
|
||||
|
||||
case $TYPE in
|
||||
"gif89a") convert -delay 8 -dither none \
|
||||
-colors 102 frames/* foo.gif ;;
|
||||
esac
|
||||
ls -lh foo.gif
|
||||
|
||||
100
orbite.pov
Normal file
100
orbite.pov
Normal file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* H E X A C O N E - O R B I T E
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 1;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
#declare R_planete = 1.85;
|
||||
|
||||
#declare Croute = object
|
||||
{
|
||||
#local R1 = R_planete * 1.05;
|
||||
#local R2 = R_planete * 1.03;
|
||||
#local HC = R_planete * 0.12;
|
||||
#local BN = R_planete * 3;
|
||||
|
||||
difference {
|
||||
sphere { 0, R1 }
|
||||
sphere { 0, R2 }
|
||||
box { <-HC, -BN, -BN>, <HC, BN, BN> }
|
||||
box { <-BN, -HC, -BN>, <BN, HC, BN> }
|
||||
box { <-BN, -BN, -HC>, <BN, BN, HC> }
|
||||
}
|
||||
texture {
|
||||
pigment { color rgb <0.20, 0.30, 0.10> }
|
||||
normal { dents 0.38 scale 0.5}
|
||||
finish { phong 0.80 reflection 0.05 }
|
||||
}
|
||||
}
|
||||
|
||||
#declare Boule = object
|
||||
{
|
||||
sphere { 0, R_planete }
|
||||
texture {
|
||||
pigment { rgb <0.40, 0.50, 0.70> }
|
||||
finish { metallic 0.50 reflection 0.55 }
|
||||
}
|
||||
}
|
||||
|
||||
#declare Planete = object
|
||||
{
|
||||
union {
|
||||
object { Croute }
|
||||
object { Boule }
|
||||
}
|
||||
}
|
||||
// =======================================================
|
||||
|
||||
#local RO = 5.39;
|
||||
#local CK = NormClock * 13.37;
|
||||
|
||||
#declare PosX = RO * sin(CK);
|
||||
#declare PosY = 0;
|
||||
#declare PosZ = RO * cos(CK);
|
||||
object { HexaBenz ()
|
||||
rotate -y*CK*82.3 translate <PosX, PosY, PosZ>
|
||||
}
|
||||
#declare PosX = RO * sin(CK+2.12);
|
||||
#declare PosY = 0;
|
||||
#declare PosZ = RO * cos(CK+2.23);
|
||||
object { HexaCone ()
|
||||
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
|
||||
}
|
||||
|
||||
#declare PosX = RO * 1.5 * sin(CK+3.14);
|
||||
#declare PosY = 0;
|
||||
#declare PosZ = RO * cos(CK+3.23);
|
||||
object { Trident_A ()
|
||||
rotate <clock*1.3, 0, clock*0.7>
|
||||
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
|
||||
}
|
||||
|
||||
#declare PosX = RO * sin(CK+5.14);
|
||||
#declare PosY = 0;
|
||||
#declare PosZ = RO * cos(CK+5.14);
|
||||
object { HexaStar
|
||||
rotate y*CK*99.22 translate <PosX, PosY, PosZ>
|
||||
}
|
||||
|
||||
object { Planete rotate (-clock*0.31)*y }
|
||||
light_source { <23, 10, 15>, rgb <0.77, 0.79, 0.80> }
|
||||
|
||||
// -------------------------------------------------------------
|
||||
camera {
|
||||
location <9+NormClock, 1.60+(9.8*NormClock), 11.59>
|
||||
look_at <0.0, 0.0, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
#if (0)
|
||||
focal_point <0.0, 0.0, 0>
|
||||
aperture 0.046
|
||||
blur_samples 30
|
||||
#end
|
||||
angle 57
|
||||
}
|
||||
|
||||
35
panoramic.pov
Normal file
35
panoramic.pov
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* H E X A C O N E - P A N O R A M I C
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare CK = 1.97 + (2.72 * Cos_01(NormClock));
|
||||
|
||||
#declare CamX = 1.72;
|
||||
#declare CamY = 7 + (4*Cos_01(NormClock));
|
||||
|
||||
#declare LatX = 20 * cos(CK*1.08);
|
||||
#declare LatY = 3.0 - sqrt(NormClock);
|
||||
#declare LatZ = 20 * sin(CK);
|
||||
// object { Repere scale 2 translate <LatX, LatY, LatZ> }
|
||||
|
||||
camera {
|
||||
// orthographic
|
||||
location <CamX, CamY, 0>
|
||||
look_at <LatX, LatY, LatZ>
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 65 + (NormClock * 15)
|
||||
}
|
||||
57
passage.pov
Normal file
57
passage.pov
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* H E X A C O N E
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
#declare PosX = 3.95;
|
||||
#declare PosY = 3.80 + (NormClock*0.299);
|
||||
#declare PosZ = (NormClock-0.5) * 45.27;
|
||||
object { HexaCone () translate <PosX, PosY, PosZ> }
|
||||
|
||||
|
||||
/* XXX this two object in dynamic.inc ??? */
|
||||
object { HexaBenz () translate <PosX+2.96, PosY+3.22, PosZ-19.5> }
|
||||
object { HexaStar rotate y*90 translate <PosX-1.96, PosY+2.72, PosZ-17.5> }
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
|
||||
#if ( (clock < 181) )
|
||||
light_source {
|
||||
<3, 0.30, -8> color Blue
|
||||
spotlight
|
||||
radius .044
|
||||
falloff 2
|
||||
tightness 3
|
||||
point_at <PosX, PosY, PosZ>
|
||||
}
|
||||
#end
|
||||
|
||||
#if ( (clock > 230) & (clock < 340) )
|
||||
light_source {
|
||||
<2, 0.30, -2> color Green
|
||||
spotlight
|
||||
radius .044
|
||||
falloff 2
|
||||
tightness 3
|
||||
point_at <PosX, PosY-0.10, PosZ>
|
||||
}
|
||||
#end
|
||||
|
||||
camera {
|
||||
location <-2.76, 1.53, 8.76>
|
||||
look_at <PosX+0.09, PosY, PosZ-0.03>
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <0, 1, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 32
|
||||
}
|
||||
|
||||
38
patrouille.pov
Normal file
38
patrouille.pov
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* H E X A C O N E - E S S A I
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*
|
||||
* this sequence was created on Fri Feb 13 01:20:24 PM UTC 2026
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// object { Repere scale 5 translate y*4 }
|
||||
|
||||
/* =============================================================== */
|
||||
|
||||
#declare CamX = 90 - (4 * NormClock);
|
||||
#declare CamY = 176;
|
||||
#declare CamZ = 170 - (33 * NormClock);
|
||||
|
||||
/* XXX to be verified !
|
||||
#declare LatX = Loc_Patrouille.x;
|
||||
#declare LatY = Loc_Patrouille.y;
|
||||
#declare LatZ = Loc_Patrouille.z;
|
||||
*/
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at Loc_Patrouille
|
||||
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 13
|
||||
}
|
||||
|
||||
/* =============================================================== */
|
||||
50
remote.pov
Normal file
50
remote.pov
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* H E X A C O N E - R E M O T E
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
#declare A = <-SzSol, 16, -8>;
|
||||
#declare B = <SzSol+4, 18, -11>;
|
||||
#declare P = Interpolate(A, B, NormClock);
|
||||
object { HexaCone () rotate y*((6*NormClock)+80) translate P }
|
||||
|
||||
object { HexaBenz () rotate y*(clock/9) translate <-9, 3, 7> }
|
||||
|
||||
// ---------------------------------------------------------
|
||||
// WTF is that ??? XXX
|
||||
|
||||
#if (0)
|
||||
#declare A = <-15, -1.9, SzSol>;
|
||||
#declare B = < 23, -0.7, SzSol>;
|
||||
#declare P = Interpolate(A, B, NormClock);
|
||||
object { HexaWood scale 10 translate P }
|
||||
#end
|
||||
|
||||
// ---------------------------------------------------------
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// object { Repere scale 3 translate <SzSol, 2, SzSol> }
|
||||
|
||||
#local DistCam = 460 + (16 * NormClock);
|
||||
#local CK = -1.71 - (0.039 * NormClock);
|
||||
#declare CamX = DistCam * sin(CK);
|
||||
#declare CamY = 28 + NormClock;
|
||||
#declare CamZ = DistCam * cos(CK);
|
||||
|
||||
camera {
|
||||
location <CamX, CamY, CamZ>
|
||||
look_at <0, 0.35, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <2, 1, 12>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 3.5
|
||||
}
|
||||
42
scene.pov
42
scene.pov
@@ -1,35 +1,35 @@
|
||||
/*
|
||||
* H E X A C O N E - S C E N E
|
||||
* nouveau projet Thu Dec 5 11:37:05 AM UTC 2024
|
||||
* The first one...
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
global_settings {
|
||||
assumed_gamma 1.0
|
||||
}
|
||||
#include "globals.inc"
|
||||
|
||||
#include "colors.inc"
|
||||
#include "textures.inc"
|
||||
#include "elements.inc"
|
||||
#include "contexte.inc"
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { HexaCone translate y*1.15 }
|
||||
// ---------------------------------------------------------
|
||||
|
||||
#declare CK = 56 + (clock * 2);
|
||||
#declare Dcam = 1.95;
|
||||
#declare CamX = Dcam * sin(radians(CK));
|
||||
#declare CamZ = Dcam * 1.23 * cos(radians(CK));
|
||||
#declare CamZ = CamZ - 0.9;
|
||||
object { Le_Decor }
|
||||
|
||||
#declare CK = 144 + (clock * 0.25);
|
||||
|
||||
#declare Dcam = 3.75;
|
||||
#declare CamX = Dcam * cos(radians(CK+0.9));
|
||||
#declare CamZ = Dcam * 1.20 * sin(radians(CK));
|
||||
|
||||
#declare LatY = 2.45 + (1.47 * Cos_010(NormClock));
|
||||
|
||||
#declare Lat = <0.03, 1.08, 0.22>;
|
||||
camera {
|
||||
location <CamX, 1.20, CamZ>
|
||||
look_at Lat
|
||||
focal_point Lat
|
||||
aperture 0.06
|
||||
blur_samples 33
|
||||
location <CamX, 1.97, CamZ>
|
||||
look_at <0.03, LatY, 0.17>
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point Lat
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 70
|
||||
}
|
||||
|
||||
light_source { <CamX*1.3, 1.35, 2+(CamZ*1.3)>,
|
||||
rgb <0.47, 0.65, 0.49> }
|
||||
|
||||
125
splined.pov
Normal file
125
splined.pov
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* H E X A C O N E - S P L I N E D
|
||||
*
|
||||
* new: Sun Oct 19 05:20:49 PM UTC 2025
|
||||
* https://www.f-lohmueller.de/pov_tut/animate/anim210e.htm
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { Le_Decor }
|
||||
// =======================================================
|
||||
#declare Spline_1 =
|
||||
spline {
|
||||
cubic_spline
|
||||
-0.2, <-2, 1.0, -3>, // control point
|
||||
|
||||
0.0, <-0.5, 1.3, -2.7>, // start point
|
||||
0.2, < 2.0, 1.0, -1.0>,
|
||||
0.4, < 1.0, 1.5, 0.0>,
|
||||
0.6, < 0.0, 2.2, 0.1>,
|
||||
0.8, <-1.1, 1.6, 1.1>,
|
||||
1.0, < 2.0, 1.0, 2.0>, // end point
|
||||
|
||||
1.2, < 4, 1.0, 2> // control point
|
||||
}
|
||||
|
||||
#local Scaler = <2, 1, 3>; // XXX please explain
|
||||
|
||||
#declare ViewSpline = object
|
||||
{
|
||||
union {
|
||||
#for (CK, 0.00, 1.00, 0.0021)
|
||||
sphere { <0,0,0>, 0.023
|
||||
texture{
|
||||
pigment {color rgb <0.20, 0.24, 0.14> }
|
||||
finish {ambient 0.15 diffuse 0.85 phong 0.6 }
|
||||
}
|
||||
translate (Scaler * Spline_1(CK))
|
||||
}
|
||||
#end // for loop
|
||||
} // closing union
|
||||
}
|
||||
|
||||
#declare AllTheSpline = object
|
||||
{
|
||||
#local K1 = 0.90 - (NormClock * 0.003);
|
||||
#local K2 = 1.00 - K1;
|
||||
#local V1 = NormClock * K1;
|
||||
#local V2 = V1 + K2;
|
||||
|
||||
union {
|
||||
object { ViewSpline }
|
||||
#declare P1 = Scaler * Spline_1(V1);
|
||||
#declare P2 = <1, -1.3, 0.2> + (0.95 * Scaler * Spline_1(V2));
|
||||
sphere {
|
||||
0, 0.06
|
||||
texture { B_Texture }
|
||||
translate P1
|
||||
}
|
||||
sphere {
|
||||
0, 0.06
|
||||
texture { R_Texture }
|
||||
translate P2
|
||||
}
|
||||
cylinder {
|
||||
P1, P2, 0.017
|
||||
texture { G_Texture }
|
||||
}
|
||||
finish { ambient 0.15 diffuse 0.65 phong 0.4 }
|
||||
}
|
||||
|
||||
#if (0)
|
||||
#fopen KP "WS/spline.log" append
|
||||
#write (KP, clock, " ", NbFrames, " ")
|
||||
#write (KP, NormClock, " ", K1, " ", K2, " ", V1, " ", V2, "\n")
|
||||
#fclose KP
|
||||
#end
|
||||
}
|
||||
|
||||
// =======================================================
|
||||
|
||||
#declare Flag = (mod(clock,120) < 40);
|
||||
|
||||
#if ( Flag )
|
||||
object { AllTheSpline scale 10 translate y*2 }
|
||||
#debug " FLAG IS YES\n"
|
||||
#else
|
||||
#debug " FLAG IS NO\n"
|
||||
#end
|
||||
|
||||
/* P1 and P2 are computed in AllTheSpline object */
|
||||
#local P1B = (P1 * 10) + <0, 2, 0>;
|
||||
#local P2B = (P2 * 8) + <0, 2, 0>;
|
||||
#if ( Flag )
|
||||
#declare Loc_cam = <87-(12*NormClock), 29-NormClock, 4-(9*exp(NormClock))>;
|
||||
#declare Lat_tmp = Interpolate(P1, P2, 0.50);
|
||||
#declare Lat_cam = (Lat_tmp * 10) + <0, 2, 0>;
|
||||
#declare Ang_cam = 105;
|
||||
#else
|
||||
#declare Loc_cam = P1B;
|
||||
#declare Lat_cam = P2B; // XXX * 0.85;
|
||||
#declare Ang_cam = 52;
|
||||
#end
|
||||
|
||||
// vstr(N,A,S,L,P)
|
||||
#debug concat(" LOC: ", vstr(3, Loc_cam, " ", 6, 3), "\n")
|
||||
#debug concat(" LAT: ", vstr(3, Lat_cam, " ", 6, 3), "\n")
|
||||
|
||||
// object { Repere scale 4 translate Lat_cam }
|
||||
|
||||
camera {
|
||||
location Loc_cam
|
||||
look_at Lat_cam
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <0.37, 0.0, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle Ang_cam
|
||||
}
|
||||
|
||||
35
survol.pov
Normal file
35
survol.pov
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* H E X A C O N E - S U R V O L
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// XXX instrumenter la caméra serait un GROS plus !!!
|
||||
// =======================================================
|
||||
|
||||
#declare Debut = <-33, 89, 289> ;
|
||||
#declare Fin = < 36, 78, -2> ;
|
||||
#declare Pos = sqrt(NormClock);
|
||||
#declare PosCam = Interpolate(Debut, Fin, Pos);
|
||||
|
||||
#declare LatX = 0.614 * sin(NormClock*11.27);
|
||||
#declare LatZ = -(150 + (7*NormClock));
|
||||
#declare LatCam = PosCam + <LatX, -95, LatZ>;
|
||||
|
||||
// object { Repere scale 20 translate LatCam + y*5 }
|
||||
|
||||
camera {
|
||||
location PosCam
|
||||
look_at LatCam
|
||||
right <image_width/image_height, 0, 0>
|
||||
angle 64
|
||||
}
|
||||
|
||||
56
tools/README.md
Normal file
56
tools/README.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# Tools
|
||||
|
||||
The page for « Build system and utilities ».
|
||||
|
||||
## Make a sequence
|
||||
|
||||
Un argument pour construire la séquence entière ou deux pour démarrer au
|
||||
milieu, c'est parfois pratique quand le disjoncteur fait un *beu-beu* en
|
||||
plein milieu. Exemples :
|
||||
|
||||
```
|
||||
$ tools/mkloop.sh survol
|
||||
$ tools/mkloop.sh survol 133
|
||||
```
|
||||
|
||||
Et pour générer plusieurs séquences dans la foulée, avec les
|
||||
post-processings (ega-mp4 et ega-gif89a) en même temps,
|
||||
vous avez le script [Mk Sex](mkseqs.sh) à votre service.
|
||||
|
||||
Mkloop ajoute le nom de la séquence, le numéro de trame et le temps de
|
||||
rendu au fichier `log/mp4.timing` permettant ainsi la création de
|
||||
graphiques aussi jolis qu'inutiles.
|
||||
|
||||
## Linkfarming
|
||||
|
||||
C'est le directeur de la production, le grand
|
||||
[script](./linkfarmer.sh)
|
||||
d'assemblage des séquences avec générique et intertitres.
|
||||
Hélas, il n'est pas encore configurable. Mais c'est
|
||||
en projet pour juin 2026 ?
|
||||
|
||||
## Encoding
|
||||
|
||||
Le [script](./encode.sh) n'est qu'un wrapper autour de
|
||||
la fonction `ff_encodage()` de la lib des tools :
|
||||
[fonctions.sh](fonctions.sh). Par défaut, il encode
|
||||
la séquence *essai*.
|
||||
Le fichier de sortie s'appelle *wip.mp4* dans tous les cas.
|
||||
|
||||
## Plot the timing
|
||||
|
||||
On peut visualiser le temps de calcul d'une séquence avec la
|
||||
commande [plot-timing.sh](./plot-timing.sh) qui génère un fichier
|
||||
PNG. C'est un script basé sur *Awk* et *Gnuplot*.
|
||||
Ces graphiques sont utilisés comme fond pour les
|
||||
intertitres.
|
||||
|
||||
```
|
||||
$ tools/plot-timing.sh essai && d timing.png
|
||||
```
|
||||
|
||||
Cette commande utilise le fichier `log/mp4.timing`, lequel est généré
|
||||
par le script de création de séquence vu plus haut.
|
||||
|
||||
|
||||
|
||||
38
tools/build-ega-mp4.sh
Executable file
38
tools/build-ega-mp4.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
source tools/fonctions.sh
|
||||
|
||||
# retour aux vieilles pratiques : EGA 640x350
|
||||
# c'est une nouveauté du 18 octobre 2025
|
||||
|
||||
SEQ="essai"
|
||||
if [ $# == 1 ] ; then
|
||||
SEQ=$1
|
||||
fi
|
||||
# echo "[$SEQ] going EGA" | tee -a WS/log
|
||||
|
||||
debut=$(date +%s)
|
||||
|
||||
rm -f spool/EGA/*.png
|
||||
|
||||
for source in $(ls -1 frames/$SEQ/*.png)
|
||||
do
|
||||
bname=$( basename $source )
|
||||
destname="frames/EGA/$bname"
|
||||
# echo $source "==>" $destname
|
||||
|
||||
convert $source \
|
||||
-equalize \
|
||||
-dither none \
|
||||
-resize '640x350!' \
|
||||
-remap datas/ega-16colors.png \
|
||||
$destname
|
||||
|
||||
done
|
||||
|
||||
ff_encodage "EGA/" "ega-$SEQ.mp4"
|
||||
|
||||
fin=$(date +%s)
|
||||
echo "$SEQ -> ega" $(( fin-debut )) "secondes"
|
||||
27
tools/build-gif89a.sh
Executable file
27
tools/build-gif89a.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
# retour aux vieilles pratiques : la Gif animée.
|
||||
# c'est une nouveauté du 18 octobre 2025
|
||||
|
||||
SEQ="essai"
|
||||
|
||||
if [ $# == 1 ] ; then
|
||||
SEQ=$1
|
||||
fi
|
||||
|
||||
GIF="gif89a/$SEQ.gif"
|
||||
|
||||
# echo "seq $SEQ -> $GIF" | tee -a WS/log
|
||||
|
||||
convert \
|
||||
-delay 7 \
|
||||
-dither none \
|
||||
-equalize \
|
||||
-resize '320x240!' \
|
||||
-remap datas/ega-16colors.png \
|
||||
frames/$SEQ/00??[369].png \
|
||||
$GIF
|
||||
|
||||
|
||||
10
tools/config.sh
Normal file
10
tools/config.sh
Normal file
@@ -0,0 +1,10 @@
|
||||
|
||||
# size of the video
|
||||
Img_Width=1024
|
||||
Img_Height=720
|
||||
|
||||
# for imagemagick
|
||||
TEXTCOL="Yellow"
|
||||
STROKOL="Green"
|
||||
|
||||
NBFRAMES=450
|
||||
15
tools/encode.sh
Executable file
15
tools/encode.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e ; set -u
|
||||
|
||||
# set default value's)
|
||||
srcdir="essai"
|
||||
|
||||
if [ $# == 1 ]
|
||||
then
|
||||
srcdir=$1
|
||||
fi
|
||||
|
||||
source tools/fonctions.sh
|
||||
|
||||
ff_encodage $srcdir wip.mp4
|
||||
70
tools/fonctions.sh
Normal file
70
tools/fonctions.sh
Normal file
@@ -0,0 +1,70 @@
|
||||
|
||||
set -eu
|
||||
|
||||
# --------------------------------------------------------------
|
||||
visual_sleep ()
|
||||
{
|
||||
msg="$1"
|
||||
nbre="$2"
|
||||
|
||||
# echo $msg ; echo $nbre
|
||||
|
||||
for foo in $(seq 0 $nbre) ; do
|
||||
local bar=$(( $nbre - $foo ))
|
||||
printf "======== %-20s %3d\r" "$msg" $bar
|
||||
sleep 1
|
||||
done
|
||||
echo
|
||||
}
|
||||
# --------------------------------------------------------------
|
||||
# un essai qui semble un echec.
|
||||
#
|
||||
ralentisseur ()
|
||||
{
|
||||
temps=$1
|
||||
|
||||
load=$(awk '{print int($1)}' < /proc/loadavg)
|
||||
# echo " load is $load" | tee -a WS/log
|
||||
if [ $load -gt 10 ] ; then
|
||||
attente=$(( $temps + ($RANDOM % 90) ))
|
||||
echo "ralentir $0 $SEQNAME $attente" # | tee -a WS/log
|
||||
sleep $attente
|
||||
fi
|
||||
}
|
||||
# --------------------------------------------------------------
|
||||
|
||||
ff_encodage()
|
||||
{
|
||||
SRCDIR="$1"
|
||||
FILMNAME="$2"
|
||||
|
||||
# echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
|
||||
ffmpeg -nostdin \
|
||||
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
|
||||
-metadata artist='--[ tTh des Bourtoulots ]--' \
|
||||
-metadata title='--[ la famille HexaCone ]--' \
|
||||
-c:v libx264 \
|
||||
-pix_fmt yuv420p \
|
||||
-tune film \
|
||||
$FILMNAME
|
||||
|
||||
}
|
||||
# --------------------------------------------------------------
|
||||
#
|
||||
# celui-ci n'est pas terminé !
|
||||
#
|
||||
mp_encodage()
|
||||
{
|
||||
#
|
||||
# NOT WORKING !
|
||||
#
|
||||
mencoder 'mf://frames/*.png' \
|
||||
-mf \
|
||||
fps=24 \
|
||||
-ovc lavc \
|
||||
-lavcopts vcodec=mpeg4 \
|
||||
-o output.avi
|
||||
}
|
||||
|
||||
# --------------------------------------------------------------
|
||||
# --------------------------------------------------------------
|
||||
178
tools/linkfarmer.sh
Executable file
178
tools/linkfarmer.sh
Executable file
@@ -0,0 +1,178 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e ; set -u
|
||||
|
||||
source tools/config.sh
|
||||
|
||||
IDX=0
|
||||
SPOOL="frames/Spool"
|
||||
SEQNAME="none"
|
||||
TMP="WS/tmp.png"
|
||||
FONTE="Helvetica-Bold"
|
||||
|
||||
source tools/fonctions.sh
|
||||
|
||||
# -------------------------------------------------------
|
||||
# /!\ this function just copy the
|
||||
# file to the spool dir, so
|
||||
# you can use it for tmp pics.
|
||||
#
|
||||
copy_a_file ()
|
||||
{
|
||||
src="$1"
|
||||
dstname=$(printf "%s/%05d.png" $SPOOL $IDX)
|
||||
# echo "$src -> $dstname"
|
||||
# ln --force --symbolic $src $dstname
|
||||
cp -f $src $dstname
|
||||
IDX=$(( IDX + 1 ))
|
||||
}
|
||||
# -------------------------------------------------------
|
||||
|
||||
linkfarm ()
|
||||
{
|
||||
SRC="frames/$1"
|
||||
# echo "linkfarm $SRC" | tee -a WS/log
|
||||
|
||||
local INTER="/dev/shm/tmp-intertitre.png"
|
||||
tools/plot-timing.sh $1
|
||||
|
||||
local NBRE=78
|
||||
|
||||
convert "WS/negatif.png" \
|
||||
-gravity north \
|
||||
-font $FONTE \
|
||||
-pointsize 108 \
|
||||
-kerning 8 \
|
||||
-fill $TEXTCOL \
|
||||
-strokewidth 3 -stroke $STROKOL \
|
||||
-annotate +0+330 "$1" \
|
||||
${INTER}
|
||||
|
||||
for foo in $(seq 0 $NBRE)
|
||||
do
|
||||
copy_a_file $INTER
|
||||
# :
|
||||
done
|
||||
|
||||
for foo in $(seq 0 $NBRE)
|
||||
do
|
||||
copy_a_file "$SRC/00000.png"
|
||||
done
|
||||
|
||||
for src in "$SRC"/*
|
||||
do
|
||||
copy_a_file $src
|
||||
done
|
||||
|
||||
PIC=$( printf "%s/%05d.png" $SRC $((NBFRAMES-1)) )
|
||||
# echo "End pic $PIC" >> WS/log
|
||||
for foo in $(seq 0 $NBRE)
|
||||
do
|
||||
copy_a_file "$PIC"
|
||||
done
|
||||
}
|
||||
# -------------------------------------------------------
|
||||
faire_le_titre ()
|
||||
{
|
||||
echo "faire le titre"
|
||||
|
||||
local NBRE=300
|
||||
local SRC="frames/hexacone/00199.png"
|
||||
local GRAY="/dev/shm/tmp-titre.png"
|
||||
|
||||
convert -colorspace gray -colors 90 $SRC $GRAY
|
||||
|
||||
for foo in $(seq 0 $NBRE)
|
||||
do
|
||||
Ypos=$(( -175 + foo ))
|
||||
convert ${GRAY} \
|
||||
-gravity north \
|
||||
-font $FONTE \
|
||||
-pointsize 140 \
|
||||
-kerning 6 \
|
||||
-fill $TEXTCOL \
|
||||
-strokewidth 5 -stroke $STROKOL \
|
||||
-annotate +0+${Ypos} "La famille\nHexaCone" \
|
||||
${TMP}
|
||||
# identify ${TMP}
|
||||
copy_a_file ${TMP}
|
||||
printf "."
|
||||
done
|
||||
echo
|
||||
}
|
||||
# -------------------------------------------------------
|
||||
faire_la_fin ()
|
||||
{
|
||||
local NBRE=180
|
||||
datetime=$(LANG=fr date -u +"%Y/%m/%d %H:%M")
|
||||
echo " $datetime" | tee -a WS/log
|
||||
|
||||
local SRC="frames/patrouille/00165.png"
|
||||
local GRAY="/dev/shm/tmp-fin.png"
|
||||
convert -colorspace gray -colors 90 $SRC $GRAY
|
||||
|
||||
for foo in $(seq 0 $NBRE)
|
||||
do
|
||||
Ypos=$(( foo + 20 ))
|
||||
convert ${GRAY} \
|
||||
-gravity north \
|
||||
-font $FONTE \
|
||||
-pointsize 92 \
|
||||
-kerning 5 \
|
||||
-fill $TEXTCOL \
|
||||
-strokewidth 2 -stroke $STROKOL \
|
||||
-annotate +0+${Ypos} \
|
||||
"un film de\ntTh des Bourtoulots" \
|
||||
-pointsize 48 \
|
||||
-strokewidth 1 \
|
||||
-gravity south \
|
||||
-annotate +0+110 "${datetime}" \
|
||||
${TMP}
|
||||
# identify ${TMP}
|
||||
copy_a_file ${TMP}
|
||||
|
||||
printf "."
|
||||
done
|
||||
echo
|
||||
}
|
||||
# -------------------------------------------------------
|
||||
|
||||
figlet "Link farmer"
|
||||
|
||||
rm -f frames/Spool/*.png
|
||||
|
||||
faire_le_titre
|
||||
|
||||
linkfarm approche
|
||||
linkfarm hexacone
|
||||
linkfarm remote
|
||||
linkfarm hexabenz
|
||||
linkfarm patrouille # new St Valentine 2026
|
||||
linkfarm hexawood
|
||||
linkfarm escadrille
|
||||
linkfarm survol
|
||||
linkfarm around # new 26 jan 2026
|
||||
linkfarm cutoff
|
||||
linkfarm panoramic
|
||||
linkfarm topview
|
||||
linkfarm trident
|
||||
linkfarm passage
|
||||
linkfarm scene
|
||||
linkfarm carto
|
||||
linkfarm circular
|
||||
linkfarm bubblecut
|
||||
linkfarm orbite
|
||||
linkfarm essai
|
||||
|
||||
tools/plot-timing.sh
|
||||
faire_la_fin
|
||||
|
||||
ff_encodage Spool the-hexacone-family.mp4
|
||||
|
||||
nb=$(( $IDX - 1 ))
|
||||
echo "linkfarmed $nb files" | tee -a WS/log
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
70
tools/mkloop.sh
Executable file
70
tools/mkloop.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e ; set -u
|
||||
|
||||
source tools/config.sh
|
||||
source tools/fonctions.sh
|
||||
|
||||
SEQNAME="$1"
|
||||
START=0
|
||||
|
||||
if [ $# == 2 ]
|
||||
then
|
||||
START=$2
|
||||
fi
|
||||
|
||||
echo "$0 $SEQNAME from $START" >> WS/log
|
||||
|
||||
DIMS="-W$Img_Width -H$Img_Height"
|
||||
NBFR=" Declare=NbFrames=$NBFRAMES "
|
||||
POVOPT="+q9 +A0.02 -d ${DIMS} ${NBFR} -WT4"
|
||||
echo $NBFR "frames."
|
||||
echo $POVOPT ; echo ; sleep 2
|
||||
|
||||
TMPIMG=/dev/shm/${SEQNAME}-tmp.png
|
||||
# echo "TMPIMG" ${TMPIMG} | tee -a WS/log # DEBUG !
|
||||
INC=1
|
||||
for frame in $(seq $START $INC $((NBFRAMES-1)))
|
||||
do
|
||||
|
||||
img=$(printf "frames/%s/%05d.png" $SEQNAME $frame)
|
||||
debut=$(date +%s)
|
||||
set +e
|
||||
povray ${POVOPT} +K${frame} -i${SEQNAME}.pov -o${TMPIMG}
|
||||
err=$?
|
||||
if [ $err != 0 ] ; then
|
||||
echo "$SEQNAME fail $frame" >> WS/log
|
||||
mogrify -colorspace gray -blur 5x5 -colors 8 $img
|
||||
visual_sleep "render fail" 12
|
||||
continue
|
||||
fi
|
||||
set -e
|
||||
sqn=$(echo ${SEQNAME} | tr [a-z] [A-Z])
|
||||
txt=$(printf "%s %03d" ${sqn} ${frame} | \
|
||||
tr '01' 'ol')
|
||||
# echo $frame $img $txt
|
||||
convert ${TMPIMG} \
|
||||
-font Courier-Bold \
|
||||
-pointsize 44 \
|
||||
-kerning 3 \
|
||||
-fill ${TEXTCOL} \
|
||||
-strokewidth 2 -stroke $STROKOL \
|
||||
-gravity south \
|
||||
-annotate +0+5 "$txt" \
|
||||
${img}
|
||||
fin=$(date +%s)
|
||||
echo ; sleep 1
|
||||
printf "%-12s %5d %5d\n" \
|
||||
${SEQNAME} $frame $(( fin-debut )) | \
|
||||
tee -a WS/mp4.timing
|
||||
echo ; sleep 2
|
||||
done
|
||||
|
||||
date --utc > WS/$SEQNAME.done
|
||||
echo
|
||||
|
||||
ff_encodage $SEQNAME wip-${SEQNAME}.mp4
|
||||
|
||||
echo "build of '$SEQNAME' done" | tee -a WS/log
|
||||
|
||||
|
||||
24
tools/mkseqs.sh
Executable file
24
tools/mkseqs.sh
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
source tools/config.sh
|
||||
source tools/fonctions.sh
|
||||
|
||||
echo "MKSEX ( $* )" | tee -a WS/log
|
||||
sleep 1
|
||||
|
||||
for foo in $*
|
||||
do
|
||||
|
||||
if [ -r "$foo.pov" ] ; then
|
||||
tools/mkloop.sh $foo
|
||||
tools/build-ega-mp4.sh $foo
|
||||
tools/build-gif89a.sh $foo
|
||||
else
|
||||
echo "+++ Beurking on $foo" | tee -a WS/log
|
||||
sleep 30
|
||||
fi
|
||||
|
||||
visual_sleep "next render is comming" 20
|
||||
|
||||
done
|
||||
|
||||
43
tools/motionblur.sh
Executable file
43
tools/motionblur.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
#
|
||||
# a new experiment 2026/02/29
|
||||
#
|
||||
|
||||
##############################
|
||||
# THIS SOFTWARE IS A MESS #
|
||||
# TOO SLOW FOR REAL USE #
|
||||
##############################
|
||||
|
||||
set -e ; set -u
|
||||
source tools/config.sh
|
||||
source tools/fonctions.sh
|
||||
|
||||
START=1
|
||||
if [ $# == 1 ]
|
||||
then
|
||||
START=$1
|
||||
fi
|
||||
|
||||
NB_SRC=$(ls -1 frames/Spool | wc -l)
|
||||
|
||||
printf "%s: %d frames\n" $0 $NB_SRC | tee -a WS/log
|
||||
|
||||
# -------------------------------------------------------
|
||||
# MAIN LOOP
|
||||
|
||||
for frame in $(seq $START $(( $NB_SRC-1 )) )
|
||||
do
|
||||
imgA=$(printf "frames/Spool/%05d.png" $frame)
|
||||
imgB=$(printf "frames/Spool/%05d.png" $((frame-1)))
|
||||
imgC=$(printf "frames/TMP/%05d.png" $frame)
|
||||
# echo $imgA $imgB
|
||||
printf "%8d" $frame
|
||||
composite $imgA $imgB \
|
||||
-blend 50% \
|
||||
$imgC
|
||||
done
|
||||
|
||||
ff_encodage TMP motion-blurred.mp4
|
||||
|
||||
# -------------------------------------------------------
|
||||
78
tools/plot-timing.sh
Executable file
78
tools/plot-timing.sh
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ue
|
||||
|
||||
source tools/config.sh
|
||||
|
||||
TMPFILE="/dev/shm/plot-timing.tmp"
|
||||
IMAGE="timing.png"
|
||||
|
||||
if [ $# == 1 ]
|
||||
then
|
||||
sequence=$1
|
||||
else
|
||||
sequence="escadrille"
|
||||
fi
|
||||
|
||||
# echo "plot timing $sequence" >> WS/log
|
||||
|
||||
count=$( grep $sequence WS/mp4.timing | wc -l )
|
||||
echo "$count samples for $sequence"
|
||||
|
||||
grep $sequence WS/mp4.timing | tail -4000 | awk \
|
||||
-v nbframes=$NBFRAMES \
|
||||
' \
|
||||
BEGIN { \
|
||||
# print "nb frames = ", nbframes; \
|
||||
for (foo=0; foo<nbframes; foo++) { \
|
||||
mini[foo] = 666; \
|
||||
maxi[foo] = -42; \
|
||||
count[foo] = 0; \
|
||||
} \
|
||||
} \
|
||||
|
||||
# for every line \
|
||||
{ \
|
||||
accu[$2] += $3; \
|
||||
count[$2]++; \
|
||||
if (mini[$2] > $3) mini[$2] = $3; \
|
||||
if (maxi[$2] < $3) maxi[$2] = $3;
|
||||
last[$2] = $3 \
|
||||
} \
|
||||
\
|
||||
END { \
|
||||
for (foo=0; foo<nbframes; foo++) { \
|
||||
if (count[foo] > 0) { \
|
||||
mean = accu[foo] / count[foo]; \
|
||||
printf "%4d %4f %4d %4d %4d\n",
|
||||
foo, mean,
|
||||
mini[foo], maxi[foo],
|
||||
last[foo];
|
||||
} \
|
||||
} \
|
||||
} \
|
||||
' > $TMPFILE
|
||||
|
||||
# head $TMPFILE ; exit
|
||||
|
||||
gnuplot << __EOC__
|
||||
set term png size $Img_Width,$Img_Height
|
||||
set output "timing.png"
|
||||
set grid
|
||||
set xrange [:450]
|
||||
set yrange [0:]
|
||||
set title "Séquence '${sequence}'"
|
||||
set xlabel "numéro de la trame"
|
||||
set ylabel "temps en secondes"
|
||||
plot "/dev/shm/plot-timing.tmp" u 1:4 w l \
|
||||
lc "#ff0000" t "maximum", \
|
||||
"/dev/shm/plot-timing.tmp" u 1:3 w l \
|
||||
lc "#0000ff" t "minimum", \
|
||||
"/dev/shm/plot-timing.tmp" u 1:2 w l \
|
||||
lc "#00aa00" t "moyenne", \
|
||||
"/dev/shm/plot-timing.tmp" u 1:5 w l \
|
||||
lc "#000000" t "last"
|
||||
__EOC__
|
||||
|
||||
convert -negate -level -33% $IMAGE WS/negatif.png
|
||||
|
||||
43
topview.pov
Normal file
43
topview.pov
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* H E X A C O N E - T O P V I E W
|
||||
* nouveau projet du Thu Dec 5 11:37:05 AM UTC 2024
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* why this two moving hexathings are not in "dynamic.inc" ?
|
||||
*/
|
||||
object { HexaCone () rotate z*9.1 translate <7, 3+NormClock, -8> }
|
||||
object { HexaBenz () translate <-9+NormClock, 2, -6> }
|
||||
|
||||
/*
|
||||
* nouveau 11 fevrier 2025
|
||||
*/
|
||||
#declare A = <-29, -0.5, (SzSol/2)+9>;
|
||||
#declare B = < 36, -0.7, (SzSol/2)+7>;
|
||||
#declare P = Interpolate(A, B, NormClock);
|
||||
object { HexaWood translate P }
|
||||
|
||||
// object { Repere scale 2 }
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
#declare CamY = 47 - (9.50 * Cos_01(NormClock));
|
||||
#declare LatY = -4 + ( 2.12 * NormClock);
|
||||
|
||||
camera {
|
||||
location <-3.60, CamY, 10.09>
|
||||
look_at <0.6, LatY, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
// focal_point <2, 1, 12>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 45 + (65*NormClock)
|
||||
}
|
||||
103
trident.inc
Normal file
103
trident.inc
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* H E X A C O N E T R I D E N T
|
||||
*/
|
||||
|
||||
#declare Trid_length = 2;
|
||||
|
||||
// ------------------------------------------------------
|
||||
/*
|
||||
* 2026/01/15 : this object is malformed,
|
||||
* please correct it as soon as possible.
|
||||
*/
|
||||
#declare Trid_cone = object
|
||||
{
|
||||
merge {
|
||||
cone { 0, R_basecone, y*0.89, 0.0001 }
|
||||
sphere { 0, R_basecone }
|
||||
}
|
||||
}
|
||||
|
||||
#macro Trid_A_cone ()
|
||||
difference {
|
||||
object { Trid_cone }
|
||||
object { Trid_cone translate -y*0.06 }
|
||||
#local Foo = rand(Rng1);
|
||||
#if (Foo < 0.25) texture { T_Brass_2C }
|
||||
#elseif (Foo < 0.50) texture { tPlasticOrange }
|
||||
#elseif (Foo < 0.75) texture { T_Chrome_3A }
|
||||
#else texture { GoldDark }
|
||||
#end // else
|
||||
#undef Foo
|
||||
}
|
||||
#end // macro
|
||||
// ------------------------------------------------------
|
||||
#macro Trid_A_head ()
|
||||
union {
|
||||
#for (A, 0, 360, 120)
|
||||
#local E = 0.29;
|
||||
#local Tx = E * sin(radians(A));
|
||||
#local Tz = E * cos(radians(A));
|
||||
object { Trid_A_cone () translate <Tx*2, 0, Tz> }
|
||||
#end // for
|
||||
#undef Tx
|
||||
#undef Tz
|
||||
torus { E*1.51, 0.012
|
||||
scale <1, 3, 1> translate y*0.05
|
||||
texture { T_Chrome_3B } }
|
||||
}
|
||||
#end
|
||||
// ------------------------------------------------------
|
||||
#macro Trid_A_body ()
|
||||
#local L = Trid_length / 2;
|
||||
#local R = 0.095;
|
||||
merge {
|
||||
cylinder { <0, -L, 0>, <0, L, 0>, R }
|
||||
sphere { 0, R scale <1, 6.66, 1> translate y*L }
|
||||
sphere { 0, R scale <1, 0.45, 1> translate -y*L }
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.333) texture { T_Chrome_1C }
|
||||
#elseif ( R < 0.666) texture { T_Silver_1C }
|
||||
#else texture { T_WIP_rasta scale 3 }
|
||||
#end
|
||||
}
|
||||
#undef L
|
||||
#end // macro
|
||||
// ------------------------------------------------------
|
||||
#macro Trid_A_ailette ()
|
||||
union {
|
||||
#local E = 0.49;
|
||||
object { Trid_A_cone () scale 0.89 translate <E, -0.05, 0> }
|
||||
cylinder { 0, x*E, 0.008 scale <1, 5, 1> }
|
||||
#local R = rand(Rng1);
|
||||
#if ( R < 0.86 ) texture { T_Silver_3A }
|
||||
#else texture { T_WIP_rasta }
|
||||
#end
|
||||
#undef E
|
||||
}
|
||||
#end
|
||||
// ------------------------------------------------------
|
||||
#macro Trid_A_tail ()
|
||||
union {
|
||||
#for (A, 0, 359, 120)
|
||||
#local RY = A + 27*rand(Rng1);
|
||||
object { Trid_A_ailette () rotate RY*y }
|
||||
#end // for
|
||||
}
|
||||
#end
|
||||
// ------------------------------------------------------
|
||||
// ------------------------------------------------------
|
||||
#macro Trident_A ()
|
||||
union {
|
||||
object { Trid_A_head () translate y*0.83 }
|
||||
object { Trid_A_body () }
|
||||
object { Trid_A_tail () translate -y*0.60 }
|
||||
// object { Repere translate <0.1, 0, 0.1> }
|
||||
}
|
||||
#end
|
||||
// ------------------------------------------------------
|
||||
// ------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
39
trident.pov
Normal file
39
trident.pov
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* H E X A C O N E - T R I D E N T
|
||||
*/
|
||||
|
||||
#version 3.7;
|
||||
|
||||
#include "globals.inc"
|
||||
|
||||
#declare NO_DYNAMIC = 0;
|
||||
#include "all.inc"
|
||||
|
||||
// =======================================================
|
||||
|
||||
object { Le_Decor }
|
||||
|
||||
// object { Repere scale 2 }
|
||||
|
||||
#declare CK = 0.8 - (NormClock * 0.71);
|
||||
#if (NormClock < 0.5000)
|
||||
#declare DX_cam = -6.9 * cos(CK);
|
||||
#declare DZ_cam = -5.4 * sin(CK);
|
||||
#else
|
||||
#declare DX_cam = -6.9 * sin(CK);
|
||||
#declare DZ_cam = -5.6 * cos(CK);
|
||||
#end
|
||||
|
||||
#declare Loc_cam = <DX_cam, 1.0, DZ_cam> + Pos_RedB_2;
|
||||
|
||||
camera {
|
||||
location Loc_cam
|
||||
look_at Pos_RedB_2 + <0, 2.05+NormClock, 0>
|
||||
right <image_width/image_height, 0, 0>
|
||||
|
||||
// focal_point <0.37, 0.0, 0>
|
||||
// aperture 0.046
|
||||
// blur_samples 30
|
||||
angle 65 - 7 * Cos_01(NormClock)
|
||||
}
|
||||
|
||||
296
xperiment.inc
Normal file
296
xperiment.inc
Normal file
@@ -0,0 +1,296 @@
|
||||
/*
|
||||
* H E X A C O N E - X P E R I M E N T
|
||||
*
|
||||
* A cosy place for experimental things (2025/10/27)
|
||||
*
|
||||
*/
|
||||
|
||||
/* =============================================================== */
|
||||
/*
|
||||
* nouveau : Tue Feb 10 12:42:43 AM UTC 2026
|
||||
*/
|
||||
#macro HoleBorder_A (V)
|
||||
difference {
|
||||
#local RA = V * R_hole * 1.004;
|
||||
#local RB = V * R_hole * 0.996;
|
||||
#local HB_H = 0.53;
|
||||
cylinder { 0, y*HB_H, RA }
|
||||
cylinder { -y, y*2, RB }
|
||||
#for (foo, 0, 179, 4)
|
||||
cylinder {
|
||||
<-20, 0, 0>, < 20, 0, 0>, 0.075
|
||||
scale <1, 2.2, 1> translate y*(HB_H/2)
|
||||
rotate y*foo
|
||||
}
|
||||
#end // for
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.42) texture { LeGris }
|
||||
#elseif (R < 0.64) texture { T_Beton_2 }
|
||||
#else texture { T_Beton_1 }
|
||||
#end
|
||||
}
|
||||
#end
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
#macro HoleBorder_B (V)
|
||||
union {
|
||||
#local Ra = V * R_hole * 1.02;
|
||||
#local Rb = 0.028;
|
||||
#local KY = 0.21;
|
||||
torus { Ra, Rb texture { T_Beton_2 } translate y*KY }
|
||||
torus { Ra, Rb texture { T_WIP_color } translate y*(KY*2) }
|
||||
torus { Ra, Rb texture { T_WIP_dents } translate y*(KY*3) }
|
||||
|
||||
#for (foo, 0, 359.99, 15)
|
||||
#local Dx = Ra * sin(radians(foo));
|
||||
#local Dz = Ra * cos(radians(foo));
|
||||
cylinder { 0, y*(3*KY), Rb*0.72
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.67) texture { tPlasticPrune }
|
||||
#else texture { tPlasticGreen }
|
||||
#end // if R
|
||||
translate <Dx, 0, Dz>
|
||||
}
|
||||
|
||||
#end // for
|
||||
}
|
||||
|
||||
#end
|
||||
/* =============================================================== */
|
||||
/*
|
||||
* new Tue Dec 30 07:39:09 AM UTC 2025
|
||||
*/
|
||||
#declare Patrouille = object
|
||||
{
|
||||
union {
|
||||
#local EX = 1.9;
|
||||
#local EZ = 2.0 + (0.5*sin(NormClock*2));
|
||||
object { Trident_A () rotate x*87 }
|
||||
object { HexaBenz () translate <-EX, 0, -EZ> }
|
||||
object { HexaCone () translate < EX, -0.4, -EZ> }
|
||||
object { HexaStar rotate y*90 translate <-EX*2, 0, -EZ*2> }
|
||||
object { HexaCone () translate < EX*2, 0.3, -EZ*2> }
|
||||
}
|
||||
rotate y*90 // pour pointer vers X
|
||||
}
|
||||
|
||||
/* =============================================================== */
|
||||
#macro Pointe_Wagonnet_0 ()
|
||||
merge {
|
||||
cone { 0, 0.06, y*0.33, 0.001 }
|
||||
sphere { 0, 0.06 }
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.25)
|
||||
texture { T_Chrome_3A }
|
||||
#elseif (R < 0.50)
|
||||
texture { T_Chrome_2B }
|
||||
#elseif (R < 0.75)
|
||||
texture { T_Chrome_3C }
|
||||
#else
|
||||
texture { T_Chrome_3D }
|
||||
#end // IF
|
||||
}
|
||||
#end // Macro
|
||||
/* --------------------------------------------------------------- */
|
||||
#macro Corps_Wagonnet_0 (Longueur)
|
||||
object {
|
||||
/* le corps */
|
||||
merge {
|
||||
#local L2 = Longueur / 2;
|
||||
#local R = 0.29;
|
||||
cylinder { <L2, 0, 0>, <-L2, 0, 0>, R }
|
||||
sphere { <0, 0, 0>, R
|
||||
scale <3, 1, 1>
|
||||
translate x*L2
|
||||
}
|
||||
sphere { <-L2, 0, 0>, R }
|
||||
|
||||
/* le kiosque (est-ce un sous-marin ?) */
|
||||
merge {
|
||||
#local H2 = L2 * 0.50;
|
||||
cylinder { <0, 0, 0>, <0, H2, 0>, R/4 }
|
||||
sphere { <0, 0, 0>, R/4
|
||||
scale <1, 0.5, 1> translate y*H2
|
||||
}
|
||||
scale <2.5, 1, 1> translate x*L2*0.75
|
||||
}
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.27) texture { T_Brass_2C }
|
||||
#elseif (R < 0.56) texture { GoldDark }
|
||||
#elseif (R < 0.70) texture { T_Chrome_5A }
|
||||
#else texture { T_Gold_3C }
|
||||
#end
|
||||
}
|
||||
}
|
||||
#end // macro
|
||||
/* --------------------------------------------------------------- */
|
||||
#macro Wagonnet_0 (Longueur)
|
||||
union {
|
||||
object { Corps_Wagonnet_0 (Longueur) }
|
||||
#for (Foo, 0, 5)
|
||||
#local DX = 0.35 - (Foo*0.24);
|
||||
#local RP = -30 + (60 * rand(Rng1));
|
||||
object { Pointe_Wagonnet_0 ()
|
||||
translate <DX, 0.31, 0> rotate x*RP }
|
||||
#end
|
||||
// object { Repere scale 0.75 translate <0.06, 0.55, 0.25> }
|
||||
}
|
||||
#end // macro
|
||||
/* =============================================================== */
|
||||
/* nouveau du 7 octobre 2025 */
|
||||
#macro Une_Boule ()
|
||||
sphere {
|
||||
0, 0.18 + (rand(Rng1) * 0.06)
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.333) texture { C_Texture }
|
||||
#elseif (R < 0.666) texture { M_Texture }
|
||||
#else texture { Y_Texture }
|
||||
#end
|
||||
finish { phong 0.7 specular 0.3 }
|
||||
}
|
||||
#end // macro
|
||||
|
||||
/* TODO
|
||||
* trouver une meilleure méthode de placement
|
||||
*/
|
||||
#declare Les_Boules = object
|
||||
{
|
||||
union {
|
||||
#for (A, 0, 64, 1)
|
||||
#local CK = (NormClock*55.00) + (A*0.28);
|
||||
object { Une_Boule ()
|
||||
#local TX = 3.2 * sin(CK);
|
||||
#local TY = 0.4 * cos(sin(CK));
|
||||
#local TZ = 3.0 * cos(1-CK);
|
||||
translate <TX, TY, TZ>
|
||||
}
|
||||
object { Repere scale 2 }
|
||||
#end // for
|
||||
}
|
||||
}
|
||||
/* =============================================================== */
|
||||
/*
|
||||
* nouveau du 25 octobre 2025
|
||||
*/
|
||||
#macro Une_Arche (Val)
|
||||
object {
|
||||
// #debug concat(" Arche, val = ", str(Val, 6, 4), "\n")
|
||||
merge {
|
||||
#local Ha = 1.80;
|
||||
#local D2 = Val * 1.414;
|
||||
// mettre une base de la colonne
|
||||
cylinder { <-1, 0, 0>, <-1, 0.20, 0> D2 }
|
||||
cylinder { < 1, 0, 0>, < 1, 0.20, 0> D2 }
|
||||
sphere { 0, D2 scale <1, 0.5, 1> translate <-1, 0.20, 0> }
|
||||
sphere { 0, D2 scale <1, 0.5, 1> translate < 1, 0.20, 0> }
|
||||
// les deux futs de l'arche
|
||||
cylinder { <-1, 0, 0>, <-1, Ha, 0>, Val }
|
||||
cylinder { < 1, 0, 0>, < 1, Ha, 0>, Val }
|
||||
#if (rand(Rng1) < 0.50)
|
||||
torus { 0.008, Val*1.08 translate <-1, Ha, 0> }
|
||||
torus { 0.008, Val*1.08 translate < 1, Ha, 0> }
|
||||
#else
|
||||
cylinder { y*(Ha-0.07), y*(Ha+0.01), Val*1.12 translate -x }
|
||||
cylinder { y*(Ha-0.08), y*(Ha+0.01), Val*1.13 translate x }
|
||||
#end
|
||||
intersection {
|
||||
torus { 1, Val }
|
||||
box { <-20, -5, 0>, <20, 5, -20> }
|
||||
rotate <90, 0, 0> translate Ha*y
|
||||
}
|
||||
#local R = rand(Rng1);
|
||||
#if (R < 0.20) texture { T_Stone40 scale 5+rand(Rng1) }
|
||||
#elseif (R < 0.40) texture { T_Stone44 scale 4+rand(Rng1) }
|
||||
#elseif (R < 0.60) texture { T_Stone32 scale 6+3*rand(Rng1) }
|
||||
#elseif (R < 0.80) texture { T_Stone24 scale 5+rand(Rng1) }
|
||||
#else texture { T_Stone36 scale 3+rand(Rng1) }
|
||||
#end
|
||||
}
|
||||
}
|
||||
#end
|
||||
|
||||
#macro Les_Arches (EK)
|
||||
union {
|
||||
#local E = EK + (rand(Rng1) * 0.50);
|
||||
object { Une_Arche (0.20) }
|
||||
object { Une_Arche (0.16) translate -z*E }
|
||||
object { Une_Arche (0.16) translate z*E }
|
||||
object { Une_Arche (0.12) translate -z*E*2 }
|
||||
object { Une_Arche (0.12) translate z*E*2 }
|
||||
object { Une_Arche (0.08) translate -z*E*3 }
|
||||
object { Une_Arche (0.08) translate z*E*3 }
|
||||
}
|
||||
#end // macro
|
||||
|
||||
#macro Trois_Arches (Dist)
|
||||
union {
|
||||
object { Une_Arche (0.05) }
|
||||
object { Une_Arche (0.05) translate z*2 }
|
||||
object { Une_Arche (0.05) translate z*4 }
|
||||
scale 1.85
|
||||
}
|
||||
#end // macro trois arches
|
||||
|
||||
// ==============================================================
|
||||
/*
|
||||
* new Mon Oct 27 04:54:41 PM UTC 2025
|
||||
*/
|
||||
#macro Un_Pylone (Type, Hauteur)
|
||||
#debug " Un pylone ?\n"
|
||||
|
||||
#end // macro
|
||||
|
||||
|
||||
// ==============================================================
|
||||
/*
|
||||
* nouveau du 12 octobre 2025
|
||||
*/
|
||||
|
||||
#macro Cahute_0 ()
|
||||
difference {
|
||||
#local KX = 0.52;
|
||||
#local KH = 1.80 + rand(Rng1) ;
|
||||
// #debug concat(" Cahute_0, KH = ", str(KH, 6, 4), "\n")
|
||||
#local KZ = KX + (0.24*rand(Rng1));
|
||||
box { <-KX, 0, -KZ>, <KX, KH, KZ> }
|
||||
|
||||
#local Mult = 0.97;
|
||||
#local KX = KX * Mult;
|
||||
#local KH = KH * Mult;
|
||||
#local KZ = KZ * Mult;
|
||||
box { <-KX, 0.0001, -KZ>, <KX, KH, KZ> }
|
||||
|
||||
cylinder { <-10, KH*0.70, 0>, <10, KH*0.72, 0>, KX * 0.823 }
|
||||
|
||||
#local R = rand(Rng1);
|
||||
// #debug concat("Random = ", str(R, 6, 4), "\n")
|
||||
#if ( R < 0.23 ) texture { T_Planete_A }
|
||||
#elseif ( R < 0.56 ) texture { T_Beton_1 }
|
||||
#else texture { T_Beton_2 }
|
||||
#end // if
|
||||
|
||||
rotate y * (207 * rand(Rng1))
|
||||
}
|
||||
|
||||
#end // macro
|
||||
|
||||
/* le support des cahutes XXX */
|
||||
|
||||
#macro Les_Cahutes ()
|
||||
union {
|
||||
#local H = 0.80;
|
||||
#local K = 2.75;
|
||||
union {
|
||||
object { Cahute_0 () translate -x * K }
|
||||
object { Cahute_0 () translate x * K }
|
||||
object { Cahute_0 () translate -z * K }
|
||||
object { Cahute_0 () translate z * K }
|
||||
translate y*H
|
||||
}
|
||||
#local K2 = K + 1.35;
|
||||
box { <-K2, 0, -K2>, <K2, H, K2> pigment { Gray30 } }
|
||||
}
|
||||
scale 0.5
|
||||
// rotate -y * (clock*0.33)
|
||||
#end
|
||||
// =======================================================
|
||||
Reference in New Issue
Block a user