OGRE 查询遮罩

( 页面加载中(遮罩层、模拟查询、模拟隐藏、模拟刷新、全屏遮罩、兼容ie、谷歌、火狐等浏览器)2016.09.13 ( 页面加载中(遮罩层、模拟查询、模拟隐藏、模拟刷新、全屏遮罩、兼容ie、谷歌、火狐等浏览器) 立即下载

查询遮罩

所有的MovableObject允许你为它们设置一个遮罩,然后SceneQueries使你能够根据这个遮罩来过滤你的结果。所有的遮罩都是通过二进制“AND”操作来实现的

 

我们要做的第一件事就是创建这个遮罩值。本节利用手札22的代码

找到MouseQueryListener类的最开始,将这些添加到public声明后面:

      enum QueryFlags
  {
      NINJA_MASK = 1<<0,
      ROBOT_MASK = 1<<1
  };

每当我们创建一个机器人实体,我们调用它的"setMask"方法将这个查询标记设置为ROBOT_MASK。

在忍者模式下,我们将使RaySceneQuery仅考虑带有NINJA_MASK标记的物体。而在机器人模式里,我们将使它仅考虑ROBOT_MASK。
在onLeftPressed找到:

              if (mRobotMode)
              {
                  sprintf(name, "Robot%d", mCount++);
                  ent = mSceneMgr->createEntity(name, "robot.mesh");
              } // if
              else
              {
                  sprintf(name, "Ninja%d", mCount++);
                  ent = mSceneMgr->createEntity(name, "ninja.mesh");
              } // else

替换为:
  if (mRobotMode)
              {
                  sprintf(name, "Robot%d", mCount++);
                  ent = mSceneMgr->createEntity(name, "robot.mesh");
                  ent->setQueryFlags(ROBOT_MASK);
              } // if
              else
              {
                  sprintf(name, "Ninja%d", mCount++);
                  ent = mSceneMgr->createEntity(name, "ninja.mesh");
                  ent->setQueryFlags(NINJA_MASK);
              } // else
我们还需要做到,当我们处于其之一种模式中时,我们只能点击和拖拽当前类型的物体。我们需要设置这个查询标记,使得只有正确的物体类型才被选择。为此,在机器人模式中,我们设置RaySceneQuery的查询标记为ROBOT_MASK,而在忍者模式里设置为NINJA_MASK。
在onLeftPressed函数里,找到这个代码:
 
mRaySceneQuery->setSortByDistance(true);
在这一行后面加上一行:
mRaySceneQuery->setQueryMask(mRobotMode ? ROBOT_MASK : NINJA_MASK);
这句修改过后,你会发现在机器人状态下,你无法选中忍者,同样在忍者状态下,你无法选中机器人。
————————————————————————————————————————————

查询类型遮罩

当使用场景查询时还有一件事需要考虑。假设你在上面的场景里加入了一个公告板或者粒子系统,并且你想要移动它。我会发现查询不会返回你点击的公告板。这是因为SceneQuery还存在另外一个遮罩,查询类型遮罩(QueryTypeMask),它限制了你只能选择这个标记指定的类型。默认情况是,当你作一个查询时,它只返回实体类型的物体。

在你的代码里,如果想要查询返回公告板或者粒子系统,则你要在执行查询之前这么做:

mRaySceneQuery->setQueryTypeMask(SceneManager::FX_TYPE_MASK);

现在查询将只返回公告板或者粒子系统作为结果。

在SceneManager类里面,已经定义了6种类型的QueryTypeMask作为静态成员:

WORLD_GEOMETRY_TYPE_MASK // 返回世界几何
ENTITY_TYPE_MASK // 返回实体
FX_TYPE_MASK // 返回公告板/粒子系统
STATICGEOMETRY_TYPE_MASK // 返回静态几何
LIGHT_TYPE_MASK // 返回光源
USER_TYPE_MASK_LIMIT // 用户类型遮罩限制

没有手工设置这个属性时,QueryTypeMask的默认值是ENTITY_TYPE_MASK。

 


设置MovableObject的遮罩


每当我们创建一个新的遮罩,它的二进制表示必须只包含一个“1”。即,这些是合法的遮罩:
00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000

等等。我们通过使用一个“1”并按位移动它,能够轻松地创建一个值。即:
00000001 = 1<<0 00000010 = 1<<1 00000100 = 1<<2 00001000 = 1<<3 00010000 = 1<<4 00100000 = 1<<5 01000000 = 1<<6 10000000 = 1<<7

直到1<<31。这样我们就有了32种不同的遮罩,可以用在MovableObject对象上。

有多个遮罩的查询

我们能使用“OR”操作符,来为多个遮罩进行查询。比如说,在游戏里我们有三个不同组的对象:

enum QueryFlags { FRIENDLY_CHARACTERS = 1<<0, ENEMY_CHARACTERS = 1<<1, STATIONARY_OBJECTS = 1<<2 };

现在,如果我们只要查询friendly characters,可以这么做:

mRaySceneQuery->setQueryMask(FRIENDLY_CHARACTERS);

如果我们要同时查询enemy characters和stationary objects,可以这么做:

mRaySceneQuery->setQueryMask(ENEMY_CHARACTERS | STATIONARY_OBJECTS);

如果你有很多这一类的查询,你可以把它们定义到枚举类型里去:

OBJECTS_ENEMIES = ENEMY_CHARACTERS | STATIONARY_OBJECTS

然后只使用OBJECTS_ENEMIES作查询。

查询遮罩以外的所有东西

你还可以使用按位反转操作,来查询除了遮罩的所有事物,就像这样:

mRaySceneQuery->setQueryMask(~FRIENDLY_CHARACTERS);

这样返回所有事物,除了friendly characters。对于多个遮罩,你也能这么做:

mRaySceneQuery->setQueryMask(~(FRIENDLY_CHARACTERS | STATIONARY_OBJECTS));

这样返回所有物体,除了friendly characters和stationary objects。

 

选取所有物体或者不选取任何物体

你还以用遮罩干一些有趣的事情。请记住,如果你为场景查询把查询遮罩设置成QM,MovableObject的遮罩为OM,如果QM & OM 包含至少一个“1”,则表示符合。因此,为场景查询把查询遮罩设置成0,将会使它不返回任何MovableObject。把查询遮罩设置成1,则返回所有查询遮罩不为0的MovableObject。

使用为0的查询遮罩有时是非常有用的。比如,当只需要返回worldFragment时,TerrainSceneManager不必使用QueryMasks。可以这么做:

mRaySceneQuery->setQueryMask(0);

在你的场景管理器的RaySceneQueries里,你就只能得到worldFragment。如果你的屏幕里有很多物体,由于你只要地形的交点而不想浪费时间循环遍历所有的东西,这样做是很有用的。

 

 

这部分并不很理解,先放着吧,理解了我在提炼

19种高端大气的js遮罩弹窗效果 19种高端大气的js遮罩弹窗效果,html5+CSS3+JS,代码简介,效果全面,初学者也可看懂 立即下载

相关推荐

正在查询显示遮罩层

查询显示遮罩层

页面查询实现遮罩效果

asp.net 利用loadmask实现遮罩效果

dlorwolleh的博客 390

工业音频故障检测:从CNN到Transformer的技术演进

音频信号处理是工业设备预测性维护的核心技术之一,通过分析设备运行时产生的声波特征实现故障预警。传统方法依赖梅尔频率倒谱系数(MFCC)等手工特征,而深度学习技术尤其是Transformer架构,通过自注意力机制突破了CNN在跨频段特征提取上的局限。Audio Spectrogram Transformer(AST)等先进模型在工业场景中展现出91.2%的高召回率,显著优于传统方案。这种非接触式监测技术结合边缘计算优化,已成功应用于石油化工、电力能源等领域,实现提前72小时预测轴承故障,单项目可避免数百万元的

weixin_30467861的博客 326

Ogre中查询器Mask类型

使用场景查询时还有一件事要考虑。假设你在场景里加入了一个公告板或者粒子系统,并且想要移动它。你会发现查询不会返回你点击的公告板。这是因为SceneQuery还存在另外一个Mask,查询类型Mask(QueryTypeMask),它限制了你只能选择这个标记指定的类型。默认情况是,当你作一个查询时,它只返回实体类型的物体。       在你的代码里,如果想要查询返回公告板或者粒子系统,则你要在

痞子龙3D编程 1372

CARLA 0.9.15从零开始:环境搭建与基础场景实战指南

本文是CARLA 0.9.15从零开始的完整环境搭建与基础运行教程。详细介绍了在Linux系统下配置Python环境、下载安装CARLA核心软件包、启动服务器以及运行第一个基础场景的步骤。重点演示了如何通过Python客户端脚本生成随机车流,并手动控制EGO车辆在仿真城市中行驶,为自动驾驶算法开发构建了坚实的仿真测试基础。

weixin_29053383的博客 777

VScode中配置 C/C++ 环境,超级详细,问题分析全面,绝对好用

VScode中配置 C/C++ 环境,超级详细,问题分析全面,绝对好用 VScode中配置 C/C++ 环境 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 1. 下载编辑器VScode 1.官网:https://code.visualstudio.com/ 2. 安装VScode(建议附加任务全部勾选; 2. 下载编译器MinGW并解压 官网页面:https://www.mi

m0_46147064的博客 8万+

aspx页面用一个遮罩层显示正在加载,加载完后隐藏该div

已经有好一段时间没有使用.NET控件做web了,今天要优化一个界面,正好是用.NET控件做的,遂把此次解决问题的方案下来。 总是有许多开发人员觉得做东西没思路,我觉得只是见得少了,思考少了的缘故,所以我总是喜欢以写博客的方式记录下来平时工作中遇到的一些问题,并附上解决方案。 需求:界面查询操作比较费时,用一个遮罩层显示操作正在执行,当操作执行完之后,关闭遮罩层。 思路: 1、准备两个div

邹玉杰(邹琼俊)的专栏 1万+

Vast.ai GPU服务器租用与SSH密钥连接实战指南

本文详细介绍了如何在Vast.ai平台租用GPU服务器并通过SSH密钥安全连接的全流程。从注册、选配GPU型号到SSH密钥生成与配置,再到实战中的端口转发和文件传输技巧,帮助用户高效利用云端GPU资源进行深度学习等计算密集型任务。

weixin_29574585的博客 526

Ogre中级教程(三):鼠标选取以及场景查询遮罩

中级教程三   鼠标选取以及场景查询遮罩 目录        [隐藏]          1 Introduction           2 先决条件           3 从这开始           4 标明选择的物体           5 添加忍者           6 选择物体           7 查询遮罩           8 查询类型遮罩           9 关于遮罩

神秘代码 2062

基于Python实现学习进度跟踪系统

{{ task }}: {{ "%.1f"|format(hours) }}小时

寒寒豆豆软件公司的博客 195

开源免费!ReaLTaiizor如何用MIT许可证打造专业级WinForm UI?

摘要: ReaLTaiizor是一款开源UI控件库,为WinForm应用提供现代化界面解决方案。支持100+组件、多主题切换(浅色/深色/自定义)和.NET 4.8-8.0全版本兼容,MIT许可证允许免费商用。通过NuGet快速安装,3步改造传统界面:1)注入主题(如this.Theme = new Dark()),2)替换原生控件为高颜值组件(如ModernGrid替代DataGridView),3)集成高级功能(分页/动画提示)。典型场景包括登录界面美化(进度动画+通知控件)和数据表格Material风

墨夶的博客 1520

ogre鼠标点选

From OGRE 3D 中文Jump to: navigation, search目录1 Introduction 2 先决条件 3 从这开始 4 标明选择的物体 5 添加忍者 6 选择物体 7 查询遮罩 8 查询类型遮罩 9 关于遮罩更多内容 9.1 设置MovableObject的遮罩 9.2 有多个遮罩的查

痞子龙3D编程 2833

药物对接仿真软件:HADDOCK_(16).实践项目:抗体-抗原对接案例

定义分子结构文件。

kkchenjj的博客 578

Ogre中级教程

中级教程一 来自 Ogre wiki 动画, 两点间移动, 和四元数基础 作者: Culver. 内容 目录 [隐藏] 1 介绍 2 前期准备 3 准备开始 4 设置场景 5 动画 6 移动角色 7 巩固练习 7.1 简单问题 7.2 中级问题 7.3 困难问题 7.4 专家问题 介绍 这个教程...

weixin_30443075的博客 231

Claude Code 100个真实案例 - 用AI设计Arduino PCB电路板(硬件小白也能画板)

本案例展示如何使用 Claude Code 配合 KiCad 的 Python 脚本接口,从零设计一块 Arduino 传感器扩展板 PCB。从原理图符号创建、网表生成到 PCB 布局布线,全程自动化完成,最终输出可直接发给工厂打样的 Gerber 文件。

yueyeguzhuo的专栏 438

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

遮罩 ogre

文档:教程:中级教程:中级教程三 出自Ogre3D开放资源地带 跳转到: 导航, 搜索 目录 1 Introduction2 先决条件3 从这开始4 标明选择的物体5 添加忍者6 选择物体7 查询遮罩8 查询类型遮罩9 关于遮罩更多内容 9.1 设置MovableObject的遮罩9.2 有多个遮罩的查询9.3 查询

xueying_的专栏 640

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

实现自定义场景查询的方法

转载请注明出处!http://www.cnblogs.com/pulas/ 场景管理器SceneManager还默认提供了创建场景查询的功能,下图为场景查询类继承关系图。 其中,射线场景查询RaySceneQuery可以用来拾取场景中的物体、地形碰撞检测和地形选择。下面示范如何在四叉树场景管理器中实现自定义的射线场景查询类。 1. QuadtreeSceneManager覆盖...

weixin_30820151的博客 173

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jqury的遮罩层(正在查询)封装

依赖于jQuery-loading.js 显示遮罩层(正在查询...) 参数:content [String](遮罩层内容),dom [Object](dom节点),time [Number](延迟生成时间) jqLoading = function (content, dom, time) { if (content &amp;&amp; 'string' !== typeof ...

weixin_42458930的博客 400

Ogre的透明贴图

参考:http://www.cnblogs.com/virtorld/archive/2012/11/16/2773328.html Ogre加载模型可以用两种透明贴图, 一种是自带透明信息的PNG格式,material文件里要有sene_blend alpha_blend 一种是用黑白蒙版(遮罩)贴图的JPG或PNG格式,material文件里要有scene_blend add

shen3221894的专栏 1583

OGRE中实现Transparency

在.material文件,可以将参数scene_blend设置为add,modulate或alpha_blend.(1) scene_blend add(是将渲染出的颜色和亮度一起叠加到渲染场景中)你可以使用JPEG或PNG图像文件作为纹理。图片的黑色部分将变成透明(即black = fully transparent)通常用作爆炸、火焰、灯光等。(2)scene_blend

Augmented Reality & Computer Graphics 2709

遮罩层Loading实现

先上图: 以下是几个必须的文件: 1.loading.css: #loading { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); z-index: 15000; } #loading img { position: absolut

hapier的博客 9938

Ogre中SceneManager分析

SceneManager分析最近以为写引擎,需要研究ogre,以下是研究场景管理的结果。Ogre使用插件机制来实现场景管理功能。ScenceManager只是接口,他可以有很多具体的实现。Ogre允许在同一时刻同一场景中使用多个Scene Manager,这样在不同的场景类型切换时带来好处。(v1.4版本后加了一个SceneManagerEnumerator)。 场景管理主要工作包

痞子龙3D编程 3282

基于Ogre的DeferredShading(延迟渲染)的实现以及应用

http://blog.sina.com.cn/s/blog_458f871201017i06.html

痞子龙3D编程 3204
上一篇: OGRE中画点画线画三角面
下一篇: OGRE - 场景管理器
性感花脸
博客等级 码龄20年 26粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值