Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 7.2 3D图形基础

7.2 3D图形基础

概述

WPF提供了强大的3D图形支持,允许开发者在应用程序中创建和操作三维对象。本节将介绍WPF中3D图形的基本概念、核心组件以及简单实现方法。

核心组件

1. Viewport3D

  • 所有3D内容的容器控件
  • 相当于2D中的Canvas,但专为3D场景设计
  • 包含Camera(摄像机)和3D模型集合
<Viewport3D>
    <!-- 摄像机设置 -->
    <Viewport3D.Camera>
        <PerspectiveCamera Position="0,0,5" LookDirection="0,0,-1"/>
    </Viewport3D.Camera>
    
    <!-- 3D模型内容 -->
</Viewport3D>

2. 3D模型构建

WPF使用以下类构建3D对象:

类名用途
GeometryModel3D3D几何模型的基本单元
MeshGeometry3D定义模型的网格(顶点、三角形)
Material定义模型表面外观

3. 基本几何体创建

通过定义顶点和三角形索引创建简单立方体:

MeshGeometry3D cubeMesh = new MeshGeometry3D
{
    Positions = new Point3DCollection
    {
        // 前面
        new Point3D(-1, -1, 1), new Point3D(1, -1, 1),
        new Point3D(1, 1, 1), new Point3D(-1, 1, 1),
        // 后面
        new Point3D(-1, -1, -1), new Point3D(1, -1, -1),
        // 更多顶点...
    },
    TriangleIndices = new Int32Collection
    {
        0,1,2, 2,3,0, // 前面
        4,7,6, 6,5,4, // 后面
        // 更多三角形...
    }
};

光照与材质

1. 光源类型

WPF提供四种基本光源:

  1. AmbientLight(环境光)
    • 均匀照亮所有表面
  2. DirectionalLight(平行光)
    • 类似太阳光,方向固定
  3. PointLight(点光源)
    • 从某点向所有方向发射
  4. SpotLight(聚光灯)
    • 锥形光束效果

2. 材质应用

<GeometryModel3D.Material>
    <DiffuseMaterial Brush="Blue"/>
</GeometryModel3D.Material>

3D变换

与2D类似,3D支持多种变换:

<GeometryModel3D.Transform>
    <Transform3DGroup>
        <RotateTransform3D>
            <RotateTransform3D.Rotation>
                <AxisAngleRotation3D Axis="0,1,0" Angle="45"/>
            </RotateTransform3D.Rotation>
        </RotateTransform3D>
        <TranslateTransform3D OffsetX="2" OffsetY="0" OffsetZ="0"/>
    </Transform3DGroup>
</GeometryModel3D.Transform>

性能优化建议

  1. 尽量减少三角形数量
  2. 重用Material和Geometry资源
  3. 对静态模型使用Freezable.Freeze()
  4. 考虑使用LOD(Level of Detail)技术

示例:完整3D立方体

<Viewport3D>
    <Viewport3D.Camera>
        <PerspectiveCamera Position="0,0,8" LookDirection="0,0,-1" 
                          UpDirection="0,1,0" FieldOfView="60"/>
    </Viewport3D.Camera>
    
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <Model3DGroup>
                <!-- 光源 -->
                <AmbientLight Color="#404040"/>
                <DirectionalLight Color="#FFFFFF" Direction="-1,-1,-1"/>
                
                <!-- 立方体模型 -->
                <GeometryModel3D>
                    <!-- 网格定义 -->
                    <!-- 材质定义 -->
                </GeometryModel3D>
            </Model3DGroup>
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>

进阶学习方向

  1. 3D模型导入(通过Helix Toolkit等库)
  2. 复杂材质和纹理贴图
  3. 3D拾取(Hit Testing)
  4. 与2D元素的混合使用

注意:WPF的3D功能适合中低复杂度的3D需求。对于游戏或专业3D应用,建议考虑DirectX或Unity等专业引擎。

Last Updated:: 5/3/25, 10:42 PM