亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C# WPF實(shí)現(xiàn)動(dòng)態(tài)3D光照效果

 更新時(shí)間:2023年03月01日 09:27:35   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了如何利用C# WPF實(shí)現(xiàn)動(dòng)態(tài)3D的光照效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

交互式調(diào)節(jié)光效

接下來(lái)想動(dòng)態(tài)實(shí)現(xiàn)光照效果,即如下圖所示

看到這個(gè)滾動(dòng)條,大家可能馬上想到,將SliderLight的內(nèi)容綁定在一起似乎更容易實(shí)現(xiàn)。所以第一步就是把光效和幾何模型分開(kāi),其著手點(diǎn)自然是mainViewport,將其內(nèi)部填充如下內(nèi)容。

<Viewport3D Name="mainViewport">
    <Viewport3D.Camera>
        <PerspectiveCamera x:Name="camera"/>
    </Viewport3D.Camera>
    <ModelVisual3D x:Name="visual3d">
        <ModelVisual3D.Content>
            <Model3DGroup x:Name="MainGroup">
                <AmbientLight Color="White"/>
            </Model3DGroup>
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>

其中,AmbientLight就是光效,而且是最普通的全部照亮。相應(yīng)地更改cs端的代碼,主要變化為

private void initialize3D()
{
    DefineCamera(mainViewport);
    DefineModel(MainGroup);
}

private void DefineCamera(Viewport3D viewport)
{
    camera = new PerspectiveCamera();
    camera.FieldOfView = 60;
    new Ctrl(camera, viewport, this, viewport, viewport);
}
MeshGeometry3D mesh;
private void DefineModel(Model3DGroup group)
{
    // 生成曲面.
    mesh = SetEarth(50, 50);
    ImageBrush smileyBrush = new ImageBrush();
    smileyBrush.ImageSource = new BitmapImage(new Uri("cs3d_8.jpg", UriKind.Relative));
    SurfaceModel = new GeometryModel3D(mesh, new DiffuseMaterial(smileyBrush));
    group.Children.Add(SurfaceModel);
}

接下來(lái)則著手改造xml端的光效,方法是將SpotLihght的內(nèi)外尺寸和Slider綁定在一起。這個(gè)操作大家應(yīng)該是比較熟悉的了,畢竟早在畫立方體的時(shí)候就已經(jīng)演示過(guò)了。

首先,用DockPanel布局,將Slider放在上面的WrapPanel中。

<DockPanel LastChildFill="True">
<WrapPanel DockPanel.Dock="Top">
    <WrapPanel DockPanel.Dock="Top" Margin="0 0 10 0">
        <WrapPanel>
            <TextBlock Text="Inner"/>
            <Slider Width="200" Value="3" Maximum="20" Minimum="1" x:Name="sInner"/>
            <TextBox Text="{Binding ElementName=sInner,Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
         Margin="0 5" Width="30"/>
        </WrapPanel>
        <WrapPanel Margin="10 0 0 0">
            <TextBlock Text="Outer"/>
            <Slider Width="200" Value="10" Maximum="30" Minimum="1" x:Name="sOuter"/>
            <TextBox Text="{Binding ElementName=sOuter,Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
         Margin="0 5" Width="30"/>
        </WrapPanel>
    </WrapPanel>
    <Viewport3D Name="mainViewport">
            </Viewport3D>
</DockPanel>

給地球點(diǎn)顏色看看

由于此前一直是白光照明,所以有些枯燥,故而接下來(lái)用不同顏色的光照明,其效果為

顏色也是光效的一部分,但由于顏色并不是單個(gè)的數(shù)值,從而難以直接綁定,但其Slider代碼和sInner是差不多的,對(duì)于RGB通道,分別建立如下的區(qū)塊。

<WrapPanel Margin="5">
    <TextBlock Text="R"/>
    <Slider Width="200" Value="150" Maximum="255" Minimum="0" x:Name="sColorR" ValueChanged="colorChanged"/>
    <TextBox Text="{Binding ElementName=sColorR,Path=Value, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
     Margin="0 5" Width="30"/>
</WrapPanel>

然后將colorChanged寫為

private void colorChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    if (!isInit)
        return;
    mySpotLight.Color = Color.FromRgb(
        (byte)sColorR.Value, (byte)sColorG.Value, (byte)sColorB.Value);
}

其中,isInit是個(gè)全局變量,當(dāng)所有界面初始化完成之后設(shè)為True。

到此這篇關(guān)于C# WPF實(shí)現(xiàn)動(dòng)態(tài)3D光照效果的文章就介紹到這了,更多相關(guān)C# WPF動(dòng)態(tài)3D光照內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#編程報(bào)錯(cuò)System.InvalidOperationException問(wèn)題及解決

    C#編程報(bào)錯(cuò)System.InvalidOperationException問(wèn)題及解決

    這篇文章主要介紹了C#編程報(bào)錯(cuò)System.InvalidOperationException問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)繪圖graphic的方法示例

    C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)繪圖graphic的方法示例

    這篇文章主要介紹了C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)繪圖graphic的方法,結(jié)合實(shí)例形式分析了C#根據(jù)動(dòng)態(tài)數(shù)據(jù)繪制2D數(shù)據(jù)表格的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • 基于C#實(shí)現(xiàn)的敏感字檢測(cè)示例

    基于C#實(shí)現(xiàn)的敏感字檢測(cè)示例

    這篇文章主要介紹了基于C#實(shí)現(xiàn)的敏感字檢測(cè)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • C#編寫Windows服務(wù)實(shí)例代碼

    C#編寫Windows服務(wù)實(shí)例代碼

    本篇文章主要介紹使用Microsoft Visual Studio2012可以很方便的創(chuàng)建一個(gè)Windows服務(wù),本例實(shí)現(xiàn)一個(gè)向D盤的txt文件里,寫入系統(tǒng)時(shí)間的Windows服務(wù)
    2013-10-10
  • C#滑動(dòng)驗(yàn)證碼拼圖驗(yàn)證功能實(shí)現(xiàn)(SlideCaptcha)

    C#滑動(dòng)驗(yàn)證碼拼圖驗(yàn)證功能實(shí)現(xiàn)(SlideCaptcha)

    目前網(wǎng)站上的驗(yàn)證碼機(jī)制可謂是五花八門,有簡(jiǎn)單的數(shù)字驗(yàn)證,有摻雜了字母和文字的混淆驗(yàn)證,還有通過(guò)滑塊進(jìn)行的拼圖驗(yàn)證,下面這篇文章主要給大家介紹了關(guān)于C#滑動(dòng)驗(yàn)證碼拼圖驗(yàn)證功能的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2022-04-04
  • C#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法

    C#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法

    下面小編就為大家?guī)?lái)一篇C#獲取鼠標(biāo)在listview右鍵點(diǎn)擊單元格的內(nèi)容方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • C#基于NPOI操作Excel

    C#基于NPOI操作Excel

    這篇文章介紹了C#基于NPOI操作Excel的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Unity EasyTouch搖桿插件使用示例詳解

    Unity EasyTouch搖桿插件使用示例詳解

    這篇文章主要介紹了Unity EasyTouch搖桿插件使用,這套插件還支持雙指縮放,滑動(dòng),手指畫圈,點(diǎn)擊,多指觸碰,拖拽等,通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • C#模擬window操作鼠標(biāo)的方法

    C#模擬window操作鼠標(biāo)的方法

    這篇文章主要介紹了C#模擬window操作鼠標(biāo)的方法,可實(shí)現(xiàn)模擬鼠標(biāo)移動(dòng)到固定位置后點(diǎn)擊右鍵的功能,涉及鼠標(biāo)常用事件的操作技巧,需要的朋友可以參考下
    2015-07-07
  • C#中數(shù)組Array,ArrayList,泛型List詳細(xì)對(duì)比

    C#中數(shù)組Array,ArrayList,泛型List詳細(xì)對(duì)比

    關(guān)于數(shù)組Array,ArrayList,泛型List,簡(jiǎn)單的說(shuō)數(shù)組就是值對(duì)象,它存儲(chǔ)數(shù)據(jù)元素類型的值的一系列位置.Arraylist和list可以提供添加,刪除,等操作的數(shù)據(jù). 具體如何進(jìn)行選擇使用呢,我們來(lái)詳細(xì)探討下
    2016-06-06

最新評(píng)論