【问题标题】:Absolute scaling a LinearGradientBrush texture in WPF 3D在 WPF 3D 中绝对缩放 LinearGradientBrush 纹理
【发布时间】:2012-04-24 11:00:01
【问题描述】:

我有以下 XAML:

    <Viewport3D>
      <Viewport3D.Camera>
        <OrthographicCamera FarPlaneDistance="100" LookDirection="0, 0,-1" UpDirection="0,1,0" NearPlaneDistance="1" Position="0,0,5" Width="10" />
      </Viewport3D.Camera>
      <ModelVisual3D>
        <ModelVisual3D.Content>
      <DirectionalLight Color="White" Direction="0,0,-1" />
        </ModelVisual3D.Content>
      </ModelVisual3D>
      <ModelVisual3D>
        <ModelVisual3D.Content>
          <GeometryModel3D>
            <GeometryModel3D.Material>
              <DiffuseMaterial>
                <DiffuseMaterial.Brush>
                  <LinearGradientBrush>
                    <GradientStop Color="Yellow" Offset="0" />
                    <GradientStop Color="Blue" Offset="1" />
                  </LinearGradientBrush>
                </DiffuseMaterial.Brush>
              </DiffuseMaterial>
            </GeometryModel3D.Material>
            <GeometryModel3D.Geometry>
              <MeshGeometry3D Positions="-1,-1,0 -1,1,0 1,1,0 1,-1,0" TriangleIndices="0,2,1 2,0,3" TextureCoordinates="0,0 .5,0, .5,.5 0,.5"/>
          </GeometryModel3D.Geometry>
        </GeometryModel3D>
      </ModelVisual3D.Content>
    </ModelVisual3D>
  </Viewport3D>

想要只使用一半的渐变(因为我的纹理坐标仅从 0 到 0.5)。不幸的是,LinearGradientBrush 正在拉伸以填充几何图形,而不管使用的纹理坐标如何。

您可以使用ViewportUnits="Absolute" 使用TileBrush 派生画笔修复此问题,但我不知道如何为LinearGradientBrush 修复它。有任何想法吗?

【问题讨论】:

    标签: wpf 3d lineargradientbrush


    【解决方案1】:

    在完整大小的RectangleGeometry 上使用LinearGradientBrush,并在DrawingBrush 中使用它:

    <DrawingBrush ViewportUnits="Absolute">
        <DrawingBrush.Drawing>
           <GeometryDrawing>
              <GeometryDrawing.Geometry>
                  <RectangleGeometry Rect="0,0,1,1" />
              </GeometryDrawing.Geometry>
              <GeometryDrawing.Brush>
                  <LinearGradientBrush>
                       <GradientStop Color="Yellow" Offset="0" />
                       <GradientStop Color="Green" Offset="0.5" />
                       <GradientStop Color="Blue" Offset="1" />
                   </LinearGradientBrush>
              </GeometryDrawing.Brush>
           </GeometryDrawing>
        </DrawingBrush.Drawing>
     </DrawingBrush>
    

    【讨论】:

      【解决方案2】:

      在 LinearGradientBrush 上设置 MappingMode="Absolute" 应该可以工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多