b7cd4ba7 |
1 | puts "========" |
2 | puts "OCC24307 Objects clipping algorithm using BVH performance test: Solid spheres test" |
3 | puts "========" |
4 | |
5 | # define objects' location parameters and their characteristics |
6 | set SPHERES_NUM 10 |
7 | set SPERE_RADIUS 100 |
8 | set SPHERE_FINENESS 10 |
9 | set PERCENT_OF_INNER_SPHERES 30 |
10 | |
11 | # window parameters |
12 | set SMALL_WIN_WIDTH 512 |
13 | set SMALL_WIN_HEIGHT 512 |
14 | |
15 | # other |
16 | array set aSphereNames {} |
17 | |
18 | set aWithoutClippingSnapshot $imagedir/${casename}_without.png |
19 | set aWithClippingSnapshot $imagedir/${casename}_with.png |
20 | set aDiffImage $imagedir/${casename}_diff.png |
21 | |
22 | pload VISUALIZATION MODELING |
23 | vinit name=small_wnd l=32 t=32 w=$SMALL_WIN_WIDTH h=$SMALL_WIN_HEIGHT |
24 | vactivate small_wnd |
25 | vfrustumculling 0 |
26 | vautozfit 0 |
27 | vviewparams -scale 1.953125 -eye 0.57735026918962573 -0.57735026918962573 0.57735026918962573 |
28 | vzrange 1 512 |
29 | vclear |
30 | vremove -all -noinfo |
31 | |
32 | puts [vdrawsphere tmp_sph $SPHERE_FINENESS] |
33 | vremove -noinfo tmp_sph |
34 | |
35 | set aInnerSpheresNum [expr $SPHERES_NUM * $PERCENT_OF_INNER_SPHERES / 100] |
36 | puts "" |
37 | set aDebugInfo "Total number of visible objects: " |
38 | append aDebugInfo $aInnerSpheresNum |
39 | puts $aDebugInfo |
40 | puts "" |
41 | |
42 | puts "Start displaying spheres without clipping..." |
43 | set aInnerWidthStep [expr $SMALL_WIN_WIDTH / ($aInnerSpheresNum + 1)] |
44 | set aInnerHeightStep [expr $SMALL_WIN_HEIGHT / ($aInnerSpheresNum + 1)] |
45 | set aOuterStep [expr $SPERE_RADIUS * 3 / ($SPHERES_NUM - $aInnerSpheresNum + 1)] |
46 | for {set i 0} {$i < $aInnerSpheresNum} {incr i} { |
47 | set aCurrName "inner_sph" |
48 | append aCurrName $i |
49 | set aX [expr - $SMALL_WIN_WIDTH / 2 + ($i + 1) * $aInnerWidthStep ] |
50 | set aY [expr - $SMALL_WIN_HEIGHT / 2 + ($i + 1) * $aInnerHeightStep ] |
51 | vdrawsphere $aCurrName $SPHERE_FINENESS $aX $aY 0 $SPERE_RADIUS 0 0 |
52 | set aSphereNames($i) $aCurrName |
53 | } |
54 | for {set i $aInnerSpheresNum} {$i < $SPHERES_NUM} {incr i} { |
55 | set aCurrName "outer_sph" |
56 | append aCurrName $i |
57 | set aX [expr - $SMALL_WIN_WIDTH - $SPERE_RADIUS * 3 + ($i - $aInnerSpheresNum + 1) * $aOuterStep ] |
58 | set aY [expr - $SMALL_WIN_HEIGHT - $SPERE_RADIUS * 3 + ($i - $aInnerSpheresNum + 1) * $aOuterStep ] |
59 | vdrawsphere $aCurrName $SPHERE_FINENESS $aX $aY 0 $SPERE_RADIUS 0 0 |
60 | set aSphereNames($i) $aCurrName |
61 | } |
62 | puts [vfps] |
63 | vdump $aWithoutClippingSnapshot |
64 | puts "All spheres were displayed." |
65 | puts "" |
66 | |
67 | verase |
68 | |
69 | puts "Start displaying spheres with clipping..." |
70 | vfrustumculling 1 |
71 | vdisplayall |
72 | puts [vfps] |
73 | vdump $aWithClippingSnapshot |
74 | puts "All spheres were displayed." |
75 | puts "" |
76 | |
77 | set aDiffImageResult [diffimage $aWithClippingSnapshot $aWithoutClippingSnapshot 0.1 0 0 $aDiffImage] |
78 | if {$aDiffImageResult != 0} { |
79 | puts "ERROR : Test failed: there is a difference between images rendered with and without clipping" |
80 | } |
81 | |
82 | verase |