当前位置: 首页 > news >正文

(34)VTK C++开发示例 ---将图片映射到平面

文章目录

    • 1. 概述
    • 2. CMake链接VTK
    • 3. main.cpp文件
    • 4. 演示效果


更多精彩内容
👉内容导航 👈
👉VTK开发 👈

1. 概述

演示如何将图片作为纹理贴图到一个平面上。

这段代码的功能是使用 VTK(Visualization Toolkit)库加载一张 JPEG 图片,并将其作为纹理映射到一个平面上,然后通过渲染窗口显示出来。以下是代码的主要功能总结:

  1. 读取图片
    • 使用 vtkJPEGReader加载指定路径的 JPEG 图片文件。
  2. 创建平面
    • 使用 vtkPlaneSource创建一个平面,并设置其中心点和法线方向。
  3. 纹理映射
    • 使用vtkTexture 将读取的图片作为纹理。
    • 使用 vtkTextureMapToPlane将纹理映射到平面上。
  4. 设置渲染管线
    • 创建vtkPolyDataMapper 将纹理映射后的平面数据传递给渲染器。
    • 创建 vtkActor,将映射器和纹理绑定到演员对象上。
    • 创建 vtkRenderer,将演员添加到渲染器中,并设置背景颜色。
    • 创建 vtkRenderWindow,将渲染器添加到窗口中,并设置窗口大小。
    • 创建 vtkRenderWindowInteractor,为渲染窗口添加交互功能。
  5. 渲染与交互
    • 调用 Render() 方法渲染场景。
    • 调用 Start() 方法启动交互器,允许用户与渲染窗口进行交互。
环境说明
系统ubuntu22.04、windows11
cmake3.22、3.25
Qt5.14.2
编译器g++11.4、msvc2017
VTK9.4.1

2. CMake链接VTK

cmake_minimum_required(VERSION 3.20 FATAL_ERROR) # 设置CMake最低版本
project(vtk2) # 设置项目名称
# 查找VTK库
find_package(VTK COMPONENTS 
CommonColor
CommonCore
CommonDataModel
FiltersSources
FiltersTexture
IOImage
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if(NOT VTK_FOUND)
message("VTK not found")
return()
endif()add_executable(vtk2 main.cpp) # 添加可执行文件target_link_libraries(vtk2 PRIVATE ${VTK_LIBRARIES}) # 链接VTK库
vtk_module_autoinit(TARGETS vtk2 MODULES ${VTK_LIBRARIES}) # 初始化VTK模块

3. main.cpp文件

/********************************************************************************
* 文件名:   main.cpp
* 创建时间: 2025-03-22 20:31:57
* 开发者:   MHF
* 邮箱:     1603291350@qq.com
* 功能:     
*********************************************************************************/
#include<iostream>
#include <vtkImageData.h>
#include <vtkJPEGReader.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPlaneSource.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkTexture.h>
#include <vtkTextureMapToPlane.h>
using namespace std;int main()
{vtkNew<vtkNamedColors> colors;string filename = "e:/lib/VTK/vtk-data/Data/wintersun.jpg";vtkNew<vtkJPEGReader> jpegReader; //读取jpg文件jpegReader->SetFileName(filename.c_str());vtkNew<vtkPlaneSource> planeSource; //创建一个平面planeSource->SetCenter(0.0, 0.0, 0.0); //设置中心点planeSource->SetNormal(0.0, 0.0, 1.0); //设置法线vtkNew<vtkTexture> texture; //创建纹理texture->SetInputConnection(jpegReader->GetOutputPort()); //设置纹理的输入vtkNew<vtkTextureMapToPlane> textureMapToPlane; //纹理映射到平面textureMapToPlane->SetInputConnection(planeSource->GetOutputPort()); //设置输入/******************** 开始绘制********************/vtkNew<vtkPolyDataMapper> mapper; //创建映射器mapper->SetInputConnection(textureMapToPlane->GetOutputPort()); //设置输入vtkNew<vtkActor> actor; //创建演员actor->SetMapper(mapper); //设置映射器actor->SetTexture(texture); //设置纹理actor->GetProperty()->SetColor(colors->GetColor3d("White").GetData()); //设置颜色vtkNew<vtkRenderer> renderer; //创建渲染器renderer->AddActor(actor); //添加演员renderer->SetBackground(colors->GetColor3d("SlateGray").GetData()); //设置背景颜色renderer->ResetCamera(); //重置相机vtkNew<vtkRenderWindow> renderWindow; //创建渲染窗口renderWindow->AddRenderer(renderer); //添加渲染器renderWindow->SetSize(600, 600); //设置窗口大小vtkNew<vtkRenderWindowInteractor> renderWindowInteractor; //创建交互器renderWindowInteractor->SetRenderWindow(renderWindow); //设置渲染窗口renderWindow->Render(); //渲染renderWindowInteractor->Start(); //开始交互return 0;
}

4. 演示效果

在这里插入图片描述



相关文章:

(34)VTK C++开发示例 ---将图片映射到平面

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 演示如何将图片作为纹理贴图到一个平面上。 这段代码的功能是使用 VTK&#xff08;Visualization Toolkit&#xff0…...

微软与Meta大幅增加人工智能基础设施投入

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

华为云服务器VoceChat在线聊天室部署

目录 1. 项目介绍2. 准备条件3. Docker环境部署3.1 安装Docker&#xff08;CentOS 7&#xff09;3.2 安装Docker Compose3.3 Docker常用命令 4. 创建配置文件4.1 创建工作目录4.2 创建docker-compose.yml文件4.3 保存配置文件 5. 部署运行5.1 启动服务5.2 检查服务状态5.3 防火…...

ERP系统(技术面)知识积累

本文为本人在准备某公司信息技术类岗位的面试时所作的笔记&#xff0c;该公司有技术面&#xff0c;此岗位入职后负责的是ERP系统的运行和维护&#xff0c;所以可能会问ERP系统相关的问题。故我写此文以做准备。 ERP简介 ERP&#xff0c;全称Enterprise Resource Planning&…...

Python学习笔记(第三部分)

接续 Python.md 文件的第三部分 类 类的创建的基本使用 创建一个类 class Dog(): 文档字符串&#xff1a;这是一次模拟小狗的简单尝试 def __init__(self,name,age):self.name nameself.age agedef sit(self):print(self.name.title() " is now sitting.")def ro…...

【浅尝Java】Java简介第一个Java程序(含JDK、JRE与JVM关系、javcdoc的使用)

&#x1f35e;自我激励&#xff1a;每天努力一点点&#xff0c;技术变化看得见 文章目录 Java语言概述Java是什么Java语言的重要性Java语言发展简史Java语言特性 第一个Java程序main方法示例运行Java程序JDK、JRE、JVM之间的关系注释基本规则注释规范 标识符关键字 Java语言概述…...

【FreeRTOS-列表和列表项】

参照正点原子以及以下gitee笔记整理本博客&#xff0c;并将实验结果附在文末。 https://gitee.com/xrbin/FreeRTOS_learning/tree/master 一、列表和列表项的简介(熟悉) 1、什么是列表 答&#xff1a;列表是FreeRTOS中的一个数据结构&#xff0c;概念上和链表有点类似&#…...

22.2Linux的I2C驱动实验(编程)_csdn

我尽量讲的更详细&#xff0c;为了关注我的粉丝&#xff01;&#xff01;&#xff01; 这里我们用到的是stm32mp157的板子&#xff0c;所以我们看一下I2C用到的引脚。 1、硬件原理图分析 可以看到在这块板子上面用的SDA和SCL总线是PA11,PA12。所以要修改设备树和镜像文件&…...

socket-IO复用技术

五个I/O模型 1、阻塞I/O 2、非阻塞I/O 3、I/O复用&#xff08;select和poll&#xff09; 4、信号驱动I/O 5、异步I/O I/O复用 是一种在单线程或单进程环境下&#xff0c;同时监听多个 I/O 事件的技术。它允许程序高效地处理多个输入输出流&#xff08;如网络套接字、文件描…...

上位机知识篇---二进制操作

文章目录 前言接收数据示例:0xAA 0x12 0x34 0x55合并高/低字节数据RGB565颜色值:0xF800(红色)Python中负数右移接收帧:01 03 02 12 34 CRC前言 本文简单对单片机、上位机中的映射(Mapping)和位移操作符(Bit Shifting)等相关知识进行了简单介绍. 一、单片机与上位机中…...

openEuler 22.03 安装 Mysql 5.7,TAR离线安装

目录 一、检查系统是否安装其他版本Mariadb数据库二、环境检查2.1 必要环境检查2.2 在线安装&#xff08;有网络&#xff09;2.3 离线安装&#xff08;无网络&#xff09; 二、下载Mysql2.1 在线下载2.2 离线下载 三、安装Mysql四、配置Mysql五、开放防火墙端口六、数据备份七、…...

《排序算法总结》

引言&#xff1a; 编程学到现在&#xff0c;我们已经接触了很多种排序算法&#xff0c;这篇文章我就对常见的几种排序算法进行一个小结。 一&#xff1a; 排序算法分类&#xff1a; 二&#xff1a; 插入排序&#xff1a; 直接插入排序&#xff1a; 1. 概念&#xff1a; 直…...

【Java学习笔记】递归

递归&#xff08;recursion&#xff09; 思想&#xff1a;把一个复杂的问题拆分成一个简单问题和子问题&#xff0c;子问题又是更小规模的复杂问题&#xff0c;循环往复 本质&#xff1a;栈的使用 递归的注意事项 &#xff08;1&#xff09;需要有递归出口&#xff0c;否者就…...

体系学习1:C语言与指针1——预定义、进制打印、传参为数组

1、不对一段代码进行编译 #if 0 statement #endif2、输出地址 int d[3]{1,2,3}; printf("%p",(void*)d);//p期待的是void*类型的数据3、不同进制的打印 int data 1200; char hed[9];//为\0预留位置&#xff01;&#xff01;&#xff01; sprintf(hed,"%08X&…...

使用Java正则表达式进行分组与匹配文本提取

在Java开发中&#xff0c;正则表达式&#xff08;Regex&#xff09;是处理字符串的强大工具&#xff0c;广泛应用于数据验证、文本解析和格式转换等场景。通过正则表达式的分组功能&#xff0c;开发者可以精确地提取匹配模式的子部分&#xff0c;而不仅仅是整个匹配内容。Java的…...

RAGFlow上传3M是excel表格到知识库,提示上传的文件总大小过大

环境&#xff1a; Ragflowv0.17.2 问题描述&#xff1a; RAGFlow上传3M是excel表格到知识库&#xff0c;提示上传的文件总大小过大 解决方案&#xff1a; 定位问题&#xff1a; 1.查询Nginx 日志 Nginx 日志 检查 Nginx 配置中日志路径是否正确&#xff0c;确保日志文件有…...

2025年4月文章一览

2025年4月编程人总共更新了30篇文章&#xff1a; 1.2025年3月文章一览 2.《Operating System Concepts》阅读笔记&#xff1a;p528-p544 3.《Operating System Concepts》阅读笔记&#xff1a;p545-p551 4.《Operating System Concepts》阅读笔记&#xff1a;p552-p579 5.…...

2025大模型微调视频课程全套(附下载)

2025大模型微调视频课程全套&#xff0c;共10课。主要内容如下&#xff1a; 1、大模型的发展 2、Transformer & LLMs 3、大模型微调预览&Lora微调&Alpaca模型微调 4、Alpaca&AdaLoRA&QLoRA模型微调 5、Efficient Fine-tuning&Efficient Inference&…...

【Python Web开发】04-Cookie和Session

文章目录 1. Cookie1.1 定义1.2 工作原理1.3 用途1.4 优缺点 2. Session2.1 定义2.2 工作原理2.3 用途2.4 优缺点 3. Cookie 与 Session 的关系4. 安全性考量5. Python 中使用 Cookie 和 Session 在 HTTP 协议里&#xff0c;Cookie 和 Session 是用于管理客户端与服务器之间会话…...

从股指到期指,哪些因素影响基差?

当我们谈论股指期货&#xff08;简称“期指”&#xff09;与股票现货指数&#xff08;简称“股指”&#xff09;的基差时&#xff0c;其实是在探讨期货价格与现货价格之间的“差价”。这个差价受多种因素影响&#xff0c;时而扩大&#xff0c;时而缩小&#xff0c;甚至可能“翻…...

n8n 中文系列教程_15. 【工具篇】n8n中文版与汉化指南:从原理到实践

n8n 作为一款强大的开源自动化工具&#xff0c;目前尚未推出官方中文版&#xff0c;但社区提供了汉化方案。不过&#xff0c;对于技术用户&#xff0c;我们更推荐使用英文原版&#xff0c;以便更好地查阅文档和解决问题。如果你仍希望尝试汉化&#xff0c;本文将详细介绍如何通…...

3D版同步帧游戏

以下是实现一个3D版同步帧游戏的详细步骤与完整代码示例。我们将以第一人称射击游戏(FPS)为原型,重点讲解3D空间中的同步机制优化。 项目升级:3D版核心改动 1. 3D坐标系与消息结构 // common/messages.go type Vector3 struct {X float32 `json:"x"`Y float32 `…...

C语言中数字转化为字符串的方法

C语言中数字转化为字符串的方法 1. 使用 sprintf 函数 这是 stdio.h 头文件中的标准库函数 &#xff0c;功能类似于 printf &#xff0c;但不是输出到控制台&#xff0c;而是将格式化后的内容输出到字符数组&#xff08;字符串&#xff09;中。 示例代码&#xff1a; c #inc…...

使用MGeo模型高精度实现文本中地址识别

一、功能与安装 1、模型地址 模型是阿里开发的门址高精度识别模型。 https://modelscope.cn/models/iic/mgeo_geographic_elements_tagging_chinese_base/summary 注意&#xff1a;不能自己安装包&#xff0c;没法解决依赖问题&#xff0c;直接按照官方要求安装下面的包&am…...

OpenGL-ES 学习(15) ----纹理

目录 纹理简介纹理映射纹理映射流程示例代码&#xff1a;纹理的环绕和过滤方式纹理的过滤方式 纹理简介 现实生活中&#xff0c;纹理(Texture) 类似于游戏中皮肤的概念&#xff0c;最通常的作用是装饰 3D 物体&#xff0c;它像贴纸一样贴在物体的表面&#xff0c;丰富物体的表…...

类成员函数编译链接的过程

1.静态成员函数和普通成员函数 源文件编译成目标文件&#xff0c;静态成员函数和普通成员函数在目标文件代码段&#xff0c;函数添加进了符号表&#xff0c;地址是在代码段的相对地址&#xff0c;这个地址只是一个临时地址因为后面链接时还要合并代码段&#xff0c;函数地址还…...

PostgreSQL:pgAdmin 4 使用教程

pgAdmin 4 是一个用于管理和维护 PostgreSQL 数据库的强大工具。它提供了一个图形化界面&#xff0c;使用户能够轻松地连接到数据库、创建表、运行 SQL 语句以及执行其他数据库管理任务。 安装和使用 安装 pgAdmin 4 安装 pgAdmin 4 非常简单。下载并运行安装程序&#xff0…...

*(解引用运算符)与 ++(自增运算符)的优先级

在 C 和 C 等编程语言里&#xff0c;*&#xff08;解引用运算符&#xff09;与 &#xff08;自增运算符&#xff09;的执行优先级高低&#xff0c;要依据 是前缀形式还是后缀形式来确定。下面为你详细分析&#xff1a; 1. 后缀 运算符 后缀 运算符的优先级比 *&#xff08…...

二叉搜索树中的搜索(递归解决)

700. 二叉搜索树中的搜索 - 力扣&#xff08;LeetCode&#xff09; 二叉搜索树&#xff08;BST&#xff09;&#xff1a;以任意节点为根节点的数值大于其左子树所有节点的值&#xff0c;小于右子树所有节点的值。 查找二叉搜索树中的值&#xff0c;要利用节点之间的大小关系。…...

idea安装

1.卸载 2.安装 3.ssh...

在ASP.NET MVC中使用Repeater指南

虽然ASP.NET MVC框架本身不包含Web Forms中的Repeater控件&#xff0c;但您可以通过几种方式实现类似的功能。以下是几种在MVC中实现Repeater效果的方法&#xff1a; 1. 使用foreach循环 最简单的方法是直接在视图中使用Razor的foreach循环&#xff1a; csharp model IEnumer…...

【C语言常用字符串解析】

总结一下在 C 语言中用于字符串解析&#xff08;特别是从文件中读取行并提取数据&#xff09;的常用函数、 核心任务&#xff1a; 通常是从文件中读取一行文本&#xff08;一个字符串&#xff09;&#xff0c;然后从这个字符串中提取出需要的数据&#xff08;比如数字、单词等…...

基于深度学习农作物叶部病害实时检测系统研究(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

『MCP』初体验

『MCP』初体验 介绍 MCP 其实就是 Function Calling 的一个统一接口协议&#xff0c;网上介绍会有很多&#xff0c;所以这里不就重复介绍&#xff0c;这里主要是想记录说明一下 MCP 使用体验&#xff0c;可以帮助新人入门一下 安装 VSCode 以及 MCP client VSCode 自行安装…...

前端面试宝典---webpack原理解析,并有简化版源码

前言 先看一下webpack打包后的bundle.js&#xff0c;前边的直接扫一眼就过&#xff0c;可以发现这个立即执行函数的形参就是一个&#xff0c;key为引入文件路径&#xff0c;value为该模块代码的函数。 所以比较重要的就是通过webpack的配置文件中的entry的入口文件&#xff0c…...

负载均衡深度实践:基于Nginx+Keepalived的高可用方案与Zabbix监控设计

目录 综合实践-部署负载均衡 1 环境准备 2 zabbix监控nginx和keeplive 2.1 nginx安装 2.2 安装keepalived 2.3 部署vue 2.4 安装agent 2.5 zabbix监控nginx配置 2.6 zabbix监控keeplived 3 zabbix监控jar 3.1 安装agent 3.2 安装jdk 3.3 部署jar包 3.4 配置web 4…...

深度学习基础--目标检测入门简介

博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​ 博客主页&#xff1a;羊小猪~~-CSDN博客 内容简介&#xff1a;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒​&#x1f338;​ 往期回顾&#xff1a;yolov5基础–一步一步教…...

Redis ⑧-RESP | 渐进式遍历 | 数据库管理

Redis data-types 除了之前学习的 string、hash、list、set、Zset 五种数据结构之外&#xff0c;Redis 还提供了 bitmap、bitfield、 hyperloglog、geospatial、stream 等数据结构。 另外的一些数据结构&#xff0c;都是在某些特定环境下才会使用&#xff0c;使用频率不高&…...

【Android】四大组件之ContentProvider

目录 一、什么是 ContentProvider 二、创建和使用 ContentProvider 三、跨应用权限控制 四、数据变更通知 五、多表关联与视图 六、异步处理 你手机里的通讯录&#xff0c;存储了所有联系人的信息。如果你想把这些联系人信息分享给其他App&#xff0c;就可以通过ContentP…...

Qwen3 发布:优化编码与代理能力,强化 MCP 支持引领 AI 新潮流

人工智能领域的每一次重大突破都如同璀璨星辰&#xff0c;照亮了人类前行的道路。2025 年 4 月 29 日凌晨&#xff0c;阿里巴巴旗下的 Qwen 官方团队正式发布了最新一代大语言模型 ——Qwen3&#xff0c;犹如一颗重磅炸弹&#xff0c;在 AI 领域掀起了惊涛骇浪。此次发布&#…...

LEETERS题解

【题目描述】 给出一个rowcolrowcol的大写字母矩阵&#xff0c;一开始的位置为左上角&#xff0c;你可以向上下左右四个方向移动&#xff0c;并且不能移向曾经经过的字母。问最多可以经过几个字母。 【输入】 第一行&#xff0c;输入字母矩阵行数RR和列数SS&#xff0c;1≤R,S≤…...

图像加密算法概述

版本: 1.0 日期: 2025年5月1日 目录 引言 1.1 什么是图像加密?1.2 为什么需要图像加密?1.3 图像数据的特点与加密挑战加密基础概念 2.1 明文与密文2.2 加密与解密2.3 密钥2.4 对称加密与非对称加密为什么传统文本加密算法不完全适用于图像? 3.1 数据量巨大3.2 高度冗余性…...

loads、dumps、jsonpath使用场景

在处理JSON数据时&#xff0c;loads、dumps 和 jsonpath 是三个非常有用的工具或概念。它们各自在不同的场景下发挥作用&#xff0c;让我们一一来看&#xff1a; 1. loads loads 函数是 Python 中 json 模块的一部分&#xff0c;用于将 JSON 格式的字符串解析成 Python 的数据…...

Winform(7.序列化方式整理)

今天我又对序列化方式进行了整理,可以与上一篇序列化方式一起看 一.序列化方式(四种) 1.二进制序列化 //定义 Person 类,需要标记为可序列化 [Serializable] public class Person { public string Name{get;set;} public int Age{get;set;} } 在进行二进制序列化…...

通过AI的联网功能提升搜索检索能力

以百度ai搜索&#xff08;百度AI搜索 - 办公学习一站解决&#xff09;为例&#xff0c;ai会自动根据问题搜集现有互联网文章&#xff0c;避免人工通过传统检索引擎的结果逐个去查找&#xff0c;这种方式文章的相关性会更高。 tip&#xff1a;快速查看每篇文档&#xff0c;仅关…...

Spring IoC容器的设计与实现

Spring整体架构与模块划分 核心容器&#xff08;Core Container&#xff09; spring-core 基础工具类&#xff1a;如资源加载&#xff08;Resource接口&#xff09;、反射工具&#xff08;ReflectionUtils&#xff09;、类型转换&#xff08;ConversionService&#xff09;。…...

使用vue的插值表达式渲染变量,格式均正确,但无法渲染

如图&#xff0c;作者遇到的问题为&#xff0c;输入以下代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

数据库 AI 助手测评:Chat2DB、SQLFlow 等工具如何提升开发效率?

一、引言:数据库开发的 “效率革命” 正在发生 在某互联网金融公司的凌晨故障现场,资深 DBA 正满头大汗地排查一条执行超时的 SQL—— 该语句涉及 7 张核心业务表的复杂关联,因索引缺失导致全表扫描,最终引发交易系统阻塞。这类场景在传统数据库开发中屡见不鲜:据 Gartne…...

21.1Linux中的LCD驱动实验(知识)_csdn

1、LCD 和 LTDC 简介 1.1、LCD 简介 1.1.1、分辨率 1.1.2、像素格式 可以看到红、绿、蓝每个8位&#xff0c;还有一位是A7~A0就是透明通道&#xff0c;32位ARG8888。 1.1.3、LCD 屏幕接口 1.1.4、LCD 时间参数 如果将 LCD 显示一帧图像的过程想象成绘画&#xff0c;那么…...

Angular教程前言:历史、安装与用途

Angular 是一个强大且流行的开源前端 Web 应用程序框架&#xff0c;由 Google 开发并维护 1。它在现代 Web 开发中占据着重要的地位&#xff0c;尤其在构建动态、高效且可扩展的 Web 应用程序方面表现出色&#xff0c;特别适用于单页应用程序 (SPA) 和复杂的用户界面 1。本教程…...