最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于WPF實(shí)現(xiàn)3D畫廊動(dòng)畫效果的示例代碼

 更新時(shí)間:2023年02月28日 17:04:13   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了如何基于WPF實(shí)現(xiàn)簡單的3D畫廊動(dòng)畫效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

接下來想做一個(gè)圖廊,所以并沒有必要用立方體,只需做一些“墻壁”就行了。

而在一個(gè)平面上建起另一個(gè)矩形的平面,實(shí)則非常容易,只需輸入墻角的兩點(diǎn)和高度就可以了,這對(duì)于寫過正方體的人來說絕對(duì)是簡單得很,無非是把四個(gè)點(diǎn)劈成兩個(gè)三角形

private MeshGeometry3D MakeSurface(Point3D p0, Point3D p1, Point3D p2, Point3D p3)
{
    MeshGeometry3D mesh = new MeshGeometry3D();
    Point3D[] pts ={p0, p1, p2, p3};
    foreach (var pt in pts)
        mesh.Positions.Add(pt);
    foreach (var i in new int[6] { 0, 1, 2, 2, 3, 0 })
        mesh.TriangleIndices.Add(i);

???????    return mesh;
}

接下來可以像之前做正方體時(shí)那樣,先做一個(gè)平的地面,然后在地面上放置一些正方體。

由于地面上的正方形要求垂直于地面,所以重載一下

private MeshGeometry3D MakeSurface(Point p0, Point p1, double high)
{
    return MakeSurface(
        new Point3D(p0.X, 0, p0.Y), 
        new Point3D(p1.X, 0, p1.Y), 
        new Point3D(p1.X, high, p1.Y), 
        new Point3D(p0.X, high, p0.Y));
}

然后生成模型

代碼為

private void DefineModel(Model3DGroup group)
{
    // Make the ground.
    const double wid = 10;
    MeshGeometry3D groundMesh = MakeSurface(
        new Point3D(-wid, 0, -wid),
        new Point3D(-wid, 0, +wid),
        new Point3D(+wid, 0, +wid),
        new Point3D(+wid, 0, -wid));
    DiffuseMaterial groundMaterial = new DiffuseMaterial(Brushes.DarkGray);
    GeometryModel3D groundModel = new GeometryModel3D(groundMesh, groundMaterial);
    group.Children.Add(groundModel);

    MaterialGroup gpMaterial;

    for (int x = -2; x <= 2; x += 2)
    {
        for (int y = -2; y <= 2; y += 2)
        {
            MeshGeometry3D mesh = MakeSurface(new Point(x, y), new Point(x, y + 1), 1);
            byte r = (byte)(128 + x * 50);
            byte g = (byte)(128 + y * 50);
            byte b = (byte)(128 + x * 50);
            Color color = Color.FromArgb(255, r, g, b);
            DiffuseMaterial material = new DiffuseMaterial(
                new SolidColorBrush(color));

            GeometryModel3D model = new GeometryModel3D(mesh, material);
            group.Children.Add(model);
        }
    }
}

接下來就是掛載貼圖,結(jié)果大致如下

其方法也很簡單,就是把material變成想要的圖片,故而先把圖像放在一個(gè)字符串?dāng)?shù)組里

static readonly string[] imgs = new string[9]
{
    "2d1.png","2d2.png","2d3.png","2d4.png","2d5.png",
    "2d6.png","2d7.png","2d8.png","2d9.png"
};

接下來需要注意一點(diǎn),圖像本身需要一個(gè)坐標(biāo)系,故而要把墻壁的代碼改為

private MeshGeometry3D MakeSurface(Point p0, Point p1, double high, string uri = null)
{
    var mesh = MakeSurface(
        new Point3D(p0.X, 0, p0.Y), new Point3D(p1.X, 0, p1.Y), 
        new Point3D(p1.X, high, p1.Y), new Point3D(p0.X, high, p0.Y));
    //這四個(gè)點(diǎn)代表圖像上的坐標(biāo)和圖形中點(diǎn)的對(duì)應(yīng)關(guān)系
    Point[] textureCoods = new Point[4]
    {
        new Point(0, 1),new Point(1, 1),
        new Point(1, 0),new Point(0, 0),
    };
    foreach (var pt  in textureCoods)
        mesh.TextureCoordinates.Add(pt);
    return mesh;
}

然后在生成正方形時(shí),用圖像取代顏色

ImageBrush imgBrush = new ImageBrush();
imgBrush.ImageSource = new BitmapImage(new Uri(
    $"imgs//{imgs[k++]}", UriKind.Relative));

MeshGeometry3D mesh = MakeSurface(new Point(x, y), new Point(x, y + 1), 1);

GeometryModel3D model = new GeometryModel3D(mesh, new DiffuseMaterial(imgBrush));
group.Children.Add(model);

這樣二次元妹紙就花在墻壁上啦。

當(dāng)然,如果想象力豐富的話可以把墻壁連在一起像迷宮那種,肯定會(huì)有沉浸式的體驗(yàn)。

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

相關(guān)文章

  • C#中out參數(shù)、ref參數(shù)與值參數(shù)的用法及區(qū)別

    C#中out參數(shù)、ref參數(shù)與值參數(shù)的用法及區(qū)別

    這篇文章主要給大家介紹了關(guān)于C#中out參數(shù)、ref參數(shù)與值參數(shù)的用法及區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • c# 多線程環(huán)境下控制對(duì)共享資源訪問的解決方法

    c# 多線程環(huán)境下控制對(duì)共享資源訪問的解決方法

    這篇文章主要介紹了c# 多線程環(huán)境下控制對(duì)共享資源訪問的解決方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • C#凈化版WebApi框架的實(shí)現(xiàn)

    C#凈化版WebApi框架的實(shí)現(xiàn)

    這篇文章主要介紹了C#凈化版WebApi框架的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • C#使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容

    C#使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容

    HtmlAgilityPack是一個(gè)HTML解析類庫,這篇文章主要為大家詳細(xì)介紹了C#如何使用HtmlAgilityPack實(shí)現(xiàn)解析提取HTML內(nèi)容,感興趣的小伙伴可以參考一下
    2023-12-12
  • WPF使用觸發(fā)器需要注意優(yōu)先級(jí)問題解決

    WPF使用觸發(fā)器需要注意優(yōu)先級(jí)問題解決

    本文主要介紹了WPF使用觸發(fā)器需要注意優(yōu)先級(jí)問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • C# 調(diào)用WebApi的實(shí)現(xiàn)

    C# 調(diào)用WebApi的實(shí)現(xiàn)

    這篇文章主要介紹了C# 調(diào)用WebApi的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C#調(diào)用C++的實(shí)現(xiàn)步驟

    C#調(diào)用C++的實(shí)現(xiàn)步驟

    本文主要介紹了C#調(diào)用C++的基本規(guī)則和方法,包括內(nèi)存對(duì)齊、調(diào)用約定、基本數(shù)據(jù)類型的傳遞、結(jié)構(gòu)體的傳遞以及數(shù)組的傳遞等,感興趣的可以了解一下
    2024-11-11
  • C# TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件問題

    C# TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件問題

    這篇文章主要介紹了C# TabControl控件中TabPage選項(xiàng)卡切換時(shí)的觸發(fā)事件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • C#調(diào)用HTTP POST請(qǐng)求上傳圖片的示例代碼

    C#調(diào)用HTTP POST請(qǐng)求上傳圖片的示例代碼

    現(xiàn)在很多B/S系統(tǒng)的開發(fā)都是通過API方式來進(jìn)行的,一般服務(wù)端會(huì)開放一個(gè)API接口,客戶端調(diào)用API接口來實(shí)現(xiàn)圖片或文件上傳的功能,感興趣的可以了解一下
    2021-05-05
  • .net 隨機(jī)生成漢字

    .net 隨機(jī)生成漢字

    在c#中可以使用system.text來處理所有語言編碼,其中encodiong類是比較重要的漢字編碼類,接下來我們就圍繞c#隨機(jī)生成漢字代碼講起,有需要的朋友可以參考下
    2015-08-08

最新評(píng)論

霍山县| 阿拉善右旗| 张家港市| 凤城市| 汕尾市| 马关县| 安国市| 巴林左旗| 兴和县| 长子县| 沙雅县| 昭苏县| 贺兰县| 隆昌县| 平武县| 惠州市| 宁津县| 杭锦旗| 文山县| 平凉市| 松滋市| 灯塔市| 石棉县| 内黄县| 大名县| 安陆市| 青海省| 靖西县| 娄烦县| 雅安市| 兴海县| 清流县| 台山市| 东乡族自治县| 新源县| 乾安县| 灵山县| 沽源县| 郎溪县| 遵义市| 米易县|