扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:周银辉 来源:博客园 2007年11月19日
关键字:
3D模型的摆放是按照如下方法进行的,其中3个传出参数angle指定模型源Y轴的旋转角度,offsetX指定模型的X轴方向上的平移量,offsetZ指定模型在Z轴方向上的平移量.
以下是引用片段: /**//// /// 依照InteractiveVisual3D在列表中的序号来变换其位置等 /// /// 在列表中的序号 /// 列表中被作为中间项的序号 private void GetTransformOfInteractiveVisual3D(int index, double midIndex, out double angle, out double offsetX, out double offsetZ) { double disToMidIndex = index - midIndex; //旋转,两翼的图片各旋转一定的度数 angle = 0; if (disToMidIndex < 0) { angle = this.ModelAngle;//左边的旋转N度 } else if (disToMidIndex > 0) { angle = (-this.ModelAngle);//右边的旋转-N度 } //平移,两翼的图片逐渐向X轴负和正两个方向展开 offsetX = 0;//中间的不平移 if (Math.Abs(disToMidIndex) <= 1) { offsetX = disToMidIndex * this.MidModelDistance; } else if (disToMidIndex != 0) { offsetX = disToMidIndex * this.XDistanceBetweenModels + (disToMidIndex > 0 ? this.MidModelDistance : -this.MidModelDistance); } //两翼的图片逐渐向Z轴负方向移动一点,造成中间突出(离观众较近的 offsetZ = Math.Abs(disToMidIndex) * -this.ZDistanceBetweenModels; } |
点击图片或指定当前应该被突出显示的图片时的
以下是引用片段: /**//// /// 重新布局 /// private void ReLayoutInteractiveVisual3D() { int j=0; for (int i = 0; i < this.viewport3D.Children.Count; i++) { InteractiveVisual3D iv3d = this.viewport3D.Children[i] as InteractiveVisual3D; if(iv3d != null) { double angle = 0; double offsetX = 0; double offsetZ = 0; this.GetTransformOfInteractiveVisual3D(j++, this.CurrentMidIndex,out angle,out offsetX,out offsetZ); NameScope.SetNameScope(this, new NameScope()); this.RegisterName("iv3d", iv3d); Duration time = new Duration(TimeSpan.FromSeconds(0.3)); DoubleAnimation angleAnimation = new DoubleAnimation(angle, time); DoubleAnimation xAnimation = new DoubleAnimation(offsetX, time); DoubleAnimation zAnimation = new DoubleAnimation(offsetZ, time); Storyboard story = new Storyboard(); story.Children.Add(angleAnimation); story.Children.Add(xAnimation); story.Children.Add(zAnimation); Storyboard.SetTargetName(angleAnimation, "iv3d"); Storyboard.SetTargetName(xAnimation, "iv3d"); Storyboard.SetTargetName(zAnimation, "iv3d"); Storyboard.SetTargetProperty( angleAnimation, new PropertyPath("(ModelVisual3D.Transform).(Transform3DGroup.Children)[0].(RotateTransform3D.Rotation).(AxisAngleRotation3D.Angle)")); Storyboard.SetTargetProperty( xAnimation, new PropertyPath("(ModelVisual3D.Transform).(Transform3DGroup.Children)[1].(TranslateTransform3D.OffsetX)")); Storyboard.SetTargetProperty( zAnimation, new PropertyPath("(ModelVisual3D.Transform).(Transform3DGroup.Children)[1].(TranslateTransform3D.OffsetZ)")); story.Begin(this); } } } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者