返回顶部
首页 > 资讯 > 精选 >C# WPF如何实现3D操作几何体效果
  • 519
分享到

C# WPF如何实现3D操作几何体效果

2023-07-05 07:07:19 519人浏览 安东尼
摘要

本篇内容介绍了“C# WPF如何实现3D操作几何体效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!操作几何体据说我的世界是三个程

本篇内容介绍了“C# WPF如何实现3D操作几何体效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

操作几何体

据说我的世界是三个程序员用一周开发出来的,那一个程序员用半天开发出一个乞丐版的我的世界,讲道理是完全没有问题的。

而众所周知,我的世界就是无数个像素块的集合,而像素块也就是立方体。关于新建立方体,这个大家已经非常熟练了,不仅能新建一个立方体,甚至能新建要多少有多少的立方体。

新建正方体

但目前并不能用手新建,所以接下来添加一个快捷方式Ctrl+N来快速创建立方体。当按下Ctrl+N时效果为

C# WPF如何实现3D操作几何体效果

这对于已经能生成一排立方体的人来说绝对是小意思了,首先在构造函数中绑定快捷方式

public MainWindow(){    InitializeComponent();    KeyDown += MainWindow_KeyDown;}

MainWindow_KeyDown定义为

private void MainWindow_KeyDown(object sender, KeyEventArgs e){    if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) && Keyboard.IsKeyDown(Key.N))    {        MeshGeometry3D mesh = MakeCubeMesh(0, 0, 0, 1);        Color color = Color.FromArgb(255, 0, 255, 0);        DiffuseMaterial material = new DiffuseMaterial(new SolidColorBrush(color));        GeometryModel3D model = new GeometryModel3D(mesh, material);        group3d.Children.Add(model);    }}

其中MakeCubeMesh为自定义的函数,早在本系列第一篇博客就已经写过了,其他诸如光效等亦然。唯一的区别是这次并不一开始就生成多个立方体,所以无需DefineModel函数。

设置立方体位置

刚刚虽然新建了一个立方体,但并不能确定立方体的位置,接下来就要新建一个对话框,用以设置新建立方体的位置。

右键项目,新建窗口,名为ParaDialog,其xaml为

<Window x:Class="MyWord.ParaDialog"        xmlns="Http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        Title="输入参数" Height="180" Width="300">    <DockPanel LastChildFill="True">        <StackPanel DockPanel.Dock="Bottom"            Orientation="Horizontal" HorizontalAlignment="Right">            <Button Content="设置" Click="okButton_Click" Margin="5" Width="60" Height="25"/>            <Button Content="取消" IsCancel="True" Margin="5" Width="60" Height="25"/>        </StackPanel>        <UnifORMGrid Columns="1" Margin="5" x:Name="ufgLabel"/>        <UniformGrid Columns="1" Margin="5" x:Name="ufgTextBox"/>    </DockPanel></Window>

其cs的核心代码为

public partial class ParaDialog : Window{    static readonly string[] labels = new string[4] { "x坐标", "y坐标", "z坐标", "边长" };    List<TextBox> paraBoxes = new List<TextBox>();    public double[] para;    public ParaDialog(double[] para)    {        this.para = para;        InitializeComponent();        string tmp;        for (int i = 0; i < 4; i++)        {            //向UniformGrid中欧给填充文字块            ufgLabel.Children.Add(new TextBlock() { Text = labels[i] });            paraBoxes.Add(new TextBox());            ufgTextBox.Children.Add(paraBoxes[i]);        }    }    private void okButton_Click(object sender, RoutedEventArgs e)    {        for (int i = 0; i < 4; i++)            para[i] = double.Parse(paraBoxes[i].Text);        DialogResult = true;    }}

最后,更改Ctrl+N的响应代码

//...前面不用改if ((Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) && Keyboard.IsKeyDown(Key.N)){  double[] para = new double[4];  ParaDialog pDialog = new ParaDialog(para);  pDialog.ShowDialog();  if (pDialog.DialogResult != true)      return;  MeshGeometry3D mesh = MakeCubeMesh(para[0],para[1],para[2],para[3]);  //...后面不用改}

C# WPF如何实现3D操作几何体效果

选中立方体

若想操作几何体,前提是选中它,接下来就绑定一个鼠标动作,来完成选中的操作,先更改xaml代码,将Viewport3D放到一个border中

<Border Name="mainBorder" Background="White" MouseDown="mainBorder_MouseDown">    <Viewport3D x:Name="v3dMain">    </Viewport3D></Border>

然后新建mainBorder_MouseDown函数

private void mainBorder_MouseDown(object sender, MouseButtonEventArgs e){    if (e.LeftButton == MouseButtonState.Released) return;    Color color = Color.FromArgb(255, 0, 255, 0);    var material = new DiffuseMaterial(new SolidColorBrush(color));    //获取鼠标在对象中的位置    Point mousePos = e.GetPosition(v3dMain);    // 执行点击操作    HitTestResult result = VisualTreeHelper.HitTest(v3dMain, mousePos);    //此即鼠标点击到曲面上的结果    var meshResult = result as RayMeshGeometry3DHitTestResult;    GeometryModel3D model = null;    if ((meshResult != null) && (meshResult.ModelHit is GeometryModel3D))        model = meshResult.ModelHit as GeometryModel3D;    //如果刚才选了别的模型,则使之恢复绿色    if (SelectedModel != null)        SelectedModel.Material = material;    //选择新的模型    SelectedModel = model;    if (model != null)         model.Material = new DiffuseMaterial(Brushes.Fuchsia);}

其效果为

C# WPF如何实现3D操作几何体效果

挪动几何体

既然已经可以选中了,那么挪动什么的绝对就是小意思了。

回顾此前的鼠标操作摄像机,其基本流程是,鼠标点击之后,绑定另一个函数,当松开鼠标时解绑。

在WPF 3D中,提供了Tranform成员,可用于移动几何体,所以在新建几何体时,务必注意添加一行

//MainWindow_KeyDown函数model.Transform = new TranslateTransform3D(0, 0, 0);

然后添加全局变量用以保存旧的位置

private Point3D oldPoint;

然后修改mainBorder_MouseDown,其实只需在末尾添加

mainBorder.CaptureMouse();mainBorder.MouseMove += MainBorder_MouseMove;mainBorder.MouseUp += MainBorder_MouseUp;

接下来是鼠标挪动和弹起时的动作,其中弹起时非常简单,无非是解绑鼠标动作;而鼠标挪动时,则需更改几何体的变化参数。

private void MainBorder_MouseUp(object sender, MouseButtonEventArgs e){    mainBorder.ReleaseMouseCapture();    mainBorder.MouseMove -= MainBorder_MouseMove;    mainBorder.MouseUp -= MainBorder_MouseUp;}private void MainBorder_MouseMove(object sender, MouseEventArgs e){    Point newPoint = e.GetPosition(mainBorder);    var res = VisualTreeHelper.HitTest(v3dMain, newPoint);    if (res == null) return;    var newResult = res as RayMeshGeometry3DHitTestResult;    var deltaPt = newResult.PointHit - oldPoint;    var trans = SelectedModel.Transform as TranslateTransform3D;    trans.OffsetX += deltaPt.X;    trans.OffsetY += deltaPt.Y;    trans.OffsetZ += deltaPt.Z;    oldPoint = newResult.PointHit;}

效果为

C# WPF如何实现3D操作几何体效果

“C# WPF如何实现3D操作几何体效果”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C# WPF如何实现3D操作几何体效果

本文链接: https://lsjlt.com/news/350511.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C# WPF实现3D操作几何体效果
    目录操作几何体新建正方体设置立方体位置选中立方体挪动几何体操作几何体 据说我的世界是三个程序员用一周开发出来的,那一个程序员用半天开发出一个乞丐版的我的世界,讲道理是完全没有问题的。...
    99+
    2023-03-02
    C# WPF 3D操作几何体 C# WPF操作几何体 C# WPF 3D
  • C# WPF如何实现3D操作几何体效果
    本篇内容介绍了“C# WPF如何实现3D操作几何体效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!操作几何体据说我的世界是三个程...
    99+
    2023-07-05
  • C#WPF实现动态3D光照效果
    目录交互式调节光效给地球点颜色看看交互式调节光效 接下来想动态实现光照效果,即如下图所示 看到这个滚动条,大家可能马上想到,将Slider和Light的内容绑定在一起似乎更容易实现...
    99+
    2023-03-01
    C# WPF动态3D光照效果 C# WPF动态3D光照 C# WPF 光照 C# WPF 3D
  • 基于WPF如何实现3D画廊动画效果
    本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接下来想做一个图廊,所以并没有必要用立方体,...
    99+
    2023-07-05
  • 怎么使用C# WPF实现动态3D光照效果
    这篇文章主要介绍“怎么使用C# WPF实现动态3D光照效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用C# WPF实现动态3D光照效果”文章能帮助大家解决问题。交互式调...
    99+
    2023-07-05
  • 如何利用CSS3的3D效果制作正方体
    这篇文章将为大家详细讲解有关如何利用CSS3的3D效果制作正方体,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。学会用CSS3的3D效果制作一个正方体,有助于增强我们对3D场景的旋转和位移属性的理解。下面的...
    99+
    2023-06-08
  • C++实现WPF动画的具体操作方法
    本篇文章为大家展示了C++实现WPF动画的具体操作方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++编程语言的应方式非常广泛,可以帮助我们轻松的实现许多功能需求。很多人都习惯使用Blend来帮...
    99+
    2023-06-17
  • js如何实现3d悬浮效果
    这篇文章主要介绍了js如何实现3d悬浮效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果如下:代码如下:<!DOCTYPE&nbs...
    99+
    2024-04-02
  • CSS3如何实现3D翻书效果
    小编给大家分享一下CSS3如何实现3D翻书效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!先上效果图:(样式有点丑,可以忽略一下下,效果出来了就好,后期加到其他项目中方便更改0.0)类似...
    99+
    2024-04-02
  • css3如何实现3d翻转效果
    今天小编给大家分享的是css3如何实现3d翻转效果,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。什么是csscss是一种用来表现HTML或XML等文件样式的计算机语言,主要是用来设计...
    99+
    2023-06-14
  • WPF如何实现绘制3D图形
    今天小编给大家分享一下WPF如何实现绘制3D图形的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。关键概念视口视口指的是图像要展...
    99+
    2023-07-05
  • vue+highcharts如何实现3D饼图效果
    这篇文章给大家分享的是有关vue+highcharts如何实现3D饼图效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这是最终效果<template><div class="...
    99+
    2023-06-29
  • vue如何实现3D环形图效果
    这篇文章主要介绍“vue如何实现3D环形图效果”,在日常操作中,相信很多人在vue如何实现3D环形图效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何实现3D环形图效果”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • Android Flutter如何实现3D动画效果
    这篇文章主要讲解了“Android Flutter如何实现3D动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android Flutter如何实现3D动画效果”吧...
    99+
    2023-06-29
  • js如何实现3D图片展示效果
    这篇文章给大家分享的是有关js如何实现3D图片展示效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。点击左上角的按钮前后切换效果图:代码如下:<!doctype ...
    99+
    2024-04-02
  • 如何使用css实现过渡+3D效果
    这篇文章主要为大家展示了“如何使用css实现过渡+3D效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用css实现过渡+3D效果”这篇文章吧。css过渡...
    99+
    2024-04-02
  • 如何使用css实现3D穿梭效果
    这篇文章主要介绍“如何使用css实现3D穿梭效果”,在日常操作中,相信很多人在如何使用css实现3D穿梭效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用css实现3...
    99+
    2024-04-02
  • CSS3如何实现3D开门动画效果
    这篇文章将为大家详细讲解有关CSS3如何实现3D开门动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 这篇文章将为大家详细讲解有关CSS3如何实现3D开门动画效果,...
    99+
    2024-04-02
  • CSS如何实现卡片3D翻转效果
    这篇文章将为大家详细讲解有关CSS如何实现卡片3D翻转效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果:代码:html:<div class="main">...
    99+
    2023-06-08
  • Android OpenGL如何实现APP裸眼3D效果
    Android OpenGL如何实现APP裸眼3D效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理简介 & OpenGL 的优势裸眼 3D 效果的本质是...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作