为RGB立方体着色

时间:2016-03-11 15:37:25

标签: wpf xaml rgb

我想用正确的颜色为立方体的六边着色,例如:

enter image description here

我怎么能这样做?

我有以下XAML代码:

<Grid>
    <Viewport3D Name="viewport3D1">
        <Viewport3D.Camera>
            <PerspectiveCamera x:Name="camMain" Position="6 5 4" 
                               LookDirection="-6 -5 -4">
            </PerspectiveCamera>
        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1">
                </DirectionalLight>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <ModelVisual3D x:Name="MyModel">
            <ModelVisual3D.Content>
                <GeometryModel3D>
                    <GeometryModel3D.Geometry>
                        <MeshGeometry3D x:Name="meshMain"
Positions="0 0 0  1 0 0  0 1 0  1 1 0  0 0 1  1 0 1  0 1 1  1 1 1"
TriangleIndices="2 3 1  2 1 0  7 1 3  7 5 1  6 5 7  6 4 5  6 2 0  2 0 4  2 7 3  2 6 7  0 1 5  0 5 4">
                        </MeshGeometry3D>
                    </GeometryModel3D.Geometry>
                    <GeometryModel3D.Material>
                        <DiffuseMaterial x:Name="matDiffuseMain">
                            <DiffuseMaterial.Brush>
                                <LinearGradientBrush StartPoint="0,0.5" 
                                                     EndPoint="1,0.5">
                                    <GradientStop Color="Red" Offset="0.0"/>
                                </LinearGradientBrush>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </GeometryModel3D.Material>
                </GeometryModel3D>
            </ModelVisual3D.Content>
            <ModelVisual3D.Transform>
                <RotateTransform3D CenterX="0.5" CenterY="0.5" CenterZ="0.5">
                    <RotateTransform3D.Rotation>
                        <AxisAngleRotation3D x:Name="rotate" Axis="1 0 0"/>
                    </RotateTransform3D.Rotation>
                </RotateTransform3D>
            </ModelVisual3D.Transform>
        </ModelVisual3D>
    </Viewport3D>
    <Slider Height="23" HorizontalAlignment="Left" 
            Margin="12,12,0,0" Name="slider1"
            VerticalAlignment="Top" Width="187" 
            Maximum="360"
            Value="{Binding ElementName=rotate, Path=Angle}" 
            ValueChanged="slider1_ValueChanged" />
</Grid>

2 个答案:

答案 0 :(得分:1)

这可以单独在XAML中完成,但是您需要将立方体拆分为6个面并为每个面应用不同的纹理。

纹理本身需要是包含两个线性渐变画笔的VisualBrushes,每个画笔一个。我对this question的回答应该足以让你前进。

其次,如果要将VisualBrush应用于网格几何体,则还需要指定纹理坐标,this page包含有关如何执行此操作的一些详细信息。

如果你仍然无法让这个工作,那么回到这里,我会自己解决这个问题。

答案 1 :(得分:0)

有两种可能的解决方案:
- 用彩色材料替换6个几何板上的立方体的geometryModel - 为立方体应用图像纹理