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

网站错误提示页设计wordpress 后台 模板

网站错误提示页设计,wordpress 后台 模板,建站之星演示,wordpress 博客 安装在三维场景交互中,框选和反选是不可或缺的基础功能,有助于提高用户工作效率和体验。那么怎么实现呢,本文介绍其中两种方式。 原文:开发三维CAD:实现框选和反选功能 20.框选选择 在三维软件交互中,框选是…

在三维场景交互中,框选和反选是不可或缺的基础功能,有助于提高用户工作效率和体验。那么怎么实现呢,本文介绍其中两种方式。

原文:开发三维CAD:实现框选和反选功能

20.框选选择

在三维软件交互中,框选是一种提高工作效率的交互功能,可以根据框选范围选中完全在其中或相交的组件,可以增强用户体验。

框选框的绘制有多种实现方式,本节介绍其中两种,


  • 作者在《视频课程》中对相机原理和实现有详细的讲解,包括原理和代码逻辑,欢迎观看。

https://www.bilibili.com/cheese/play/ss168681371

学习!《从零开发一款三维CAD软件(OpenGL/QT/C++)》课程上线啦


两种绘制框选框方式

  1. 对数据进行预setup,然后在渲染循环中根据当前位置和状态不断的更新modelMatrix以适配当前框的位置和大小,然后绘制;

  2. 在每个渲染循环中,根据鼠标位置实时计算框的位置和尺寸,进行数据的setupdraw(绘制);

这两种方式各有优缺点,第一种方式避免了频繁搭建数据和渲染桥梁的过程,但需要在每个渲染循环中进行更多的计算:计算当前的modelMatrix;第二种方式需要在每个渲染循环中进行数据和渲染桥梁的搭建,然后绘制,但不用进行过多的计算过程。

20.1.方式一

下图描述了方式一的工作流程,

方式一:构建初始框数据 + 变换形态
图:方式一:构建初始框数据 + 变换形态

  1. setup初始数据,初始数据为以原点为中心,在XOY平面的单位矩形,后续将(以不同的modelMatrix)不断的渲染该数据;

  2. 屏幕像素位置和深度对应三维空间中的位置,我们根据鼠标初始点击和当前位置,加之深度为0来通过渲染管线矩阵变换的逆过程得到在世界坐标系中的空间位置,构造空间矩形;然后构造初始矩形到空间矩形的变换矩阵,作为modelMatrix设置到顶点着色器中;

  3. 经过渲染管线的处理,空间矩形被绘制在屏幕上,与初始鼠标位置和当前鼠标位置映射的轴对齐矩形;

计算矩形框的modelMatrix的逻辑看起来有些许复杂,让我们一起探究下,

  • 首先根据空间矩形框的尺寸构造缩放矩阵;

  • 然后通过旋转将初始矩形旋转到和空间矩形平行,试想一下将(0,0,1)绕其与空间矩形法向normal叉乘得到的向量rotateDir旋转((0, 0, 1)normal的)夹角,使得其与normal同向;

  • 然后绕空间矩形法向normal旋转,使得处理后的初始矩形轴与空间矩形轴对齐;

  • 此时处理后的初始矩形中心仍为原点,偏移到空间矩形中心即可~

我们来看下代码~

Transform ViewerUtils::getRectSelectMatrix(constvector<Vector3f>& rectData)
{Vector3f rectX = rectData[2] - rectData[1];Vector3f rectY = rectData[1] - rectData[0];//  缩放
Vector3f xB(rectX.Length(), 0.0f, 0.0f);
Vector3f yB(0.0f, rectY.Length(), 0.0f);
Transform matScale(xB, yB, Vector3f::BasicZ, Vector3f::Zero);//  旋转到对应面Vector3f normal = (rectX * 100.0).CrossProduct(rectY * 100.0);//兼容值太小情况normal.Normalize();Vector3f nor2 = Vector3f::BasicZ.CrossProduct(normal);
double ang2 = Vector3f::BasicZ.Angle(normal);nor2.Normalize();
Transform matRotateFace(nor2, ang2);//  旋转到轴对齐Vector3f xAxis;Transform::MultVector(matRotateFace, Vector3f::BasicX, xAxis);double angXAxis = xAxis.AngleOnPlaneTo(rectX, normal);
Transform matRotateAxis(normal, angXAxis);//  偏移Vector3f rectCenter = 0.5 * (rectData[0] + rectData[2]);Transform matTrans;matTrans.SetTranslate(rectCenter);Transform matRe;Transform::Mult(matTrans, matRotateAxis, matRe);Transform matRe2;Transform::Mult(matRe, matRotateFace, matRe2);Transform matRe3;Transform::Mult(matRe2, matScale, matRe3);return matRe3;
}

上述代码过程给人的感觉是执行了一些计算过程,同时申请和释放了一些变量,嗯,这貌似不是一种良好的味道,尤其是在频繁执行时;而处理过多也意味着可能的误差累积过程...... 让我们来看下方式二吧~

提示

如果采用方式一进行选择框的绘制,那么记得在渲染循环中设置点光源位置为相机位置沿Front逆向偏移一段距离,以让选择框显示效果更亮。

20.2.方式二

方式二:实时计算、构建和绘制选择框
图:方式二:实时计算、构建和绘制选择框

方式二的过程流程如上图,

  1. 屏幕像素位置和深度对应三维空间中的位置,我们根据鼠标初始点击和当前位置,加之深度为0来通过渲染管线矩阵变换的逆过程得到在世界坐标系中的空间位置,构造空间矩形;然后setup

  2. 经过渲染管线的处理,空间矩形被绘制在屏幕上,与初始鼠标位置和当前鼠标位置映射的轴对齐矩形;

20.3.补充

思考

  • 为什么我们在计算屏幕点的空间位置时,选择深度为0呢? 其实选择其他在[0,1]间的深度也可,经过渲染管线的处理同样能渲染到屏幕“正确”位置,但请想一下,我们为什么要显示选择框呢?为了更优化直观的展示选择范围,进而“选中”在其中的元素!

  • 怎么判断在选择范围中呢?一种处理办法是考虑是否在“框选”的透视平截头体中对应空间内,也就是深度为0和深度为1构造的两个矩形拉伸的融合体范围内的元素。

构造好框选的融合体后,我们可以进一步构造空间BSP树,然后快速的判断场景中的元素是否在BSP树对应的空间内。

提示

我们实现的框选支持正选与反选,快来试着操作一下吧,向左上、右上、左下、右下画框选框,具体逻辑可自行思考~

20.4.总结

作者(哈市雪花)在GLViewer中采用了方式二来绘制框选框,二者各有优点,方式二具有更优的效率、准确性和可靠性,但其增加了相对多的接口。

我们回顾下框选实现逻辑,

  1. 点击按钮调用boxSelect进入框选状态,此时会屏蔽鼠标操作相机动作;

  2. 点击鼠标左键不放,进行移动过程中不断的调用ViewerSetting.UpdateRectSelect更新选择框位置;

  3. 鼠标左键松开时,清理当前选择内容,根据构造的选择空间(透视平截头体内连接近平面和远平面的融合体)调用Model.UpdateSelectInfo识别选择元素;同时调用ViewerSetting.ClearRectSelect清理选择框数据。

“框选实现”接口调用逻辑
图:“框选实现”接口调用逻辑

如果一切正常,或者遇到的问题被排查解决,那么运行之后的效果如下,有问题或疑问请查看工程代码或联系我。

框选效果
图:框选效果

20.5.效果

https://www.bilibili.com/video/BV1kUKuzAE2A/

也可在《课程视频》中进行观看~

学习!《从零开发一款三维CAD软件(OpenGL/QT/C++)》课程上线啦


专注于图形学(渲染和几何算法)、数据处理、并行计算相关研究和研发,欢迎交流~

学习!《从零开发一款三维CAD软件(OpenGL/QT/C++)》课程上线啦

系列课程已上线,详细的视频讲解,打下扎实的图形学基础,欢迎大家观看和支持~

往期文章:

  • GLViewer:添加ViewCube

  • 学习!《从零开发一款三维CAD软件(OpenGL/QT/C++)》课程上线啦

  • OpenGL模板缓冲:实现亮显外轮廓效果

  • 2025 想从事工业软件开发要掌握哪些知识?

  • 30.抗锯齿(anti aliasing):使用OpenGL+QT开发三维CAD

  • MSAA抗锯齿技术的不足和优化(PPAA)

  • 相机:Camera原理讲解(使用OpenGL+QT开发三维CAD)


文章转载自:

http://lNkIyJFI.nLgnk.cn
http://NLYrRFSv.nLgnk.cn
http://HUu0bvTn.nLgnk.cn
http://Utqy8RJF.nLgnk.cn
http://q2SP1RDJ.nLgnk.cn
http://hROziUdH.nLgnk.cn
http://R3r22lFD.nLgnk.cn
http://bemYdviT.nLgnk.cn
http://h9sq1skt.nLgnk.cn
http://Gh8MWwXW.nLgnk.cn
http://zLXZt3j4.nLgnk.cn
http://kPzRVTFC.nLgnk.cn
http://tNJIvl2k.nLgnk.cn
http://4VbiIsK8.nLgnk.cn
http://QjvBWGsB.nLgnk.cn
http://DwaXIsVu.nLgnk.cn
http://f4PIbMEC.nLgnk.cn
http://qO6vfwQh.nLgnk.cn
http://mGeJDO71.nLgnk.cn
http://lwX0NqQt.nLgnk.cn
http://SITMbOqc.nLgnk.cn
http://jIwxQGu5.nLgnk.cn
http://5klbGPBW.nLgnk.cn
http://uG1c3oSL.nLgnk.cn
http://yBMDwfqT.nLgnk.cn
http://pQlNqyIQ.nLgnk.cn
http://x0Tm7CdO.nLgnk.cn
http://FqBbt4DA.nLgnk.cn
http://u5iqSpsm.nLgnk.cn
http://uSnMUNC3.nLgnk.cn
http://www.dtcms.com/wzjs/759765.html

相关文章:

  • 寻找石家庄网站建设网站建设结束语
  • 网站运营工作的内容面试学校网站开发
  • 房管局 网站做房查贵阳酒店网站建设
  • 网站推广的基本方式温州网站设计服务
  • 微信网站开发视频教程黄金网站app视频下载小说
  • 广西柳州网站建设公司面包类网站设计
  • 餐饮网站系统做企业网站制作
  • 网站空间建站美工网站做兼职
  • 如何才能做好品牌网站建设自驾游网站建设方案
  • 优舟网站建设免费网络电视直播在线观看
  • 低成本网站制作施工企业向建设单位提供预付款担保产生的费用属于
  • 建设工程消防设计备案哪个网站wordpress邮箱验证
  • 哈尔滨网站建设市场wordpress修改注册
  • 17做网店类似网站正规拼多多代运营公司
  • 门户网站制作惠州seo优化服务
  • 网站建设移交手续什么是全网营销推广
  • 外贸建站平台哪家好WordPress多域名无法登录
  • 福建福清市住房和建设局网站毕节城乡建设局网站
  • 创建网站成功案例wordpress 书签
  • 石家庄网站推广服务平台tv电视盒子企业网站模板
  • 商城网站建设价格低网站建设用哪个好
  • 广州宣传片制作公司长沙seo管理
  • 网站死了怎么办西安优秀的定制网站建设公司哪家好
  • 一般给公司做网站用什么软件队标logo设计简单
  • 网站报错403wordpress批量修改
  • 网站建设哪家质量好网站建设方案的重要性
  • 郑州网站优化哪家好个人备案的网站
  • 能自己做网站吗做网络推广选择哪个网站好
  • 做多语言网站多少钱有些网站为什么可以做资讯
  • 网站外链建设设计网店交易哪个平台好