首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MeshGeometry3D中顶点的平滑(WPF)

MeshGeometry3D中顶点的平滑(WPF)
EN

Stack Overflow用户
提问于 2009-06-02 22:16:12
回答 2查看 1.9K关注 0票数 0

我正在使用Windows.Media.Media3D工具包将一个DirectX应用程序移植到WPF中。它工作得很好,除了模型是完整呈现的,即使它已经获得了所有可能的数据。

我怀疑这是因为DirectX优化并以某种方式平滑或帮助渲染额外的内容,这取决于顶点和索引。

所以我想知道是否有一个选项来改变WPF渲染3D模型的方式?要准确表达我的意思有点困难,但我希望它是可以理解的。

下面是重要的代码:

代码语言:javascript
运行
AI代码解释
复制
private void DrawModel()
{
    SwordModel swordModel;

    string filename = "PG_S8_02";

    using(FileStream stream = File.OpenRead(string.Format("Media/Models/{0}.gb", filename)))
    using(BinaryReader reader = new BinaryReader(stream))
    {
        swordModel = new SwordModel(reader);         
    }

    var group = new Model3DGroup();

    foreach(var modelMesh in swordModel.Meshes)
    {
        var mesh3D = new MeshGeometry3D();

        // Indices
        foreach(var index in modelMesh.Indices)
        {
            mesh3D.TriangleIndices.Add(index);
        }

        // Vertices
        foreach(var vertex in modelMesh.Vertices)
        {
            mesh3D.Positions.Add(vertex);
        }

        // Normals
        foreach(var normal in modelMesh.Normals)
        {
            mesh3D.Normals.Add(normal);
        }

        // Texture Coordinates
        foreach(var vertex in modelMesh.Vertices)
        {
            mesh3D.TextureCoordinates.Add(new Point(vertex.X, vertex.Y));
        }

        // Material
        var material = new DiffuseMaterial();
        var texture  = new BitmapImage(new Uri(
            string.Format("Media/Textures/{0}.png", filename), 
            UriKind.RelativeOrAbsolute
        ));   
        material.Brush = new ImageBrush(texture);                               

        // Add to View
        group.Children.Add(
            new GeometryModel3D(mesh3D, material)
        );
    }    

    mainViewport.Children.Add(
        new ModelVisual3D() { Content = group }
    );         
}

和XAML:

代码语言:javascript
运行
AI代码解释
复制
<Viewport3D Name="mainViewport" ClipToBounds="True">
    <Viewport3D.Camera>
        <PerspectiveCamera 
            FarPlaneDistance="100"
                        LookDirection="-11,-10,-9"
                        UpDirection="0,1,0"
                        NearPlaneDistance="1" 
                        Position="11,10,9" 
                        FieldOfView="70" />
    </Viewport3D.Camera>
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <DirectionalLight Color="White" Direction="-2,-3,-1" />
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-03 00:02:27

我能想到的唯一一件事是法线没有被平滑,但是如果没有看到网格的样子,我就不能确定了。

我的意思是,顶点法线与面法线平行,这给了网格一个分面的外观。如果法线是平滑的,那么整个形状看起来都是平滑的。如下所示:

平面着色:

http://www.forman.free-online.co.uk/images/flatshading.png

平滑着色:

http://www.forman.free-online.co.uk/images/smoothshading.png

图片被链接替换,限制我的带宽使用

票数 2
EN

Stack Overflow用户

发布于 2009-06-02 23:51:21

侧向有什么问题吗?默认情况下,我认为WPF呈现的是单面--你不能从“错误”的一面看到它们。

与照明类似,如果你的模型没有从所有方向照明,你可以得到奇怪的效果-尝试放入一个AmbientLight

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/943309

复制
相关文章
解放双手:如何在本地调试远程服务器上的Node代码
谈到node断点调试,目前主要有三种方式,通过node内置调试工具、通过IDE(如vscode)、通过node-inspector,三者本质上差不多。本文着重点在于介绍 如何在本地通过node-inspector 调试远程服务器上的node代码。
IMWeb前端团队
2019/12/04
1.8K0
解放双手:如何在本地调试远程服务器上的Node代码
解放双手:如何在本地调试远程服务器上的Node代码
本文主要介绍了如何使用Node.js内置的调试器,包括如何启动调试器、设置断点、查看变量、单步执行、进入函数、查看调用栈、设置监视点、查看调用堆栈、调试异步代码、使用console.log、使用source-map-support、使用debugger语法进行调试等。同时还介绍了如何通过IDE或者命令行进行调试,以及调试过程中常见的问题和解决方法。
IMWeb前端团队
2017/12/29
2.8K0
解放双手:如何在本地调试远程服务器上的Node代码
解放双手:如何在本地调试远程服务器上的Node代码
写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具、通过IDE(如vscode)、通过node-inspector,三者本质上差不多。本文着重点在于介绍 如何在本地通过node-inspector 调试远程服务器上的node代码。 在进入主题之前,首先会对三种调试方式进行入门讲解,方便新手理解后面的内容。至于老司机们,可以直接跳到主题去。 方式一:内置debug功能 进入调试模式(在第1行断点) node debug app.js 进入调试模式(在第n行断点) 比如要在第3行断点
用户1097444
2022/06/29
2.4K0
解放双手:如何在本地调试远程服务器上的Node代码
如何在腾讯云上启用 PostgreSQL 数据库远程访问?
EarlGrey
2017/06/02
7.4K0
如何在腾讯云上启用 PostgreSQL 数据库远程访问?
在 Windows 系统上启用远程应用
需要一个远程桌面 App 进行演示, 安装 Windows 远程桌面服务太折腾, 需要安装域控制器, 再部署一整套的远程服务, 太折腾了, 如果只是演示的话, 没必要那么折腾。
beginor
2020/08/07
3.4K0
如何在远程服务器上运行Jupyter Notebooks?
Jupyter Notebook是许多数据科学家工具箱中的一个主要工具。作为一个工具,Jupyter Notebook可以通过交互方式简化数据分析、模型建模和实验,从而缩短从编码到查看结果的反馈循环,从而提高工作效率。
AiTechYun
2019/07/12
4K0
如何在远程服务器上运行Jupyter Notebooks?
如何在Electra越狱的设备上使用LLDB调试应用程序
我试图在google搜索,有关使用Electra越狱的iOS设备上调试AppStore应用程序的简要说明。但令我失望的是,竟然没有找到任何有用的资料。因此我决定写一篇相关的指南,经过我的测试它非常的适用于我,但我无法确定它是否同样适用于你。我在以下设备进行了测试:
FB客服
2018/07/30
2.3K0
如何在Electra越狱的设备上使用LLDB调试应用程序
如何在 CentOS 上启用EPEL存储库
EPEL(Extra Packages for Enterprise Linux)存储库提供了标准 Red Hat 和 CentOS 存储库中未包含的其他软件包。EPEL 存储库的创建是因为 Fedora 贡献者希望使用他们在 Red Hat Enterprise Linux(RHEL)及其衍生产品(如CentOS,Oracle Linux和Scientific Linux)上维护的软件包。
用户8705033
2021/06/08
1.9K0
如何在RHEL/CentOS上启用Apache Userdir模块
User Directory或Userdir是一个Apache模块,它允许使用http://example.com/~user/语法通过Apache Web服务器检索特定于用户的目录。
星哥玩云
2022/07/27
4660
如何在RHEL/CentOS上启用Apache Userdir模块
如何在 Debian服务器 上启用双因子身份验证
双因子身份验证就是指,需要两种身份验证才能完成账号有效性的验证,可以是密码、SSH 密钥,也可以是第三方服务,比如 Google Authenticator。这意味着单个验证方式的缺陷,不会影响账号的安全。本文我们将介绍如何在 Debian 服务器上启用双因子验证。
Debian中国
2018/12/21
1.8K0
通过 Mac 远程调试 iPhone/iPad 上的网页
我们知道在 Mac/PC 上的浏览器都有 Web 检查器这类的工具(如最著名的 Firebug)对前端开发进行调试,而在 iPhone/iPad 由于限于屏幕的大小和触摸屏的使用习惯,直接对网页调试非常不方便,所以一直没有 Web 检查器这一类工具,但是 iOS 6 的发布解决了这个问题。
Denis
2023/04/14
1.8K0
通过 Mac 远程调试 iPhone/iPad 上的网页
如何在Nginx上启用SSL和TLS 1.3
现在是时候从的'HTTP迁移到HTTPS了。 由于最新的浏览器迭代,尤其适用于网站不安全的情况。 当您将SSL与TLS的一两个结合(请参阅如何在Ubuntu Server 18.04上构建具有TLS支持的Nginx)时,您的站点将获得更高的安全性和性能。
星哥玩云
2022/07/24
4.3K0
如何在Nginx上启用SSL和TLS 1.3
怎样在服务器上启用 HTTPS [每日前端夜话(0x1A)]
此部分使用 openssl 命令行程序(大部分 Linux、BSD 和 Mac OS X 系统均附带此程序)来生成私钥/公钥和 CSR。
疯狂的技术宅
2019/03/27
4.3K0
怎样在服务器上启用 HTTPS [每日前端夜话(0x1A)]
如何在移动设备上使用堡垒机
堡垒机目前已经成为通用的安全设备之一,很多公司运维人员登录服务器的时候都需要从堡垒机上进行认证授权,然后登录服务器进行操作。近年来随着平板设备的普及,很多时候技术人员有从移动设备上登录堡垒机的需求,本文就是以中远麒麟堡垒机为例,说明如何通过安卓或IOS设备访问堡垒机进行运维操作。
用户2169016
2022/02/04
2.2K0
如何在移动设备上使用堡垒机
如何在 Ubuntu 18.04 上安装 Xrdp 服务器(远程桌面)
Xrdp 是一个微软远程桌面协议(RDP)的开源实现,它允许你通过图形界面控制远程系统。通过 RDP,你可以登录远程机器,并且创建一个真实的桌面会话,就像你登录本地机器一样。
雪梦科技
2020/05/11
14.3K0
如何在 Ubuntu 18.04 上安装 Xrdp 服务器(远程桌面)
如何在 Linux 上复制文件/文件夹到远程服务器?
从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一。
星哥玩云
2022/07/26
15.7K0
如何在Ubuntu 20.04 上安装 Xrdp 服务器(远程桌面)
本文最先发布在: https://www.itcoder.tech/posts/how-to-install-xrdp-on-ubuntu-20-04/
雪梦科技
2020/05/25
10.2K6
如何在Ubuntu 20.04 上安装 Xrdp 服务器(远程桌面)
如何在CentOS / RHEL 7上启用IPv6
默认情况下,在RHEL / CenOS 7系统上启用IPv6。因此,如果故意在系统上禁用IPv6,则可以通过以下任一方法重新启用它。
sunsky
2020/08/20
6.3K0
如何在Ubuntu 18.04上启用没有Shell访问权限的SFTP
SFTP代表S SH F ile T ransfer P rotocol。顾名思义,这是一种使用加密SSH连接在计算机之间传输文件的安全方法。尽管名称如此,但它与FTP(F ile T ransfer P rotocol)完全不同,尽管现代FTP客户端广泛支持它。
一步
2018/09/28
3.9K0
如何在Cisco设备上停止Traceroute或Ping?
在深入讨论如何停止Traceroute或Ping之前,让我们先了解一下这两个工具的基本原理。
网络技术联盟站
2023/09/06
7450
如何在Cisco设备上停止Traceroute或Ping?

相似问题

如何在远程服务器上调试CUDA代码?

10

如何在流星上远程调试服务器代码?

13

如何在Android设备上启用Chrome调试?

12

Linux服务器上CUDA程序的远程调试与评测

35

在设备上远程调试android应用

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档