WPF 3D 使用3D Tools简单实现鼠标控制模型

news2024/11/16 13:34:21

CSDN上下载一个资源,

3D模型导入wpf_wpf加载obj模型光线和相机配置-C#代码类资源-CSDN下载

从VS中打开,运行如下;

出来一个模型;

 

可以用鼠标旋转,翻转模型,从不同角度方位查看模型;

 

 项目结构如下;

 看一下鼠标功能是如何实现的;

在整个解决方案中找不到任何和鼠标事件相关的代码;那么是如何实现鼠标功能的呢?

看一下项目引用了3DTools这个DLL;

然后整个3D场景,

    <Grid>
        <tools:TrackballDecorator>           
        <Viewport3D

    是包括在<tools:TrackballDecorator>标签中的;可能是此标签实现了鼠标控制功能;

下面来进一步看一下;

新建一个WPF项目,创建一个立方体;运行;

只能看到正面;没有任何的鼠标功能;

 

然后添加3DTools;

 

XAML中加入命名空间和前面的标签,然后再按下鼠标拖动,立方体确实可以翻转旋转了;

 

 

 

 

<Window x:Class="lftxz.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:tools="clr-namespace:_3DTools;assembly=3DTools"
        Title="MainWindow" Height="350" Width="525">
    <Grid >
        <tools:TrackballDecorator>
        <Viewport3D Margin="10">
            <Viewport3D.Camera>
                <PerspectiveCamera Position="0,0,8" x:Name="camera"></PerspectiveCamera>
            </Viewport3D.Camera>
            <Viewport3D.Children>
                <ModelVisual3D>
                    <ModelVisual3D.Content>
                        <Model3DGroup >
                            <GeometryModel3D x:Name="F1">
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="Green"/>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,0,0 2,0,0 2,2,0 0,2,0" 
TriangleIndices="0,2,1 0,3,2">
                                    </MeshGeometry3D>
                                </GeometryModel3D.Geometry>
                            </GeometryModel3D>
                            <GeometryModel3D  x:Name="F2">
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="Blue"/>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,0,0 0,0,2 0,2,2 0,2,0" 
TriangleIndices="0,1,2 0,2,3">
                                    </MeshGeometry3D>
                                </GeometryModel3D.Geometry>
                            </GeometryModel3D>
                            <GeometryModel3D  x:Name="F3">
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="Gray"/>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,0,0 0,0,2 2,0,2 2,0,0" 
TriangleIndices="0,2,1 0,3,2">
                                    </MeshGeometry3D>
                                </GeometryModel3D.Geometry>
                            </GeometryModel3D>
                            <GeometryModel3D  x:Name="F4">
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="Bisque"/>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="2,0,0 2,2,0 2,2,2 2,0,2" 
TriangleIndices="0,1,2 0,2,3">
                                    </MeshGeometry3D>
                                </GeometryModel3D.Geometry>
                            </GeometryModel3D>
                            <GeometryModel3D  x:Name="F5">
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="Yellow"/>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,2,2 2,2,2 2,2,0 0,2,0" 
TriangleIndices="0,1,2 0,2,3">
                                    </MeshGeometry3D>
                                </GeometryModel3D.Geometry>
                            </GeometryModel3D>
                            <GeometryModel3D  x:Name="F6">
                                <GeometryModel3D.Material>
                                    <DiffuseMaterial Brush="Red"/>
                                </GeometryModel3D.Material>
                                <GeometryModel3D.Geometry>
                                    <MeshGeometry3D Positions="0,2,2 2,2,2 0,0,2 2,0,2" 
TriangleIndices="0,2,3 0,3,1">
                                    </MeshGeometry3D>
                                </GeometryModel3D.Geometry>
                            </GeometryModel3D>
                        </Model3DGroup>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
                <ModelVisual3D x:Name="light">
                    <ModelVisual3D.Content>
                        <AmbientLight></AmbientLight>
                    </ModelVisual3D.Content>
                </ModelVisual3D>
            </Viewport3D.Children>
        </Viewport3D>
        </tools:TrackballDecorator>
    </Grid>
</Window>

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

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

相关文章

python-(6-4-4)爬虫---bs解析案例---爬取图片

文章目录一 需求二 操作思路1 拿到主页面的源代码&#xff0c;提取链接地址href2 通过href拿到子页面的内容&#xff0c;并找到图片下载地址 img ---> src3 下载图片三 分析步骤1 拿到主页面的源代码&#xff0c;提取链接地址href2 通过href拿到子页面的内容&#xff0c;并找…

sketch基础教程大全,对象、图层、画板常见技巧

sketch对象、图层、画板的使用技巧 1.通过快捷键调整图形的形状 选择图形&#xff0c;按住Command按键&#xff0c;然后通过上、下、左、右方向键按1像素调整图形形状。同时按住按钮。CommandShift方向键&#xff0c;可调整方向键。 ​2.复制元素 选择一个元素&#xff0c;按…

计算机毕业设计——基于Android的真人社交游戏辅助应用开发

编号 本科生毕业设计&#xff08;论文&#xff09; 题目&#xff1a; 真人社交游戏辅助应用开发 专业 学 号 学生姓名 指导教师 摘 要 时至今日&#xff0c;社交已成为人们生活中必不可少的一部分&#xff0c;社交网络的盛行已经成为一种必然趋势&#xff0e;与此同时&a…

语音识别之Kaldi学习GMM-HMM

语音识别之Kaldi kaldi语音识别理论与实践课程学习。 前面的博客介绍了语音识别的基础知识及原理。现在开始学习实战。以Kaldi框架为基础。 Kaldi是一个有全套的语音识别代码的工具&#xff0c;由Dan Povey博士和捷克的BUT大学联合开发&#xff0c;最早发布于2011年&#xf…

文献检索工具 | 计算机类英文文献检索数据库DBLP

文章目录1.什么是DBLP&#xff1f;2.DBLP文献检索的3种方式2.1.检索指定会议/期刊的论文2.2.检索指定作者的论文2.3.检索指定题目的论文3.Tips:DBLP中各个颜色模块含义1.什么是DBLP&#xff1f; 定义&#xff1a; DBLP&#xff08;DataBase systems and Logic Programming&…

JS 数组去重的多种方法

1. 前言 2. 普通方法数组去重 3. filter indexOf 4. ES6 的 new Set() 5. 需要注意的问题 1. 前言 本文提供两个数组变量供测试使用 const array [html, css, js, css]const resArr [html, css, css, [1], [1]]2. 普通方法数组去重 下面列举几种数组去重的方法思路都一…

JavaScript大作业 制作简单的程序员个人博客网站(web前端网页制作课作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

花钱去IT培训班学习几个月软件测试真的值得吗?

为什么网上一问去IT培训机构报班学软件测试&#xff0c;一大堆人就会跳出来说不建议、劝退、建议自学&#xff1f; 为什么IT培训机构那么多坑&#xff0c;还有那么多学生愿意花几万块钱去学软件测试&#xff1f; 有人说&#xff1a;网上那么多的视频资料&#xff0c;很多都是…

五、输入输出管理(二)I/O管理概述

目录 2.1 I/O 软件层次结构 2.1.1用户层 I/O 软件 2.1.2设备独立软件 2.1.3设备驱动程序 2.2应用程序与I/O接口 2.2.1字符设备接口 2.2.2块设备接口 2.2.3网络设备接口 2.2.4阻塞/非阻塞 I/O I/O系统概述、I/O接口、I/O控制的四种方式&#xff08;程序直接控制方式、程…

Trimble Tekla Structures支持14种不同的语言

Trimble Tekla Structures支持14种不同的语言 Tekla Structures被称为前Xsteel&#xff0c;是Trimble Software的产品&#xff0c;Trimble软件是一种强大的BIM机器。该软件为用户提供的环境&#xff0c;用户可以绘制接下来的三个模型并从中提取接下来的两个模型。该软件制作的模…

linux下pycharm运行错误解决办法

错误1&#xff1a; Inspection info&#xff1a;this inspection detects names that should resolve but dont.due to dynamic dispatch 重新设置虚拟环境即可&#xff0c;前面几篇文章有如何配置虚拟环境的教程 错误2&#xff1a; 有时候即使我们配好环境后在代码中也会出…

【玩转c++】c++内存管理 new/delete

本期主题&#xff1a;c/c内存管理。 博客主页&#xff1a;小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐身为程序员 &#xff0c;不会有人没有女朋友吧。 目录 &#x1f341;1. 了解c/c内存区域划分 &#x1f341;2.…

hbuilderx升级3.6.5版本后运行到手机端同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示

问题1&#xff1a; hbuilderx升级3.6.5版本后运行到手机端同步资源失败&#xff0c;未得到同步资源的授权&#xff0c;请停止运行后重新运行&#xff0c;并注意手机上的授权提示。 解决问题指路。 https://uniapp.dcloud.net.cn/tutorial/run/run-app-faq.html#node https://un…

在线考试系统毕业设计,线上考试系统设计与实现,毕业设计论文源码开题报告需求分析

项目背景和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个在线考试的java系统&#xff0c;整体使用了基于浏览器的B/S架构&#xff0c;技术上使用了基于java的springboot框架&#xff1b;使用浏览器&#xff0c;通过后台添加考试题目&#xff0c;学生通过浏览器登录…

一文解决网络系统调用接口到内核的请求

网络套接字入口函数 //所有的网络套接字系统调用函数&#xff08;socket bind listen connect &#xff09;都使用一个共同的入口函数&#xff1a;sys_socketcall /* 第一个参数call表示被调用的应用层接口函数&#xff0c;第二个参数是一个指针&#xff0c;指向具体被调用函数…

【综合案例】原生JS实现购物商城

目录一、案例说明1、目录结构2、conf文件夹3、用户名密码的正则和ajax的封装二、登录页的实现1、案例效果2、登录页逻辑3、接口文档4、代码实现5、返回信息显示三、首页的实现1、案例效果2、首页的逻辑3、接口文档4、代码实现5、返回信息显示四、个人中心1、案例效果2、个人页的…

springboot车辆管理系统的设计与实现毕业设计源码031034

车辆管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&…

Runtime源码解析-alloc

Runtime源码解析-alloc 前言alloc 通过汇编查看调用流程1. objc_alloc方法2. callAlloc方法 首次进入非首次进入LLVM优化 3. _objc_rootAllocWithZone方法4. _class_createInstanceFromZone方法 instanceSize&#xff1a;计算内存大小 fastInstanceSizealignedInstanceSize mal…

TS201的DMA通信基本原理以及IIR的加深理解(含源代码)

实验目的&#xff1a; 了解DMA通信基本原理&#xff0c;掌握内存与SDRAM间一维DMA通信方式、二维DMA通信方式以及相关控制方法。学习数字滤波器设计方法&#xff0c;掌握其调试步骤&#xff0c;使学生加深对IIR的理解&#xff0c;进一步提高对数字信号处理理论的认识。 实验任…

Java+SSM美妆商城全套电商购物(含源码+论文+答辩PPT等)

项目功能简介: 本项目含代码详细讲解视频&#xff0c;手把手带同学们敲代码从0到1完成项目 该项目采用技术Springmvc、Spring、MyBatis、Tomcat服务器、MySQL数据库 项目含有源码、配套开发软件、软件安装教程、项目发布教程以及代码讲解教程 项目功能介绍&#xff1a; 系统管理…