Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
WPF 3D绘图-三维建模技术井眼轨迹图实现(一)
前面的文章里写过使用sharpGL三维建模生产3D井眼轨迹,这篇文章主要是说一下在WPF中如何进行3d图绘制。
程序你好
2020/12/15
5.3K0
WPF 3D绘图-三维建模技术井眼轨迹图实现(一)
两个方法,让 WPF 绘制的笔迹更加平滑
在 WPF 中绘制笔迹的时候,你可能会注意到绘制的笔迹非常的……呃……棱角分明。这在鼠标绘制的时候大家基本都能接受,但如果遇到一些触摸框报告触摸点也那么稀疏,那么写的字很不好看。另外,还有可能绘制的笔迹点来源于其他设备,通过网络传输而来,这时更容易遇到稀疏的点。
walterlv
2023/10/22
2920
两个方法,让 WPF 绘制的笔迹更加平滑
学习WPF——了解WPF中的XAML
XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<Button>映射为WPF的Button对象 XAML可以在一个元素中嵌套另一个元素,例如Grid元素可以嵌套Button元素 了解XAML VisualStudio创建一个窗口,默认情况下产生的代码如下: 这段代码中包含两个标记元素,一个是Window,一个是Grid Window是WPF顶级元素的一种,还有另外两种顶级元素Page和App
liulun
2018/01/12
2K0
WPF中的MatrixTransform
WPF中的MatrixTransform            周银辉 虽然在WPF中可以使用TranslateTransform、RotateTransform、ScaleTransform等进行
菩提树下的杨过
2018/01/22
1.4K0
WPF中的MatrixTransform
WPF 中的 NameScope
发布于 2018-10-14 12:23 更新于 2018-10-16 13:01
walterlv
2020/02/10
7790
图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理
在一张社区网络里,可能需要查询出各个顶点邻接关联的顶点集合,类似查询某个人关系比较近的都有哪些人的场景。
朱季谦
2023/09/01
7541
图解Spark Graphx实现顶点关联邻接顶点的collectNeighbors函数原理
WPF中的布局方式
3.WarpPanel:在一系列可换行的行中放置元素;在水平方向上,WarpPanel面板从左向右放置条目,然后在随后的行中放置元素;在垂直方向上,WarpPanel面板在自上而下的列中放置元素,并使用附加的列放置剩余的条目:
全栈程序员站长
2022/09/14
1.7K0
WPF中的布局方式
解读WPF中的Binding
基于MVVM实现一段绑定大伙都不陌生,Binding是wpf整个体系中最核心的对象之一这里就来解读一下我花了纯两周时间有哪些秘密。这里我先提出几个问题应该是大家感兴趣的,如下:
JusterZhu
2022/12/07
1.6K0
解读WPF中的Binding
解读WPF中的Xaml
这篇文章主要分享从源代码角度解读wpf中xaml。由于源码查看起来错综复杂“随便找一个对象按下F12就是一个新的世界”,看源码的感觉就是在盗梦空间里来回穿梭;所以也是耗费很长的时间去阅读源码然后根据自己的理解编写文章和贴出部分关键源码。
JusterZhu
2022/12/07
1.5K0
解读WPF中的Xaml
WPF中的命令(Command)
我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命令,从View中使用Binding绑定命令,就能实现从View到ViewModel之间操作的流通。
宿春磊Charles
2021/11/05
1.3K0
顶点属性、顶点数组和缓冲区对象
所有OpenGL ES 3.0实现必须支持最少16个顶点属性。 以下代码实现了如何查询OpenGL ES 3.0实现真正支持的顶点属性数量。
103style
2022/12/19
8700
顶点属性、顶点数组和缓冲区对象
4.顶点属性,顶点数组和缓存区对象
2.顶点数组 顶点数组是制定给个顶点的属性,是保存在应用程地址空间的缓存区。作为顶点缓冲对象的基础 一般用glVertexAttribPointer或者glVertexAttribIPointer
大壮
2020/07/21
1.1K0
OpenGLES顶点缓冲VBO
VBO Vertex Buffer object 为什么要用VBO 不使用VBO时,我们每次绘制( glDrawArrays )图形时都是从本地内存处获取顶点数据然后传输给OpenGL来绘制,这样就会频繁的操作CPU->GPU增大开销,从而降低效率。 使用VBO,我们就能把顶点数据缓存到GPU开辟的一段内存中,然后使用时不必再从本地获取,而是直接从显存中获取,这样就能提升绘制的效率。 创建VBO的主要步骤: //1. 创建VBO得到vboId int[] vbos = new int[1]; GLE
曾大稳
2018/09/11
1.4K0
如何在WPF绘图中(通过贝塞尔曲线)绘制平滑曲线
GDI图形系统已经形成了很多年。它提供了2D图形和文本功能,以及受限的图像处理功能,在传统的Windows Form 编程中,我们经常使用Graphics图形对象的DrawCurve方法绘制平滑的曲线。
程序你好
2020/11/19
3.2K0
如何在WPF绘图中(通过贝塞尔曲线)绘制平滑曲线
WPF中ListView排序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
5480
WPF中Image的Stretch属性
有时候我们在WPF程序中设置了图片的Width和Height,但图片显示出来的宽和高并不是我们预期的效果,这实际上是由于Image的默认Stretch属性导致的
zls365
2020/12/15
2.1K0
WPF中Dispatcher的初步探讨
今天要专门讲一下Dispatcher,原因是WPF中经常碰到多线程下软件界面控件的更新问题。相信很多初步接触WPF的界面开发的朋友,为了保持界面不卡,在一个自己创建的线程中去更新或者读取一个控件时都会遇到了一个很奇怪的Exception异常,显示如下:
zls365
2021/02/26
7320
WPF中的StackPanel、WrapPanel、DockPanel
默认,由上到下显示各控件。控件在未定义的前提下,宽度为StackPanel的宽度,高度自动适应控件中内容的高度
全栈程序员站长
2022/09/15
2.1K0
修改WPF中connectionString[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说修改WPF中connectionString[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/07/19
4580
点击加载更多

相似问题

平滑顶点之间的颜色

12

Wpf中的平滑模型

11

WPF平滑变焦

22

如何使用顶点的测地距离平滑骨骼-顶点权重?

11

WPF WebBrowser控件中的字体平滑

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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