- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 OpenGL 和 Qt。我在 OpenGLWidget
中渲染场景。将鼠标悬停在场景中的对象上时,我想在所选对象附近显示一个带有一些文本的框。我已经实现了对象的选择。
我想到了两种可能的方法。
OpenGLWidget
上方放置一个小部件(例如 QLabel
)渲染场景。您推荐这两种方法中的哪一种,请给我一些实现建议。或者,您可以推荐另一种方法。谢谢!
最佳答案
您好@Artic 我不是 Qt 专家,所以我无法为您提供有关小部件的信息,但我可以为您提供一些使用 OpenGL 创建标签的指导。在这里给出一个完整的实现是很棘手的,因为它在很大程度上取决于你想如何显示文本。但我会尝试概述您的一些选择。
要在 OpenGL 中呈现文本,大多数人会使用一种称为位图字体的技术,请在此处查看更多信息: https://learnopengl.com/In-Practice/Text-Rendering位图字体的概念相当简单,所有字符都预先光栅化为纹理,然后您可以根据需要的字符从纹理的每个部分进行采样。你用四边形构建你的标签,用你为每个字符采样的位图的每个部分进行纹理化。
有符号距离场基本上使用相同的技术,但字符的预光栅化纹理是使用有符号距离场渲染的,它处理了标准位图字体存在的一些问题。
In basic terms, SDF works by generating a special texture, or image, of the font that stores the distance from the edge of each character to its centre, using the colour channels of the image to record the data.
如果您使用带符号的距离字段,仅从位图中采样是不够的,以这种方式呈现的字体需要额外的工作(通常使用着色器程序完成)以产生正确的呈现。
一旦您有了生成标签的方法,您就可以决定是要在屏幕空间还是在世界空间中显示它。
如果您想在世界空间(标签悬停在模型或项目上方)中显示它,如果您希望该标签始终面向相机,则需要做更多的工作,这种技术称为广告牌。
如果您只想在屏幕空间中将一些文本呈现到屏幕上,您也可以“即时”呈现您的文本。您可以使用像 SDL_ttf 这样的库。请参阅:http://lazyfoo.net/tutorials/SDL/16_true_type_fonts/index.php
在此示例中,您使用 SDL_ttf 将一串文本渲染到具有您选择的尺寸的表面,然后您可以从该表面创建 OpenGL 纹理并将其渲染到屏幕。
抱歉,如果此信息有点宽泛,我需要一个更具体的问题来为您提供更多实现细节。
对于实现,我会根据您的需要评估优缺点。如果您之前没有实现过渲染文本的系统,那么最好坚持使用简单的东西;文本渲染的技术比我在这里列出的要多,例如将文本转换为多边形和其他库,这些库试图处理传统字体渲染技术的一些问题,但您可能不需要任何复杂的东西。
关于使用的建议,我会选择您觉得最舒服的技术,通常在 OpenGL 中从头开始做事情会花费更多时间,但它可以为您提供一组更好的功能以供将来使用.但是,如果 Qt 已经有一些很好的渲染标签的东西(比如你提到的小部件),那么花时间学习如何使用它可能是值得的,因为它可能会产生更快的结果,而且你不想重新发明轮子,如果你不需要。请注意,尽管使用 OpenGL 从头开始做事可能会非常有益,并且会极大地提高您的理解力,因为当您没有可以依赖的抽象层时,您必须熟悉事情是如何完成的。最终这取决于你。祝你好运!
关于c++ - OpenGL 和 Qt : display a label on the mouseover,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101679/
是否有 JavaScript 或 jQuery 解决方案可以在鼠标悬停在 DOM 对象上时重复运行函数(在 setTimeout 之后)?否则说,是否有 JavaScript“鼠标悬停时执行”(或“如
它确实适用于 Linux+KDE,但不适用于 Windows/OSX/Linux + XFCE。 我有一个 ListView ,项目是自定义小部件,如果鼠标悬停在元素上,则 ListView 项目的委
显然我在做一些愚蠢的事情。 processTextNodes: function processTextNodes(node) { node = node || content.doc
我希望用户将鼠标悬停在对撞机(只是一个透明矩形)上超过 2 或 3 秒时能够看到描述菜单。我目前正在使用 javaFX 扩展。 我将程序设置为每当我将鼠标悬停在对撞机上时,它都会播放声音效果,但我希望
每次悬停输入框时,我都试图让图标更改颜色。问题是它只在悬停第一个输入文本框时改变背景,而不是其他两个。 我正在尝试在没有 jquery 的情况下获得这种效果。在此先感谢您的帮助! var input
嗨,我正在尝试将一系列鼠标悬停事件分组为一个,但我对 javascript 非常陌生,并且感到非常困惑。我有 5 个按钮,如下所示,我想创建一个函数来包含所有这些按钮。我将 div 的类用于此处未包含
可以在此处显示版本。我希望现有文本淡出,新文本淡入。出于某种原因,它会奇怪地淡入两次。 $(window).load(function(){ var originalTitle = $('.Pinct
我有以下代码,显示一个下拉框,该下拉框淡出然后被删除: $('.containerDIV').show().fadeOut(10000, function() {$(this).remove();})
HTML I'm div-1 I'm div-2 JS $("#div-1").bind('mouseover',function(event){ $('#div-2').stop(true,tr
我正在生成这样的图表 map : http://chart.apis.google.com/chart?chs=440x220&cht=t&chco=CBD122&chld=US&chd=s:_&ch
我很好奇为什么蓝色当我将鼠标从标题上移开时消失,而不是仅当鼠标离开整个时才消失 . $("#yw1 .portlet-title").mouseover(function(){ $("#yw
我处于这样一种情况,我需要在元素(在本例中为图像)在鼠标下方移动时触发 jQuery 的 mouseover 事件,因此与常见情况不同的是元素正在移动,而不是鼠标。 你知道有什么图书馆/要点/技术可以
我有这样的ajax请求片段: Comments --> Post Your Comme
每个文本都属于一个特定的图像,因此当有人将光标移到该图像上时。文本应该显示,当光标移出鼠标时,文本应该隐藏。不需要 jQuerty,必须是纯 JavaScript。任何人都知道我应该如何解决这个问题。
我有一个网络应用程序,每次单击时都会创建一个点(见下文)。当我将鼠标悬停在一堆点上时,我希望光标下的每个点都会触发 mouseover 或 mouseenter 事件。但是,只会触发一个事件,即堆栈“
我是 javascript 的新手,我对将 onclick 事件更改为 mouseover 有疑问,请帮忙 $(document).ready(function() { (function ($)
我的菜单是移动响应式的,因为它会在适用的情况下调整大小并在移动设备上变成汉堡包菜单。 我的问题是菜单还有一个子菜单元素,该元素也应该在移动设备上可见,但由于移动设备上没有鼠标悬停,“点击”会将查看器带
我知道这个话题已经被多次提出,但是我对在鼠标悬停上显示图像有点困惑。我目前有一个带有彩色背景的 div 容器,当您悬停它时会显示该容器。 click here - 向下滚动底部的图像 我遇到的问题是我
所以使用 this as a starting point我正在尝试将元素从一个滚动溢出拖到另一个滚动溢出,我已经完成了。问题是一旦元素(或者更确切地说是元素的克隆)在另一个滚动溢出中,它们就不会响应
刚开始学习 Javascript,这非常困难。但是我遵循了一个教程并按照他在他的视频中所说的那样做了,但我的结果仍然不是我所期望的,也不是他在他的视频中得到的。我想知道为什么会这样,我该如何解决? 我
我是一名优秀的程序员,十分优秀!