|
![](/i/fill.gif) |
On 08/18/2013 04:48 PM, clipka wrote:
> Am 18.08.2013 23:08, schrieb Ger Remmers:
>
>> (*) Povray seems to have a problem with very large arrays. I can go as
>> high as 800K nodes, after that the last position in the array seems to
>> get corrupted.
>
> Obviously that shouldn't happen. Can you provide a sample scene to
> reproduce, dissect and debug the problem?
>
It messes up in the WriteDataFile() macro
#declare DataFilename = "nodes.inc";
#macro WriteDataFile()
#fopen DataFile DataFilename write
#write( DataFile, "#declare NumberOfNodes =
",str(NumberOfNodes,0,0),";\n")
#write( DataFile, "#declare Nodes =array [NumberOfNodes]\n")
#write( DataFile, "{\n")
#for (NodeCount, 0, NumberOfNodes -2, 1)
#write ( DataFile, "<",vstr(3, Nodes[NodeCount],",",0,-1),">,\n")
#end
/*
When including the written data it turns out that the next line is not
executed
*/
#write ( DataFile, "<",vstr(3, Nodes[NumberOfNodes-1],",",0,-1),">\n")
#write (DataFile,"}\n")
#fclose DataFile
#debug concat("Done writing data file with ",str(NumberOfNodes,0,0),"
nodes for frame ",str(frame_number,0,0),"\n")
#end
/*
Only at the first frame do we need to initialize the nodes on the sphere,
after that we load the node data from disk.
*/
#if (frame_number = 1)
#declare NumberOfNodes = 5000000;
/*
With NumberOfNodes < ~800K it works fine
*/
#declare Nodes =array [NumberOfNodes];
#declare dlong = pi * (3-sqrt(5));
#declare dz = 2.0 / NumberOfNodes;
#declare Longitude = 0;
#declare Z = 1 - dz / 2;
#for (NodeCount, 0, NumberOfNodes - 1, 1)
#declare Radius = sqrt(1 - Z * Z);
#declare Nodes[NodeCount] = <cos(Longitude)* Radius, sin(Longitude)
* Radius, Z>;
#declare Z = Z - dz;
#declare Longitude = Longitude + dlong;
#end
#else
#include DataFilename
#end
#declare NumberOfItterations = 5;
#declare RandAngle = seed(66);
#if (frame_number > 1)
#for(Dummy,0, (frame_number - 1) * NumberOfItterations * 4,1)
#declare PlaneAngle = rand(RandAngle);
#end
#end
#declare PlaneAngle = rand(RandAngle);
#declare CuttingPlane = plane{y, 0};
//#declare Cutter = box {<-10, 0.0, -10>,<10, -10, 10>};
#macro AdjustNodes(AngleX, AngleY, AngleZ, Displacement)
#declare Cut = object { CuttingPlane translate y * Displacement
rotate <AngleX, AngleY, AngleZ> };
#for (NodeCount, 0, NumberOfNodes - 1, 1)
#if (inside (Cut, Nodes[NodeCount]))
#declare Nodes[NodeCount] = Nodes[NodeCount] / 1.001;
#else
#declare Nodes[NodeCount] = Nodes[NodeCount] * 1.001;
#end
#end
#end
#for (ItterationCount, 0, NumberOfItterations - 1, 1)
#declare PlaneAngleX = rand(RandAngle) * 360;
#declare PlaneAngleY = rand(RandAngle) * 360;
#declare PlaneAngleZ = rand(RandAngle) * 360;
#declare Displacement = 0.5 - rand(RandAngle);
// #local Cut = object { CuttingPlane rotate PlaneAngle };
AdjustNodes(PlaneAngleX, PlaneAngleY, PlaneAngleZ, Displacement)
// #debug concat(str(PlaneAngle,0,0),"\n")
#end
WriteDataFile()
--
Cheers
Ger
Post a reply to this message
|
![](/i/fill.gif) |