POV-Ray : Newsgroups : povray.general : Debugging help : Re: Debugging help Server Time
19 Apr 2024 02:10:08 EDT (-0400)
  Re: Debugging help  
From: Bald Eagle
Date: 23 May 2017 12:35:00
Message: <web.5924641b1ef603fec437ac910@news.povray.org>
"Bald Eagle" <cre### [at] netscapenet> wrote:

> Have to try an atan2 in there to see what happens.


Yep, that did the trick.

You need to use:

#local wall_th = degrees (atan2 (END.x, END.z));
rotate y*(wall_th-90)


#######################################################################



#version 3.7;

#include "math.inc"
#include "functions.inc"
#include "rad_def.inc"
#include "colors.inc"
#include "rand.inc"

#default {
    pigment { rgb <0.07,0.37,0.75> }
    finish { ambient 0 }
    }
#local FAST = 1;
#local FANCY = 2;
#local FANCIER = 3;
/* !- Global Switches -! */
#declare RAD = off      ;
#declare PHO = off      ;
#declare TEX = on       ;
#declare LGT = FAST     ;
/* --------------------- */

#if(RAD)
    #if(LGT = FANCIER)
        #declare Count_Max = 160000;
        #default {
            radiosity { importance 0.001 }
            }
//intersection {
    #else
        #declare Count_Max = 160;
        #default {
            radiosity { importance 1.0 }
            }
    #end
#end

global_settings {
#if(RAD)
     radiosity {
        pretrace_start 0.08
        pretrace_end   0.004
        count Count_Max

        nearest_count 8
        error_bound 0.15
        recursion_limit 2
        low_error_factor 0.5
        gray_threshold 0.2
        minimum_reuse 0.015
        brightness 1.0
        normal off

        adc_bailout 0.01/2
       }
#end

#if (PHO)
    photons {
        // count 20000
        spacing 1/1000
//        autostop 0.51
//        jitter 0.4
        }
#end
     assumed_gamma 1.0
     // max_trace_level 10
     }

light_source { <60.0, 120.0, -50.0> rgb 1 }

camera {
    ultra_wide_angle
    location <30.0, 75.0, -100.0>
//    location <0.0, 15.0, -25.0>
    up y
    right x*(image_width/image_height)
    look_at <0.0, 6.0, 25.0>
    }

#declare F_RoughBrick =
function {
     pattern {
          wrinkles
          turbulence <0.3, 0.1, 0.5>
    scale <1.0, 1.0, 0.125>
          }
     }
#declare F_GraniteFacing =
function {
     pattern {
          granite
          turbulence <0.3, 0.1, 0.5>
    scale 0.01
          }
     }

#declare F_Sandstone =
function {
     pattern {
          bozo
          turbulence 0.7
          ramp_wave
          rotate -90.0 * x
          }
     }

#macro Block(X, Y, Z)
#local pattern_seed = 15643544181;
#local _X = Rand_Normal(0.0, 1.0, RdmA)*2e5;
#local _Y = Rand_Normal(0.0, 1.0, RdmB)*2e5;
#local _Z = Rand_Normal(0.0, 1.0, RdmC)*2e5;

isosurface {
 function {
      f_rounded_box(x,y,z,0.0625,
           X-0.0078125*F_RoughBrick(x-_X,y-_Y,z-_Z),
           Y-0.0078125*F_RoughBrick(x-_X,y-_Y,z-_Z),
           Z/2-0.078125*F_RoughBrick(x-_X,y-_Y,z-_Z))
      }
 threshold 0
 max_gradient 2
 contained_by { box { <0.0, 0.0, -Z/2> <X, Y, Z/2> } }
 all_intersections
     // translate <0.5*L, 0.5*T, 0.0>
 }
#end

#macro Wall (START, END, HEIGHT, BSIZE, MWIDTH)

    #local wall_vec = vnormalize (END - START);
    #local wall_vec = <wall_vec.u, 0, wall_vec.v>;
    #local wall_dlength = vlength (END - START);
    #local wall_perp = vcross (wall_vec, y);
    //#local wall_th  = degrees (acos (vdot (wall_vec, x)));
    #local wall_th = degrees (atan2 (wall_vec.x, wall_vec.z));
    #local remainder = 0;

 //intersection {
    union {
    #local wall_aheight = 0.0;
    #while (wall_aheight < HEIGHT)
    #local wall_alength = 0.0;
        #while(wall_alength < wall_dlength)
            #local nbLength = (remainder > 0 ? remainder : min(BSIZE.x,
wall_dlength - wall_alength));
            #local remainder = 0;
            object { Block(nbLength, BSIZE.y, BSIZE.z) rotate y*(wall_th-90)
//-(wall_th)*y
   translate <START.u, wall_aheight, START.v> + wall_alength*wall_vec }
        #local wall_alength = wall_alength + nbLength + MWIDTH;
        #end
    #local remainder = BSIZE.x - nbLength;
    #local wall_aheight = wall_aheight + BSIZE.y + MWIDTH;
    #end

        }
/*    prism {
        0, HEIGHT, 5
        START - BSIZE.z*0.5*<wall_perp.x, wall_perp.z>, END -
BSIZE.z*0.5*<wall_perp.x, wall_perp.z>,
        END + BSIZE.z*0.5*<wall_perp.x, wall_perp.z>, START +
BSIZE.z*0.5*<wall_perp.x, wall_perp.z>,
        START - BSIZE.z*0.5*<wall_perp.x, wall_perp.z>
        }
    }*/

#end

#macro hexTower (MINR, PROTR, HEIGHT, OFFSET)

#local minR = MINR;
#local majR = minR/cosd(30);
#local pR = PROTR;
#local Offset2 = OFFSET;

#declare tArray =
array[19] {
     majR *    <cosd (0),           sind(0)>,
         <majR * cosd(60) - pR * sind (60 + 150),           majR * sind(60) +
pR*cosd(60 + 150)>,
         <(majR + Offset2) * cosd(60) - pR * sind (60 + 150),   (majR + Offset2)
* sind (60) + pR * cosd (60 + 150)>,
     (majR + Offset2) *  <cosd (60),           sind(60)>,
         <(majR + Offset2) * cosd (60) - pR*sind(60 + 30),   (majR + Offset2) *
sind(60) + pR * cosd (60 + 30)>,
         <majR*cosd(60) - pR*sind (60 + 30),      majR * sind (60) + pR*cosd(60
+ 30)>
     majR *    <cosd(120),           sind (120)>,
         <majR*cosd(180) - pR * sind (180 + 150),     majR * sind(180) + pR *
cosd (180 + 150)>,
         <(majR + Offset2) *  cosd (180) - pR * sind (180 + 150),  (majR +
Offset2) *  sind (180) + pR * cosd (180 + 150)>,
     (majR + Offset2) *  <cosd (180),           sind (180)>,
         <(majR + Offset2) *  cosd (180) - pR * sind (180 + 30),  (majR +
Offset2) *  sind (180) + pR * cosd (180 + 30)>,
         <majR * cosd (180) - pR * sind (180 + 30),     majR * sind (180) + pR *
cosd (180 + 30)>,
     majR *    <cosd (240),           sind (240)>,
         <majR * cosd (300) - pR * sind (300 + 150),     majR * sind (300) + pR
* cosd (300 + 150)>,
         <(majR + Offset2) * cosd (300) - pR * sind (300 + 150),  (majR +
Offset2) * sind (300) + pR * cosd (300 + 150)>,
     (majR + Offset2) *  <cosd (300),           sind (300)>,
         <(majR + Offset2) * cosd (300) - pR * sind (300 + 30),  (majR +
Offset2) * sind (300) + pR * cosd (300 + 30)>,
         <majR * cosd (300) - pR * sind (300 + 30),     majR * sind(300) + pR *
cosd (300 + 30)>,
     majR *    <cosd(0),           sind (0)>
    }

#for(c, 0, 17, 1)
    Wall(tArray[c], tArray[c + 1], 10.0, <2.25, 0.75, 1.25>, 0.375/12)
#end

#end

plane { y, 0 pigment { White } }

union { hexTower(35.0 + 2.25/cosd(30), 10.0 + 2.25/cosd(30), 10.0, 5.0) }
//Wall(<-15.0, 10.0>, <15.0, 25.0>, 10.0, <2.25, 0.75, 1.25>, 0.375/12)


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.