@@ -19,10 +19,12 @@ program precompute_radiance_transfer;
19
19
20
20
uses SysUtils, CastleUtils, CastleVectors, CastleSceneCore, X3DNodes, X3DLoad,
21
21
CastleInternalSphereSampling, CastleColors,
22
- CastleInternalSphericalHarmonics, CastleParameters, CastleTimeUtils, CastleShapes;
22
+ CastleInternalSphericalHarmonics, CastleParameters, CastleTimeUtils,
23
+ CastleShapes, CastleInternalTriangleOctree, CastleRayTracer;
23
24
24
25
var
25
26
Scene: TCastleSceneCore;
27
+ OctreeVisibleTriangles: TTriangleOctree;
26
28
Normals: TVector3List;
27
29
SHBasisCount: Integer = 25 ;
28
30
RaysPerVertex: Cardinal = 1000 ;
67
69
begin
68
70
RayDirectionPT := RandomHemispherePointConst;
69
71
RayDirection := PhiThetaToXYZ(RayDirectionPT, N);
70
- if not Scene.InternalOctreeVisibleTriangles .IsRayCollision(V, RayDirection,
72
+ if not OctreeVisibleTriangles .IsRayCollision(V, RayDirection,
71
73
nil , true { yes, ignore margin at start, to not hit V } ,
72
74
nil ) then
73
75
begin
@@ -156,10 +158,11 @@ begin
156
158
Parameters.Parse(Options, @OptionProc, nil );
157
159
Parameters.CheckHigh(2 );
158
160
161
+ OctreeVisibleTriangles := nil ;
159
162
Scene := TCastleSceneCore.Create(nil );
160
163
try
161
164
Scene.Load(Parameters[1 ]);
162
- Scene.Spatial := [ssVisibleTriangles] ;
165
+ OctreeVisibleTriangles := CreateOctreeVisibleTrianglesForScene(Scene) ;
163
166
164
167
TimeStart := ProcessTimer;
165
168
@@ -204,5 +207,8 @@ begin
204
207
205
208
SaveNode(Scene.RootNode, Parameters[2 ],
206
209
' radianceTransfer computed by precompute_radiance_transfer: ' + S);
207
- finally FreeAndNil(Scene) end ;
210
+ finally
211
+ FreeAndNil(Scene);
212
+ FreeAndNil(OctreeVisibleTriangles);
213
+ end ;
208
214
end .
0 commit comments