Brilliant ! On Mon, Jan 24, 2011 at 6:04 PM, Joe Winett <[email protected]> wrote:
> Excellent work. > > I thought it was simpler to do this near line 156 of HoverCamera3D.as: > > /* > if ((x == gx) && (y == gy) && (z == gz)) > return false; > */ > if ( Math.abs( x - gx ) < 0.1 && Math.abs( y - gy ) < 0.1 && > Math.abs( z - gz ) < 0.1 ) > return false; > > Thanks, > > Joe > > > On Jan 9, 5:08 am, nlorut <[email protected]> wrote: > > Weird right? > > Here is a temporary fix, using angle and position tresholds : > > > > public functionhover(jumpTo:Boolean =false):Boolean > > { > > > > var angleTreshold:Number = 0.1; > > var positionTreshold:Number = 0.1; > > > > var camUpdated =false; > > > > if (tiltAngle != _currentTiltAngle || panAngle != > _currentPanAngle) { > > > > tiltAngle = Math.max(minTiltAngle, Math.min(maxTiltAngle, > > tiltAngle)); > > > > panAngle = Math.max(minPanAngle, Math.min(maxPanAngle, > panAngle)); > > > > if (wrapPanAngle) { > > if (panAngle < 0) > > panAngle = (panAngle % 360) + 360; > > else > > panAngle = panAngle % 360; > > > > if (panAngle - _currentPanAngle < -180) > > panAngle += 360; > > else if (panAngle - _currentPanAngle > 180) > > panAngle -= 360; > > } > > > > if (jumpTo) { > > _currentTiltAngle = tiltAngle; > > _currentPanAngle = panAngle; > > } else { > > _currentTiltAngle += (tiltAngle - > _currentTiltAngle)/(steps + 1); > > _currentPanAngle += (panAngle - > _currentPanAngle)/(steps + 1); > > } > > > > //snap coords if angle differences are close > > if ((Math.abs(tiltAngle - _currentTiltAngle) < > angleTreshold) && > > (Math.abs(panAngle - _currentPanAngle) < angleTreshold)) { > > _currentTiltAngle = tiltAngle; > > _currentPanAngle = panAngle; > > } > > > > camUpdated = true; > > } > > > > var gx:Number = target.x + > > > distance*Math.sin(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*to > RADIANS); > > var gz:Number = target.z + > > > distance*Math.cos(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*to > RADIANS); > > var gy:Number = target.y + > > distance*Math.sin(_currentTiltAngle*toRADIANS)*yfactor; > > > > if ((Math.abs(x - gx) >= positionTreshold) || (Math.abs(y - gy) > >= > > positionTreshold) || (Math.abs(z - gz) >= positionTreshold)) { > > x = gx; > > y = gy; > > z = gz; > > camUpdated = true; > > } > > > > return camUpdated; > > > > } > > > > Not perfect but hey it works. > > Waiting for an opinion... thanks. > > > > Nicolas > > > > On 7 jan, 20:23, nlorut <[email protected]> wrote: > > > > > > > > > > > > > > > > > Hi, > > > Congrats for your amazing work. > > > I have recently updated the trunk, and it seems HoverCamera3D.hover() > > > doesn't return 'false' anymore. > > > In order to figure this out, here are a few test lines i wrote in > > > HoverCamera3D.as : > > > > > "[...] > > > var gx:Number = target.x + > > > > distance*Math.sin(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*to > RADIANS); > > > var gz:Number = target.z + > > > > distance*Math.cos(_currentPanAngle*toRADIANS)*Math.cos(_currentTiltAngle*to > RADIANS); > > > var gy:Number = target.y + > > > distance*Math.sin(_currentTiltAngle*toRADIANS)*yfactor; > > > > > //test// trace ("x (" + x + ") == gx (" + gx + ") ?"); > > > //test// trace ("y (" + y + ") == gy (" + gy + ") ?"); > > > //test// trace ("z (" + z + ") == gz (" + gz + ") ?"); > > > > > if ((x == gx) && (y == gy) && (z == gz)) > > > returnfalse; > > > > > x = gx; > > > y = gy; > > > z = gz; > > > > > //test// trace ("x final = " + x); > > > //test// trace ("y final = " + y); > > > //test// trace ("z final = " + z); > > > > > return true; > > > [...]" > > > > > And here is what i get in the output, as the camera is no longer > > > updated : > > > > > "[...] > > > x (7852.2958984375) == gx (7852.296056215698) ? > > > y (6446.26171875) == gy (6446.2618632336935) ? > > > z (9358.001953125) == gz (9358.002035108404) ? > > > x final = 7852.2958984375 > > > y final = 6446.26171875 > > > z final = 9358.001953125 > > > camHasMoved ? true > > > x (7852.2958984375) == gx (7852.296056215698) ? > > > y (6446.26171875) == gy (6446.2618632336935) ? > > > z (9358.001953125) == gz (9358.002035108404) ? > > > x final = 7852.2958984375 > > > y final = 6446.26171875 > > > z final = 9358.001953125 > > > camHasMoved ? true > > > ..." > > > > > It seems there is a decimal precision problem between gx/gy/gz Numbers > > > (12) and x/y/z cam properties (10). > > > > > What do you think? > > > Thanks in advance for your help. > > > Nicolas >
