Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Fractview für Android
#1
Einige von euch haben sicher ein Smartphone, habe gestern bei ein Programm namens Fractview gefunden. Da sind auch einige interessante Effekte möglich. Muss aber erst mal herausfinden wie es funktioniert

<!-- m --><a class="postlink" href="Http://fractview.wordpress.com">Http://fractview.wordpress.com</a><!-- m -->
Meine Gallery bei Deviantart: http://andrea1981g.deviantart.com/gallery
Zitieren
#2
Das sieht sehr vielversprechend aus.
Ich hoffe, dass bei dieser App die 2A Ladestrom kräftiger sind als der Stromverbrauch der App. ;-)
Zitieren
#3
:-) Ui-ui-ui !! Endlich mal was Schönes für Android, danke Andrea für den heißen Tipp :-) und man kann damit HD Bilder machen - sehr fein [Bild: huepfend_037.gif] und Parameter-teilen ist auch möglich.
Fraktale Grüße von ranvaig Smile
Zitieren
#4
Hatte gestern mal spontan nach einem Fraktalprogramm gesucht und war überrascht, dass ich das gefunden hatte, ist ähnlich wie das Frax oder wie das heißt, das gibt es aber nur für Iphones. Aber muss mich da bei Fractview erst mal reinfuxen Big Grin
Meine Gallery bei Deviantart: http://andrea1981g.deviantart.com/gallery
Zitieren
#5
:-) Ich hab damit schon mal angefangen...

Tentakel

[Bild: mini]

Code:
{
  "scale": [
    1.0354101299954498E-5,
    8.666053880935846E-4,
    -0.002539625353409765,
    -0.0012275296681857947,
    -0.06945383855777047,
    0.8662909293750317
  ],
  "source": [
    "\/\/ Default Preset",
    "\/\/ This is a good start for all kinds of fractals",
    "\/\/ including newton sets, nova fractals and others.",
    "var x int, y int, color int;",
    "",
    "",
    "extern maxdepth int = 120;",
    "",
    "\/\/ some further arguments",
    "extern juliaset bool = false;",
    "extern juliapoint cplx = -0.8:0.16;",
    "",
    "\/\/ c: coordinates, breakcondition: a function whether we should stop, ",
    "\/\/ value: a real variable to return some kind of value",
    "\/\/        used in 3d-types for the height.",
    "\/\/ returns a quat representing the color",
    "func escapetime(c, breakcondition) {",
    "\tvar i int = 0,",
    "\t\tp cplx = juliapoint if juliaset else c,",
    "\t\tzlast cplx = 0,",
    "\t\tz cplx,",
    "\t\tznext cplx = 0;",
    "",
    "\textern mandelinit expr = \"0\";",
    "",
    "    z = c if juliaset else mandelinit;",
    "",
    "\textern function expr = \"mandelbrot(z, p)\";",
    "",
    "\tvar color quat;",
    "",
    "\twhile {",
    "\t\tznext = function;",
    "\t\tnot breakcondition(i, znext, z, zlast, c, p, color)",
    "\t} do {",
    "\t\t\/\/ advance to next values",
    "\t\tzlast = z;",
    "\t\tz = znext;",
    "\t}",
    "",
    "\t\/\/ return color",
    "\tcolor",
    "}",
    "",
    "\/\/ everything that is drawn must have a get_color-function.",
    "",
    "\/\/ c = coordinates (scaled)",
    "\/\/ value is a real variable for z-information in 3D",
    "\/\/ but also otherwise convenient to separate drawing",
    "\/\/ algorithm from transfer",
    "\/\/ returns color.",
    "func get_color(c, value) {",
    "",
    "\t\/\/ if the fractal accumulates some values",
    "\t\/\/ like in traps or addends, here is a got place to do it.",
    "",
    "\tfunc breakcondition(i, znext, z, zlast, c, p, color) {",
    "\t\tfunc bailoutcolor() {",
    "\t\t\textern bailout real = 128;",
    "\t\t\textern max_power real = 2;",
    "\t\t\tvar smooth_i = smoothen(znext, bailout, max_power) ;",
    "",
    "            \/\/ the next ones are only used in 3d-fractals",
    "\t\t\textern bailoutvalue expr = \"i + smooth_i\";",
    "\t\t\tvalue = bailoutvalue ;",
    "\t\t",
    "\t\t\textern bailouttransfer expr = \"log(value + 19)\";",
    "",
    "\t\t\textern bailoutpalette palette = [",
    "\t\t\t\t\t[#006, #26c, #fff, #fa0, #303]];",
    "\t",
    "\t\t\tcolor = bailoutpalette bailouttransfer",
    "\t\t}",
    "",
    "\t\tfunc lakecolor() {",
    "\t\t\textern epsilon real = 1e-9;",
    "\t\t",
    "\t\t\t\/\/ the next ones are only used in 3d-fractals",
    "\t\t\textern lakevalue expr = \"rad znext\";",
    "\t\t\tvalue = lakevalue;",
    "",
    "\t\t\textern laketransfer expr =",
    "\t\t\t\t\"arcnorm znext : log(1 + value)\";",
    "",
    "\t\t\textern lakepalette palette = [",
    "\t\t\t\t[#000, #000, #000, #000],",
    "\t\t\t\t[#f00, #ff0, #0f8, #00f],",
    "\t\t\t\t[#f88, #ff8, #afc, #88f]];",
    "",
    "\t\t\tcolor = lakepalette laketransfer",
    "\t\t}",
    "",
    "\t\t{ lakecolor() ; true } if not next(i, maxdepth) else",
    "\t\tradrange(znext, z, bailout, epsilon, bailoutcolor(), lakecolor())",
    "\t}",
    "\t",
    "\tescapetime(c, breakcondition)",
    "}",
    "",
    "func get_color_test(c, value) {",
    "\t\/\/ this one is just here for testing light effects",
    "    \/\/ circle + donut + green bg",
    "    var rc = rad c;",
    "    ",
    "    { value = (circlefn rc + 5); int2lab #0000ff} if rc < 1 else",
    "    { value = circlefn abs (rc - 3); int2lab #ff0000 } if rc =< 4 and rc >= 2 else",
    "    { value = -10; int2lab #00ff00 }",
    "}",
    "",
    "\/\/ ******************************************",
    "\/\/ * Next are just drawing procedures. They *",
    "\/\/ * should be the same for all drawings.   *                 ",
    "\/\/ ******************************************",
    "",
    "extern supersampling bool = false;",
    "extern light bool = false;",
    "",
    "\/\/ drawpixel for 2D",
    "func drawpixel_2d(x, y) { ",
    "\tvar c cplx = map(x, y);",
    "\tvar value real;",
    "\tget_color(c, value) \/\/ value is not used",
    "}",
    "",
    "\/\/ drawpixel for 3D",
    "func drawpixel_3d(x, y) {",
    "\tvar c00 cplx = map(x, y),",
    "\t\tc10 cplx = map(x + 1, y + 0.5),",
    "\t\tc01 cplx = map(x + 0.5, y + 1);",
    "\t",
    "\tvar h00 real, h10 real, h01 real; \/\/ heights",
    "\t",
    "\t\/\/ color is already kinda super-sampled",
    "\tvar color = (get_color(c00, h00) + get_color(c10, h10) + get_color(c01, h01)) \/ 3;",
    "",
    "\t\/\/ get height out of value",
    "\tfunc height(value) {",
    "\t\textern valuetransfer expr = \"value\";",
    "\t\tvaluetransfer",
    "\t}",
    "\t",
    "\th00 = height h00; h01 = height h01; h10 = height h10;",
    "",
    "\t\/\/ get the normal vector (cross product)",
    "\tvar xp = c10 - c00, xz = h10 - h00;",
    "\tvar yp = c01 - c00, yz = h01 - h00;",
    "\t",
    "\tvar np cplx = (xp.y yz - xz yp.y) : (xz yp.x - xp.x yz);",
    "\tvar nz real = xp.x yp.y - xp.y yp.x;",
    "\t\t",
    "\t\/\/ normalize np and nz",
    "\tvar nlen = sqrt(rad2 np + sqr nz);",
    "\tnp = np \/ nlen; nz = nz \/ nlen;",
    "\t\t",
    "\t\/\/ get light direction",
    "\textern lightvector cplx = -0.667 : -0.667; \/\/ direction from which the light is coming",
    "\tdef lz = sqrt(1 - sqr re lightvector - sqr im lightvector); \/\/ this is inlined",
    "",
    "\t\/\/ Lambert's law.",
    "\tvar cos_a real = dot(lightvector, np) + lz nz;",
    "",
    "\t\/\/ diffuse reflexion with ambient factor",
    "\textern lightintensity real = 1;",
    "\textern ambientlight real = 0.5;",
    "",
    "\t\/\/ if lumen is negative it is behind, ",
    "\t\/\/ but I tweak it a bit for the sake of the looks:",
    "\t\/\/ cos_a = -1 (which is super-behind) ==> 0",
    "\t\/\/ cos_a = 0 ==> ambientlight",
    "\t\/\/ cos_a = 1 ==> lightintensity",
    "",
    "\t\/\/ for a mathematically correct look use the following:",
    "\t\/\/ if cos_a < 0 then cos_a = 0;",
    "\t\/\/ color.a = color.a * (ambientlight + lightintensity lumen);",
    "\t",
    "\tdef d = lightintensity \/ 2; \/\/ will be inlined later",
    "",
    "\t\/\/ Change L in Lab-Color",
    "\tcolor.a = color.a (((d - ambientlight) cos_a + d) cos_a + ambientlight);",
    "",
    "\t\/\/ Next, spectacular reflection. Viewer is always assumed to be in direction (0,0,1)",
    "\textern spectacularintensity real = 1;",
    "",
    "\textern shininess real = 8;",
    "",
    "\t\/\/ r = 2 n l - l; v = 0:0:1",
    "\tvar spec_refl = 2 cos_a nz - lz;",
    "\t",
    "\t\/\/ 100 because L in the Lab-Model is between 0 and 100",
    "\tif spec_refl > 0 then",
    "\t\tcolor.a = color.a + 100 * spectacularintensity * spec_refl ^ shininess;",
    "",
    "\tcolor",
    "}",
    "",
    "func do_pixel(x, y) {",
    "\t\/\/ two or three dimensions?",
    "\tdef drawpixel = drawpixel_3d if light else drawpixel_2d;",
    "\t",
    "\tfunc drawaapixel(x, y) {",
    "\t\t0.25 (",
    "\t\t\tdrawpixel(x - 0.375, y - 0.125) + ",
    "\t\t\tdrawpixel(x + 0.125, y - 0.375) + ",
    "\t\t\tdrawpixel(x + 0.375, y + 0.125) +",
    "\t\t\tdrawpixel(x - 0.125, y + 0.375)\t\t\t",
    "\t\t);",
    "\t}",
    "",
    "\t\/\/ which function to apply?",
    "\tdef fn = drawpixel if not supersampling else drawaapixel;",
    "",
    "\tcolor = lab2int fn(x, y)",
    "}",
    "",
    "\/\/ and finally call the draing procedure",
    "do_pixel(x, y)"
  ],
  "arguments": {
    "exprs": {
      "mandelinit": "c",
      "function": "mandelbrot(z, p.x) + zlast p.y"
    },
    "bools": {
      "juliaset": true,
      "light": true
    },
    "reals": {
      "bailout": 128
    },
    "cplxs": {
      "juliapoint": [
        0.5666,
        -0.5
      ]
    },
    "palettes": {
      "bailoutpalette": {
        "height": 2,
        "width": 7,
        "colors": [
          -16776444,
          -16317946,
          -15663048,
          -12633601,
          -14886967,
          -131086,
          -787713,
          -266497,
          -11342340,
          -16764365,
          -15171951,
          -15396850,
          -16640768,
          -16306600
        ]
      },
      "lakepalette": {
        "height": 3,
        "width": 4,
        "colors": [
          -16777216,
          -16777216,
          -16777216,
          -16777216,
          -16449515,
          -921601,
          -16776145,
          -16776624,
          -16187385,
          -16775146,
          -16447488,
          -15922408
        ]
      }
    }
  }
}
Fraktale Grüße von ranvaig Smile
Zitieren
#6
Da ich gerade auf Wanderurlaub bin, bewundere ich vornehmlich die Fraktale der Natur. FractView war aber die Tage ein netter Begleiter.
Man entdeckt zwar nicht gewaltig Neues aber Nettes. In den Formel-Bereich habe ich mich aber auch noch nicht gewagt.

Wenn ich zurück bin mache ich ein kleines Review.

Nachstehend ein Blick in das Phoenix-Set:

[Bild: mini]
Zitieren
#7
Volker Harun schrieb:Man entdeckt zwar nicht gewaltig Neues aber Nettes.

:-) Stimmt - zum Beispiel die Lighteffekte sind recht nett.
Ich finde deine Farbwahl sehr gelungen
[Bild: sensationell2.gif]
Fraktale Grüße von ranvaig Smile
Zitieren
#8
ranvaig schrieb:Ich finde deine Farbwahl sehr gelungen

Danke Big Grin

Im nachstehenden Code ist eine sehr ähnliche Farbpalette, Du musst nur das Schwarz gegen Beige eintauschen.
[spoil]{
"scale": [
1.2395120570803591E-5,
-0.0023552457371146885,
0.0023552457371146885,
1.2395120570803591E-5,
-0.6054332892480114,
3.734850283523852E-5
],
"source": [
"\/\/ Default Preset",
"\/\/ This is a good start for all kinds of fractals",
"\/\/ including newton sets, nova fractals and others.",
"var x int, y int, color int;",
"",
"",
"extern maxdepth int = 120;",
"",
"\/\/ some further arguments",
"extern juliaset bool = false;",
"extern juliapoint cplx = -0.8:0.16;",
"",
"\/\/ c: coordinates, breakcondition: a function whether we should stop, ",
"\/\/ value: a real variable to return some kind of value",
"\/\/ used in 3d-types for the height.",
"\/\/ returns a quat representing the color",
"func escapetime(c, breakcondition) {",
"\tvar i int = 0,",
"\t\tp cplx = juliapoint if juliaset else c,",
"\t\tzlast cplx = 0,",
"\t\tz cplx,",
"\t\tznext cplx = 0;",
"",
"\textern mandelinit expr = \"0\";",
"",
" z = c if juliaset else mandelinit;",
"",
"\textern function expr = \"mandelbrot(z, p)\";",
"",
"\tvar color quat;",
"",
"\twhile {",
"\t\tznext = function;",
"\t\tnot breakcondition(i, znext, z, zlast, c, p, color)",
"\t} do {",
"\t\t\/\/ advance to next values",
"\t\tzlast = z;",
"\t\tz = znext;",
"\t}",
"",
"\t\/\/ return color",
"\tcolor",
"}",
"",
"\/\/ everything that is drawn must have a get_color-function.",
"",
"\/\/ c = coordinates (scaled)",
"\/\/ value is a real variable for z-information in 3D",
"\/\/ but also otherwise convenient to separate drawing",
"\/\/ algorithm from transfer",
"\/\/ returns color.",
"func get_color(c, value) {",
"",
"\t\/\/ if the fractal accumulates some values",
"\t\/\/ like in traps or addends, here is a got place to do it.",
"",
"\tfunc breakcondition(i, znext, z, zlast, c, p, color) {",
"\t\tfunc bailoutcolor() {",
"\t\t\textern bailout real = 128;",
"\t\t\textern max_power real = 2;",
"\t\t\tvar smooth_i = smoothen(znext, bailout, max_power) ;",
"",
" \/\/ the next ones are only used in 3d-fractals",
"\t\t\textern bailoutvalue expr = \"i + smooth_i\";",
"\t\t\tvalue = bailoutvalue ;",
"\t\t",
"\t\t\textern bailouttransfer expr = \"log(value + 19)\";",
"",
"\t\t\textern bailoutpalette palette = [",
"\t\t\t\t\t[#006, #26c, #fff, #fa0, #303]];",
"\t",
"\t\t\tcolor = bailoutpalette bailouttransfer",
"\t\t}",
"",
"\t\tfunc lakecolor() {",
"\t\t\textern epsilon real = 1e-9;",
"\t\t",
"\t\t\t\/\/ the next ones are only used in 3d-fractals",
"\t\t\textern lakevalue expr = \"rad znext\";",
"\t\t\tvalue = lakevalue;",
"",
"\t\t\textern laketransfer expr =",
"\t\t\t\t\"arcnorm znext : log(1 + value)\";",
"",
"\t\t\textern lakepalette palette = [",
"\t\t\t\t[#000, #000, #000, #000],",
"\t\t\t\t[#f00, #ff0, #0f8, #00f],",
"\t\t\t\t[#f88, #ff8, #afc, #88f]];",
"",
"\t\t\tcolor = lakepalette laketransfer",
"\t\t}",
"",
"\t\t{ lakecolor() ; true } if not next(i, maxdepth) else",
"\t\tradrange(znext, z, bailout, epsilon, bailoutcolor(), lakecolor())",
"\t}",
"\t",
"\tescapetime(c, breakcondition)",
"}",
"",
"func get_color_test(c, value) {",
"\t\/\/ this one is just here for testing light effects",
" \/\/ circle + donut + green bg",
" var rc = rad c;",
" ",
" { value = (circlefn rc + 5); int2lab #0000ff} if rc < 1 else",
" { value = circlefn abs (rc - 3); int2lab #ff0000 } if rc =< 4 and rc >= 2 else",
" { value = -10; int2lab #00ff00 }",
"}",
"",
"\/\/ ******************************************",
"\/\/ * Next are just drawing procedures. They *",
"\/\/ * should be the same for all drawings. * ",
"\/\/ ******************************************",
"",
"extern supersampling bool = false;",
"extern light bool = false;",
"",
"\/\/ drawpixel for 2D",
"func drawpixel_2d(x, y) { ",
"\tvar c cplx = map(x, y);",
"\tvar value real;",
"\tget_color(c, value) \/\/ value is not used",
"}",
"",
"\/\/ drawpixel for 3D",
"func drawpixel_3d(x, y) {",
"\tvar c00 cplx = map(x, y),",
"\t\tc10 cplx = map(x + 1, y + 0.5),",
"\t\tc01 cplx = map(x + 0.5, y + 1);",
"\t",
"\tvar h00 real, h10 real, h01 real; \/\/ heights",
"\t",
"\t\/\/ color is already kinda super-sampled",
"\tvar color = (get_color(c00, h00) + get_color(c10, h10) + get_color(c01, h01)) \/ 3;",
"",
"\t\/\/ get height out of value",
"\tfunc height(value) {",
"\t\textern valuetransfer expr = \"value\";",
"\t\tvaluetransfer",
"\t}",
"\t",
"\th00 = height h00; h01 = height h01; h10 = height h10;",
"",
"\t\/\/ get the normal vector (cross product)",
"\tvar xp = c10 - c00, xz = h10 - h00;",
"\tvar yp = c01 - c00, yz = h01 - h00;",
"\t",
"\tvar np cplx = (xp.y yz - xz yp.y) : (xz yp.x - xp.x yz);",
"\tvar nz real = xp.x yp.y - xp.y yp.x;",
"\t\t",
"\t\/\/ normalize np and nz",
"\tvar nlen = sqrt(rad2 np + sqr nz);",
"\tnp = np \/ nlen; nz = nz \/ nlen;",
"\t\t",
"\t\/\/ get light direction",
"\textern lightvector cplx = -0.667 : -0.667; \/\/ direction from which the light is coming",
"\tdef lz = sqrt(1 - sqr re lightvector - sqr im lightvector); \/\/ this is inlined",
"",
"\t\/\/ Lambert's law.",
"\tvar cos_a real = dot(lightvector, np) + lz nz;",
"",
"\t\/\/ diffuse reflexion with ambient factor",
"\textern lightintensity real = 1;",
"\textern ambientlight real = 0.5;",
"",
"\t\/\/ if lumen is negative it is behind, ",
"\t\/\/ but I tweak it a bit for the sake of the looks:",
"\t\/\/ cos_a = -1 (which is super-behind) ==> 0",
"\t\/\/ cos_a = 0 ==> ambientlight",
"\t\/\/ cos_a = 1 ==> lightintensity",
"",
"\t\/\/ for a mathematically correct look use the following:",
"\t\/\/ if cos_a < 0 then cos_a = 0;",
"\t\/\/ color.a = color.a * (ambientlight + lightintensity lumen);",
"\t",
"\tdef d = lightintensity \/ 2; \/\/ will be inlined later",
"",
"\t\/\/ Change L in Lab-Color",
"\tcolor.a = color.a (((d - ambientlight) cos_a + d) cos_a + ambientlight);",
"",
"\t\/\/ Next, spectacular reflection. Viewer is always assumed to be in direction (0,0,1)",
"\textern spectacularintensity real = 1;",
"",
"\textern shininess real = 8;",
"",
"\t\/\/ r = 2 n l - l; v = 0:0:1",
"\tvar spec_refl = 2 cos_a nz - lz;",
"\t",
"\t\/\/ 100 because L in the Lab-Model is between 0 and 100",
"\tif spec_refl > 0 then",
"\t\tcolor.a = color.a + 100 * spectacularintensity * spec_refl ^ shininess;",
"",
"\tcolor",
"}",
"",
"func do_pixel(x, y) {",
"\t\/\/ two or three dimensions?",
"\tdef drawpixel = drawpixel_3d if light else drawpixel_2d;",
"\t",
"\tfunc drawaapixel(x, y) {",
"\t\t0.25 (",
"\t\t\tdrawpixel(x - 0.375, y - 0.125) + ",
"\t\t\tdrawpixel(x + 0.125, y - 0.375) + ",
"\t\t\tdrawpixel(x + 0.375, y + 0.125) +",
"\t\t\tdrawpixel(x - 0.125, y + 0.375)\t\t\t",
"\t\t);",
"\t}",
"",
"\t\/\/ which function to apply?",
"\tdef fn = drawpixel if not supersampling else drawaapixel;",
"",
"\tcolor = lab2int fn(x, y)",
"}",
"",
"\/\/ and finally call the draing procedure",
"do_pixel(x, y)"
],
"arguments": {
"exprs": {
"mandelinit": "c c",
"laketransfer": "0",
"function": "sqr z + p - zlast",
"bailouttransfer": "log(1 + value * (0.42 \/ 28))"
},
"bools": {
"juliaset": false,
"light": false,
"supersampling": true
},
"ints": {
"maxdepth": 2520
},
"reals": {
"ambientlight": 0.5,
"spectacularintensity": 0,
"lightintensity": 1,
"shininess": 0
},
"cplxs": {
"juliapoint": [
0.13619330999188867,
0.1692647021057305
],
"lightvector": [
-0.667,
0.667
]
},
"palettes": {
"bailoutpalette": {
"height": 1,
"width": 6,
"colors": [
-5000269,
-3158065,
-9215150,
-2102550,
-12825500,
-16777216
]
},
"lakepalette": {
"height": 1,
"width": 6,
"colors": [
-16777216,
-16777216,
-16777216,
-16777216,
-16777216,
-16777216
]
}
}
}
}[/spoil]

Das Fraktal enthält eine selbst hingepfuschte Funktion. Und darin liegt wohl die Stärke von FractView.
Zitieren
#9
Wow, ihr habt da schon was hinbekommen, vielleicht kann einer eine kurze Anleitung schreiben, wie man z.B. 3D Effekte hinbekommt usw. Wäre supernett, danke Smile
Meine Gallery bei Deviantart: http://andrea1981g.deviantart.com/gallery
Zitieren
#10
So, ich bin wieder daheim ... fünfeinhalb Stunden Autofahrt und 2h lang die Partyreste von meinem Sohn wegräumen später ... es juckt mich in den Fingern, weiter mit FractView zu arbeiten/spielen.

FractView ist für mich ein gelungenes Stück Software, das seinen Zweck erfüllt: Es rendert 2D-Fraktale. Aber nicht jeder Entwickler ist auch gleichzeitig ein guter Designer. Daher lässt die GUI noch Platz für Wünsche frei.

FractView ist zur Zeit ausschließlich englischsprachig. Die Übersetzung des Entwicklers ins Englische ist dabei teilweise fehlerhaft. Beispielsweise nutzt er für 'specular' das Wort 'spectacular' ... ist, wenn man's weiß eher ein Lächeln, als wirklich Kritik ;-)
Tatsächlich ist es eher im Blog des Entwicklers störend, wenn einige Sätze nach deutscher Grammatik richtig wären, aber im englischen erst gar keine Sinn machen.
Der Blog ... und Sinn ... erst lesen, wenn man die Software ausprobiert hat, das ist mein bescheidener Tipp. Ansonsten weiß man gar nicht, wovon die Rede ist, bzw. man ist dadurch irritiert, dass die Blogeinträge typischerweise chronologisch von 'neu' nach 'alt' sortiert sind.

Nun aber zum Kernstück: FractView selbst:
[Bild: mini]
Auf einem Tablett gibt es oben rechts noch einen weiteren Menüpunkt ... 'Presets' ... dieser ist bei meinem Handy unter dem ganz rechten Menüpunkt mit den 3 Punkten versteckt:
[Bild: mini]

Es hat eine gute Auswahl an Presets und diese sind nach Lust und Laune konfigurierbar. Besonders, wen man beginnt, die grundlegenden Funktionen zu manipulieren, entdeckt man Fraktale, die einem selbst und vielleicht auch bislang allen anderen verborgen waren ;-)
Und dabei arbeitet das Programm sehr flott, ohne den Akku zu sehr zu beanspruchen:
Auf meinem Tablett kommt mein 2A-Netzteil nicht gegen JWildFire Mini an ... aber bei FractView geht die Ladeanzeige hoch. Das kann natürlich auch bedeuten, dass es noch potenter gemacht werden könnte :-D

Ein sehr schönes Preset ist das, bei dem man einen Überblick über die Julia-Mengen hat. Dort ist als Funktion die Mandelbrotmenge, aber diese lässt sich durch jedwede andere Funktion austauschen.
Schade ist nur, auch wenn es im Blog anders lautet, dass die Koordinaten nicht in das Julia-Set übernommen werden, wenn man es aktiviert. Man muss in den Einstellungen (der Menüpunkt mit dem Stift) die Julia-Koordinaten selbst eintragen. Das ist auf Dauer ein wenig umständlich.

Zwei wichtige Punkte bei den Einstellungen sind supersampling und Light:
[Bild: mini]
Supersampling berechnet pro Renderpixel 4 Punkte und schafft so ein AntiAliasing. Bei vierfacher Dauer des Renders.
Light simuliert durch ein virtuelles Licht einen 3D-Effekt. Wenn ich es richtig in Erinnerung habe auch bei 4-facher Renderdauer.
Beide zusammen verlängern die Zeit bis zum fertigen Bild um den Faktor 16.

Bei Light gibt es ein paar Wermutstropfen. Es kommt mir so vor, als hätten die Koordinaten des Lichtvektors keinen Einfluss auf das Bild. Auch die Punkte 'specular intensity' und 'shininess' scheinen keinen Einfluss in der Berechnung zu haben.

Wenn man mit einem Fraktal arbeitet und den richtigen Bildausschnitt sucht, wird es manchmal kompliziert:
[Bild: mini]
Alles, was rechts und links von dem dargestellten 'Grid' liegt, fällt in dem nächsten Render weg. Die obere und untere Kante wird nur so weit gerendert, wie das Seitenverhältnis eingestellt ist.
Die Software ist sonst sehr firm, was das Up- und Downscalen von der gezeigten Bilder angeht. Chapeau! Aber bei zoomen, drehen, schieben des Bilders verliert man schnell den Überblick, was dann tatsächlich von der Ansicht übrig bleibt.

In diesem Atemzug ein dringender Wunsch: Buttons für Pause Render, Zoom only, Pan only, Move only
Das würde die Arbeit sehr vereinfachen.

Die Farbpaletten für den Bailout- und Lake-Bereich lassen sich sehr individuell gestalten. Man kann Farben einfügen, verschieben, löschen, usw.
Mit ist nicht klar wie die Software mehrere Farbpaletten handhabt, bzw. dann festlegt, welche genutzt wird.
Toll wäre es, wenn man Farbpaletten auch allein exportieren könnte.

Die Ex- und Importfunktion der Software ist natürlich auch grandios :-)

So, auch wenn das Review nach viel Genöle schmeckt, ich finde die Software klasse. Und bekommt von mir im PlayStore Vier-Sterne.
Zitieren
#11
Nachtrag:
Wenn man in den Einstellungen z.B. auf den Menüpunkt Juliaspoint lange drückt, dann erscheint ein Untermenü, in dem man die Julia-Menge zentrieren kann.
Andere Menüpunkte haben auch 'versteckte' Submenüs ;-)
Zitieren
#12
:-) Vielen Dank für deine Übersicht, Volker. Deiner Kritik stimme ich völlig zu, ich finde das Schätzchen ebenfalls klasse, auch wenn man ein paar Abstriche machen muß, dafür ist es kostenlos.
Fraktale Grüße von ranvaig Smile
Zitieren
#13
Hallo,

Zunaechst ich bin der Autor von Fractview und es freut mich sehr dass euch meine App so viel Freude macht und bin fuer die hier sehr konstruktive Kritik sehr dankbar. Nachdem ich im Jaenner etwas Zeit fuer weitere Entwicklungen haben koennte wuerde ich mich auch ueber Verbesserungen oder Feature Requests (bei GUI-Requests auch gern mit einer Beschreibung oder einer App, die ich als Vorbild nehmen koennte) oder auch Vorschlaege fuer neue Presets freuen. Nochmals danke fuer eure Kritik (spectacular, brrrr...).

Und auch von mir ein Bildchen, Phoenix Julia set mit 3D-Effekt (ist mein aktuelles Hintergrundbild).


Angehängte Dateien Bild(er)
   
Zitieren
#14
Hallo searles ;D

Erstmal ein Herzlich Willkommen in unserem kleinen Forum ;D Freut uns sehr das du hier gefunden hast. Mich würde es intressieren, wie du auf uns gestossen bist ? ;D
Tschöö

Gerriet | PinguinsReisen.de
Zitieren
#15
Einer meiner Reviewer meinte, er würde hier eine Kritik schreiben (ich vermute, es war Volker), und ich muss sagen, es ist die bisher konstruktivste Kritik Smile
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste