wpf 3d立方体上的按钮

news2024/12/30 2:44:09

新建一个WPF工程;

引入3D Tools;前面已经说了,引入之后,不用写代码即可实现3D物体的鼠标操作;

xaml代码如下;

<Window x:Class="thrbtn.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="3D立方体上加按钮" Height="450" Width="450"
        xmlns:tools="clr-namespace:_3DTools;assembly=3DTools"
    >


    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

        <Border BorderBrush="Yellow" BorderThickness="1" Margin="5">
            <tools:TrackballDecorator>

                <Viewport3D>
                    <Viewport3D.Camera>
                        <PerspectiveCamera          
          LookDirection="2,-1,-1"
          UpDirection="0,1,0"
          Position="-20,15,15"
          NearPlaneDistance="1"
          FarPlaneDistance="100"
          FieldOfView="40"
            >

                        </PerspectiveCamera>
                    </Viewport3D.Camera>

                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <DirectionalLight
             Color="Yellow"
             Direction="-2,-3,-1" />
                        </ModelVisual3D.Content>
                    </ModelVisual3D>

                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <DirectionalLight
             Color="Green"
             Direction="2,1,1" />
                        </ModelVisual3D.Content>
                    </ModelVisual3D>

                    <ModelVisual3D>
                        <ModelVisual3D.Content>
                            <GeometryModel3D>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,0,0 10,0,0 0,10,0 10,10,0
                                           0,0,10 10,0,10 0,10,10 10,10,10"
                      TriangleIndices="0,2,1 1,2,3 
                                                 0,1,4 1,5,4 1,7,5 1,3,7 
                                                 4,5,6 7,6,5 2,6,3 3,6,7"
                       Normals="0,1,0 0,1,0 1,0,0 1,0,0
                                 0,1,0 0,1,0 1,0,0 1,0,0" />

                                </GeometryModel3D.Geometry>
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="LightBlue" />
                                </GeometryModel3D.Material>
                            </GeometryModel3D>
                        </ModelVisual3D.Content>
                        <ModelVisual3D.Transform>
                            <RotateTransform3D>
                                <RotateTransform3D.Rotation>
                                    <AxisAngleRotation3D Angle="{Binding ElementName=sliderRotate, Path=Value}"
                                     Axis="0 1 0" />
                                </RotateTransform3D.Rotation>
                            </RotateTransform3D>
                        </ModelVisual3D.Transform>
                    </ModelVisual3D>


                    <Viewport2DVisual3D>
                        <Viewport2DVisual3D.Geometry>
                            <MeshGeometry3D
                Positions="0,0,0 0,0,10 0,10,0 0,10,10"
               TriangleIndices="0,1,2 2,1,3"
               TextureCoordinates="0,1 1,1 0,0 1,0"
                               />
                        </Viewport2DVisual3D.Geometry>

                        <Viewport2DVisual3D.Material>
                            <DiffuseMaterial Viewport2DVisual3D.IsVisualHostMaterial="True" />
                        </Viewport2DVisual3D.Material>

                        <Viewport2DVisual3D.Visual>
                            <Border BorderBrush="Yellow" BorderThickness="1">
                                <StackPanel Margin="10">
                                    <TextBlock Margin="3"> 2D content 呈现在3D表面</TextBlock>
                                    <Button Margin="3" Click="cmd_Click">Click Me</Button>
                                    <TextBox Margin="3">......;</TextBox>
                                </StackPanel>
                            </Border>
                        </Viewport2DVisual3D.Visual>

                    </Viewport2DVisual3D>

                </Viewport3D>

            </tools:TrackballDecorator>
        </Border>

        <Slider Margin="5" Grid.Row="1"  Minimum="0" Maximum="360" Orientation="Horizontal" Name="sliderRotate" ></Slider>
    </Grid>
</Window>

首先是一个grid,grid是一个四方形布局控件,对grid进行了行划分;第1行显示3D立方体;第2行显示一个滑动条控件;

grid的第一行;先用Border控件画一个边框;

然后使用3D Tools的<tools:TrackballDecorator>标签,这样此标签里的3D物体可以直接用鼠标操作;

然后是<Viewport3D>,这里面是呈现3D内容的;

在 <Viewport3D> 里;先定义摄像机,光源,然后画3d立方体;

然后添加一个 <Viewport2DVisual3D> 元素;

在<Viewport2DVisual3D>里,先设置纹理坐标;

然后用一个垂直面板控件,三行分别放一个文本块控件、一个按钮、一个文本框;

按钮单击事件在cs文件里只是弹一个消息框;

运行一下如下;

 

可用鼠标旋转翻转;

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

时序预测 | MATLAB实现BO-LSTM贝叶斯优化长短期记忆神经网络股票价格预测

时序预测 | MATLAB实现BO-LSTM贝叶斯优化长短期记忆神经网络股票价格预测 目录 时序预测 | MATLAB实现BO-LSTM贝叶斯优化长短期记忆神经网络股票价格预测效果一览基本介绍研究过程程序设计参考资料效果一览 基本介绍 时序预测 | MATLAB实现BO-LSTM贝叶斯优化长短期记忆神经网络…

3.原理图设计的快捷键和方法

3.原理图设计的快捷键和方法 一、使用建议 1.1 Altium designer使用建议 善用help&#xff0c;窗口右上角❓可用于显示提示&#xff1b;多看Knowledge Centor 添加元件、布局布线的注意要点 布局时&#xff1a;1、优先考虑重要接口、传感器的布局&#xff1b;2、电阻电容的…

论文笔记 CPU Accounting for Multicore Processors

Abstract 确定了对CPU utilization的不准确测量是如何影响OS的几个关键方面的这篇文章提出来了一个比CPU utilization更准确的性能评估指标 In this paper, we identify how an inaccurate measurement of the CPU utilization affects several key aspects of the system suc…

英语语法学习_incomplete

在语言学中&#xff0c;自然语言的语法是说话者或作者在从句、短语和单词的构成上的一套结构约束。1 「语法」实际上有两个概念&#xff0c;一是「语法」&#xff08;也叫「文法」&#xff09;&#xff0c;二是「语法学」。 一、语法&#xff1a;客观存在的语言结构规律&#x…

2014年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;考取过HCIE Cloud Computing、CCIE Security、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &#x1f495;兴趣爱好&#xff1a;b站天天刷&…

深入理解 Golang: Channel 管道

Channel 的使用 Channel 声明方法 chInt : make(chan int) // unbuffered channel 非缓冲通道chInt : make(chan int, 0) // unbuffered channel 非缓冲通道chInt : make(chan int, 2) // bufferd channel 缓冲通道 Channel 基本用法 ch <- x // channel 接收数据 xx &l…

Python 使用 NetworkX

Python 使用 NetworkX 说明&#xff1a;本篇文章主要讲述 python 使用 networkx 绘制有向图&#xff1b; 1. 介绍&安装 NetworkX 是一个用于创建、操作和研究复杂网络的 Python 库。它提供了丰富的功能&#xff0c;可以帮助你创建、分析和可视化各种类型的网络&#xff…

Linux-Bash的基本特性

Linux-Bash的特性应用&#xff1a; 按命令展开&#xff1a; {} 花括号是Bash支持的一种特殊符号&#xff0c;可以简单的理解为小学时学的乘法结合率。 例如&#xff1a; echo {1..10} 1 2 3 4 5 6 7 8 9 101…10 表示1到10&#xff0c;则整个命令可以理解为echo 1 echo 2 ec…

MFC多文档绘制不同图形

VC6新建一个多文档项目&#xff1b;根据窗口标题的最后数字&#xff0c;绘制不同图形&#xff1b; void CPrdView::OnDraw(CDC* pDC) {CPrdDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1 pDoc->GetTitle();CPoin…

[abc周赛复盘] AtCoder Beginner Contest 308 20230701

[abc周赛复盘] AtCoder Beginner Contest 308 20230701 总结A - New Scheme1. 题目描述2. 思路分析3. 代码实现 B - Default Price1. 题目描述2. 思路分析3. 代码实现 C - Standings1. 题目描述2. 思路分析3. 代码实现 D - Snuke Maze1. 题目描述2. 思路分析3. 代码实现 E - M…

Apache Doris (十四) :聚合模型的局限性、模型选择建议及列定义建议

目录 1. 聚合模型的局限性 2.数据模型的选择建议 2.1 Aggregate数据模型选择 ​​​​​​​​​​​​​​2.2 Unique数据模型选择 ​​​​​​​​​​​​​​2.3 Duplicate数据模型选择 ​​​​​​​3. 列定义建议 进入正文之前&#xff0c;欢迎订阅专题、对博文点…

天津大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 天津大学&#xff08;B&#xff09;考研难度&#xff08;☆☆☆☆&#xff09; 天津大学计算机考研主要招生学院在智能与计算学部、佐治亚理工深圳学院、新媒体与传播学院。招生学院较多&#xff0c;目前均已出拟录取…

时间序列分解 | Matlab奇异谱分析SSA做信号去噪、分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab奇异谱分析SSA做信号去噪、分解 部分源码 %----------------------

HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境

一、目的 在之前的博客《HPM6750系列--第二篇 搭建Ubuntu开发环境》、《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们介绍了基于命令行的编译调试过程&#xff0c;整个过程稍微有些繁琐可能有些小伙伴不太习惯&#xff0c;那么本篇就介绍一下在Visual Studio Code下的开…

【Linux系统编程】shell的感性理解

文章目录 1. shell是什么&#xff1f;它有什么作用&#xff1f;2. 通过一个故事感性理解shell的运行机制开端发展波澜渐起&#xff08;正常命令的处理&#xff09;故事角色与处理过程中各部分的映射走向高潮&#xff08;非法请求的处理&#xff09;shell 存在的意义结尾 1. she…

Leetcode-每日一题【142.环形链表Ⅱ】

题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部…

每天一点Python——day45

#第四十五天 #字典元素的特点&#xff1a; #例&#xff1a;字典中的所有元素都是一个key-value对【键值对】&#xff0c;key不允许重复&#xff0c;value可以重复 a{name:张三,name:李四} print(a) #只会输出李四&#xff0c;因为键不允许重复&#xff0c;否则会出现值覆盖的情…

QMenu代码生成器

共4种选项&#xff1a; 文本&#xff1a;输入父对象名&#xff0c;文本即可 文本图标&#xff1a;输入父对象名&#xff0c;文本&#xff0c;图标 文本图标菜单&#xff1a;输入父对象名&#xff0c;子对象名&#xff0c;文本&#xff0c;图标 文本菜单&#xff1a;输入父对象名…

14 | count(*)这么慢,我该怎么办?

一下内容出自《MySQL 实战 45 讲》 14 | count(*)这么慢&#xff0c;我该怎么办&#xff1f; count(*) 的实现方式 不同的 MySQL 引擎中&#xff0c;count(*) 有不同的实现方式。 MyISAM 引擎把一个表的总行数存在了磁盘上&#xff0c;执行 count(*) 的时候会直接返回这个数…

斯坦福大学吴佳俊:通过自然监督编码理解视觉世界

导读 在智源大会的生成模型论坛上&#xff0c;斯坦福大学助理教授吴佳俊带来了精彩的演讲 “通过自然监督编码理解视觉世界”&#xff08;Understanding the Visual World Through Naturally Supervised Code&#xff09;。此次演讲从二维图像拓展到三维世界&#xff0c;从人类…