fractex 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fractex-0.1.0/fractex.egg-info → fractex-0.1.2}/PKG-INFO +1 -1
- {fractex-0.1.0 → fractex-0.1.2}/fractex/cli.py +2 -1
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/custom_pattern.py +1 -3
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/game_texture.py +3 -1
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/splash.py +26 -6
- {fractex-0.1.0 → fractex-0.1.2}/fractex/interactive.py +15 -2
- {fractex-0.1.0 → fractex-0.1.2/fractex.egg-info}/PKG-INFO +1 -1
- {fractex-0.1.0 → fractex-0.1.2}/pyproject.toml +1 -1
- {fractex-0.1.0 → fractex-0.1.2}/LICENSE +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/MANIFEST.in +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/README.md +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/3d.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/__init__.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/advanced.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/core.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/dynamic_textures_3d.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/3d.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/3d_integration.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/3d_integration_2d.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/__init__.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/_output.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/architecture_pattern.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/atmosphere.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/composite_material.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/crystal_cave.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/game_integration.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/integration.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/physic_integration.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/terrain.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/underwater.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/examples/underwater_volkano.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/geometric_patterns_3d.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/simplex_noise.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/texture_blending.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/volume_scattering.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex/volume_textures.py +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex.egg-info/SOURCES.txt +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex.egg-info/dependency_links.txt +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex.egg-info/entry_points.txt +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex.egg-info/requires.txt +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/fractex.egg-info/top_level.txt +0 -0
- {fractex-0.1.0 → fractex-0.1.2}/setup.cfg +0 -0
|
@@ -36,6 +36,7 @@ def main() -> None:
|
|
|
36
36
|
parser.add_argument("--fps", type=float, default=None)
|
|
37
37
|
parser.add_argument("--width", type=int, default=None)
|
|
38
38
|
parser.add_argument("--height", type=int, default=None)
|
|
39
|
+
parser.add_argument("--speed", type=float, default=None)
|
|
39
40
|
parser.add_argument("--preset", type=str, default=None)
|
|
40
41
|
parser.add_argument("args", nargs=argparse.REMAINDER, help="Extra args passed to example")
|
|
41
42
|
args = parser.parse_args()
|
|
@@ -62,7 +63,7 @@ def main() -> None:
|
|
|
62
63
|
if interactive:
|
|
63
64
|
forwarded.append("--interactive")
|
|
64
65
|
|
|
65
|
-
for name in ("scale", "fps", "width", "height", "preset"):
|
|
66
|
+
for name in ("scale", "fps", "width", "height", "preset", "speed"):
|
|
66
67
|
value = getattr(args, name)
|
|
67
68
|
if value is not None:
|
|
68
69
|
forwarded.extend([f"--{name}", str(value)])
|
|
@@ -58,7 +58,6 @@ class CustomPatternGenerator:
|
|
|
58
58
|
if __name__ == "__main__":
|
|
59
59
|
parser = argparse.ArgumentParser(description="Custom pattern example")
|
|
60
60
|
add_interactive_args(parser)
|
|
61
|
-
parser.add_argument("--speed", type=float, default=1.0)
|
|
62
61
|
args = parser.parse_args()
|
|
63
62
|
|
|
64
63
|
generator = CustomPatternGenerator()
|
|
@@ -75,8 +74,7 @@ if __name__ == "__main__":
|
|
|
75
74
|
config = InteractiveConfig.from_args(args, title="Custom Pattern (interactive)")
|
|
76
75
|
|
|
77
76
|
def render_frame(t, w, h):
|
|
78
|
-
|
|
79
|
-
tt = t * speed * 3.0
|
|
77
|
+
tt = t * 3.0
|
|
80
78
|
zoom = np.exp(tt * 0.03)
|
|
81
79
|
zoom = min(zoom, 200.0)
|
|
82
80
|
depth = (tt * 1.5) % (params.scale * 6.0)
|
|
@@ -173,6 +173,8 @@ if __name__ == "__main__":
|
|
|
173
173
|
|
|
174
174
|
def render_frame(t, w, h):
|
|
175
175
|
zoom = 1.0 + 0.5 * (1 + np.sin(t * 0.2))
|
|
176
|
-
|
|
176
|
+
x0 = -w / (2.0 * zoom)
|
|
177
|
+
y0 = -h / (2.0 * zoom)
|
|
178
|
+
return texture.generate_tile(x0, y0, w, h, zoom=zoom)[..., :3]
|
|
177
179
|
|
|
178
180
|
run_interactive(render_frame, config)
|
|
@@ -10,7 +10,7 @@ if str(ROOT) not in sys.path:
|
|
|
10
10
|
sys.path.insert(0, str(ROOT))
|
|
11
11
|
|
|
12
12
|
from fractex import FractalParams, FractalGenerator, InfiniteTexture
|
|
13
|
-
from fractex.interactive import add_preset_arg, resolve_preset
|
|
13
|
+
from fractex.interactive import add_interactive_args, add_preset_arg, resolve_preset
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def main():
|
|
@@ -25,8 +25,7 @@ def main():
|
|
|
25
25
|
parser = argparse.ArgumentParser(description="Fractex splash animation")
|
|
26
26
|
parser.add_argument("preset", nargs="?", help="Preset name")
|
|
27
27
|
add_preset_arg(parser, ["marble", "clouds", "wood", "lava", "water"], dest="preset_flag")
|
|
28
|
-
parser
|
|
29
|
-
parser.add_argument("--fps", type=float, default=30.0, help="Target FPS")
|
|
28
|
+
add_interactive_args(parser)
|
|
30
29
|
args = parser.parse_args()
|
|
31
30
|
|
|
32
31
|
params = FractalParams(seed=7, base_scale=0.01, detail_level=2.0)
|
|
@@ -59,7 +58,11 @@ def main():
|
|
|
59
58
|
dpi = fig.get_dpi()
|
|
60
59
|
fig.set_size_inches(screen_width / dpi, screen_height / dpi)
|
|
61
60
|
ax.axis("off")
|
|
62
|
-
ax.set_title(
|
|
61
|
+
ax.set_title("fractex")
|
|
62
|
+
try:
|
|
63
|
+
fig.canvas.manager.set_window_title("fractex")
|
|
64
|
+
except Exception:
|
|
65
|
+
pass
|
|
63
66
|
|
|
64
67
|
texture = textures[presets[0]]
|
|
65
68
|
width = max(64, int(screen_width * max(0.1, args.scale)))
|
|
@@ -131,8 +134,25 @@ def main():
|
|
|
131
134
|
render_w = max(64, int(width * render_scale))
|
|
132
135
|
render_h = max(64, int(height * render_scale))
|
|
133
136
|
|
|
134
|
-
|
|
135
|
-
|
|
137
|
+
base_origin_x = -render_w / (2.0 * base_zoom)
|
|
138
|
+
base_origin_y = -render_h / (2.0 * base_zoom)
|
|
139
|
+
detail_origin_x = -render_w / (2.0 * detail_zoom)
|
|
140
|
+
detail_origin_y = -render_h / (2.0 * detail_zoom)
|
|
141
|
+
|
|
142
|
+
base = base_texture.generate_tile(
|
|
143
|
+
base_origin_x + x0,
|
|
144
|
+
base_origin_y + y0,
|
|
145
|
+
render_w,
|
|
146
|
+
render_h,
|
|
147
|
+
zoom=base_zoom,
|
|
148
|
+
)[..., :3]
|
|
149
|
+
detail = detail_texture.generate_tile(
|
|
150
|
+
detail_origin_x + x1,
|
|
151
|
+
detail_origin_y + y1,
|
|
152
|
+
render_w,
|
|
153
|
+
render_h,
|
|
154
|
+
zoom=detail_zoom,
|
|
155
|
+
)[..., :3]
|
|
136
156
|
|
|
137
157
|
depth = 0.35 + 0.15 * np.sin(t * 0.2)
|
|
138
158
|
rgb_frame = np.clip(base * (1.0 - depth) + detail * depth, 0, 1)
|
|
@@ -16,6 +16,7 @@ def add_interactive_args(parser) -> None:
|
|
|
16
16
|
parser.add_argument("--fps", type=float, default=30.0, help="Target FPS")
|
|
17
17
|
parser.add_argument("--width", type=int, default=None, help="Override width")
|
|
18
18
|
parser.add_argument("--height", type=int, default=None, help="Override height")
|
|
19
|
+
parser.add_argument("--speed", type=float, default=1.0, help="Animation speed multiplier")
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
def add_preset_arg(parser, presets, default: Optional[str] = None, dest: str = "preset") -> None:
|
|
@@ -79,6 +80,7 @@ class InteractiveConfig:
|
|
|
79
80
|
scale: float = 1.0
|
|
80
81
|
width: Optional[int] = None
|
|
81
82
|
height: Optional[int] = None
|
|
83
|
+
speed: float = 1.0
|
|
82
84
|
min_scale: float = 0.4
|
|
83
85
|
max_scale: float = 1.0
|
|
84
86
|
min_render: int = 64
|
|
@@ -91,6 +93,7 @@ class InteractiveConfig:
|
|
|
91
93
|
scale=max(0.1, getattr(args, "scale", 1.0)),
|
|
92
94
|
width=getattr(args, "width", None),
|
|
93
95
|
height=getattr(args, "height", None),
|
|
96
|
+
speed=max(0.1, getattr(args, "speed", 1.0)),
|
|
94
97
|
)
|
|
95
98
|
|
|
96
99
|
|
|
@@ -101,6 +104,7 @@ def run_interactive(
|
|
|
101
104
|
try:
|
|
102
105
|
import matplotlib.pyplot as plt
|
|
103
106
|
from matplotlib.animation import FuncAnimation
|
|
107
|
+
import matplotlib as mpl
|
|
104
108
|
except Exception:
|
|
105
109
|
print("matplotlib is not available; cannot display interactive output.")
|
|
106
110
|
return
|
|
@@ -111,12 +115,21 @@ def run_interactive(
|
|
|
111
115
|
width = max(config.min_render, width)
|
|
112
116
|
height = max(config.min_render, height)
|
|
113
117
|
|
|
118
|
+
mpl.rcParams["toolbar"] = "None"
|
|
114
119
|
fig, ax = plt.subplots()
|
|
115
120
|
dpi = fig.get_dpi()
|
|
116
121
|
fig.set_size_inches(width / dpi, height / dpi)
|
|
117
122
|
ax.axis("off")
|
|
118
|
-
ax.set_title(
|
|
123
|
+
ax.set_title("fractex")
|
|
119
124
|
fig.subplots_adjust(left=0, right=1, top=1, bottom=0)
|
|
125
|
+
try:
|
|
126
|
+
fig.canvas.manager.toolbar.setVisible(False)
|
|
127
|
+
except Exception:
|
|
128
|
+
pass
|
|
129
|
+
try:
|
|
130
|
+
fig.canvas.manager.set_window_title("fractex")
|
|
131
|
+
except Exception:
|
|
132
|
+
pass
|
|
120
133
|
|
|
121
134
|
target_ms = 1000.0 / max(1.0, config.target_fps)
|
|
122
135
|
render_scale = 1.0
|
|
@@ -140,7 +153,7 @@ def run_interactive(
|
|
|
140
153
|
|
|
141
154
|
render_w = max(config.min_render, int(width * render_scale))
|
|
142
155
|
render_h = max(config.min_render, int(height * render_scale))
|
|
143
|
-
t = frame / 10.0
|
|
156
|
+
t = (frame / 10.0) * config.speed
|
|
144
157
|
frame_img = render_frame(t, render_w, render_h)
|
|
145
158
|
frame_img = resize_nearest(frame_img, width, height)
|
|
146
159
|
im.set_array(_ensure_rgb(frame_img))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|