我需要一个工作算法来查找无向图中的所有简单循环.我知道成本可能是指数级的并且问题是NP完全的,但我将在一个小图(最多20-30个顶点)中使用它,并且循环数量很少.
经过长时间的研究(主要是在这里),我仍然没有工作方法.以下是我的搜索摘要:
无向图中的循环 - >仅检测是否存在循环
在无向图中查找多边形 - >非常好的描述,但没有解决方案
在有向图中查找所有循环 - >仅在有向图中查找循环
我发现的唯一一个解决我问题的答案是:
似乎找到一组基本的循环并对它们进行异或可以解决问题.找到一组基本循环很容易,但我不明白如何组合它们以获得图中的所有循环...
我想渲染一个平面,使它看起来好像在所有方向上都是无限的.我希望远处的飞机边界成为地平线.
使用简单的网格不起作用 - 计算机无法渲染无限多个三角形.即使这是可能的,相机平截头体也会切出远处的多边形并在平面边界和地平线之间产生间隙.
解决方法是以数学方式计算地平线:在平面上找到点,这些点也位于无穷远处的平面上.连接这些点和视口的两个角会创建一个代表所寻找平面的梯形.但是,通过这种方式,飞机无法正常点亮,或应用纹理,或其他需要精细三角测量的东西......
我对VS2010有一个奇怪的问题(构建一个大的C++项目).在开始调试时,执行就像无限循环一样.我将断点放在main()的第一行,但是从未到达断点.我也试过F11进入main(),但没有效果.任务管理器显示我的应用程序的一个实例,控制台只显示"xxx.dll符号已加载".我试图暂停执行,但我被抛入一些汇编循环,如果有人可以阅读它,这里是汇编:
0000000077226129 lea rdx,[rsp+88h]
0000000077226131 xor ecx,ecx
0000000077226133 call 0000000077231650
0000000077226138 mov dword ptr [rsp+30h],eax
000000007722613C test eax,eax
000000007722613E js 000000007725E73F
0000000077226144 cmp dword ptr [7731201Ch],r14d
000000007722614B je 0000000077226129
Run Code Online (Sandbox Code Playgroud)
有人能告诉我或者至少指出我如何处理这个问题?
编辑:我发现当删除其中一个共享库(Point Grey Research开发的FlyCapture2)时,应用程序正常启动.似乎库有某种加载例程,在执行main()之前调用它.即使我解决了当前的问题,我仍然想知道:如何检测这类问题?
我一直试图找到一种合适的全局照明技术,最好是基于OpenGL或GPGPU,来照亮具有静态物体和动态光源的室外场景(它是城市模型).它不需要非常详细或准确,但它应该相当简单,如果可能的话,迭代和精炼(所以我可以显示中间结果).
我在互联网上找到的最佳匹配是光线跟踪,预计算辐射传输(PRT)和光能传递.
光线跟踪对我的应用来说太慢了.PRT似乎过于复杂,并且具有巨大的预计算步骤,并且光能传递似乎太慢,我不确定它是否可以实现多线程.
有谁知道更好的技术,或上述问题的解决方法?
我正在尝试实现一个自定义OpenGL场景(包装在QGLWidget中),但仍然使用QT控件(如滑动条和按钮).我试图让我的主要小部件成为QGLWidget,它有QWidgets作为孩子.子窗口小部件似乎工作(当我单击下拉菜单时,其选项出现),但窗口小部件无法绘制(我看到一个白色方块).我将我的子窗口小部件的基类从QWidget更改为QGLWidget,现在QPainter调用工作,但QT GUI的东西仍未显示...
有人声称QGLWidget不能将QWidgets作为孩子...我不确定,我不愿意放弃.顺便说一下,我使用Visualization Library来绘制OpenGL场景,但它只是一个OpenGL包装器......
问题可能出现的任何线索?此外,当我将子窗口小部件添加到GQLWidget时,由于某种原因,关键事件停止被处理.
更新: 我尝试了各种小部件和布局组合.似乎QGLWidget只是被绘制在任何东西之上.我甚至尝试使用raise()来安排小部件的Z深度,但无济于事.overlayGL()是在OpenGL小部件之上绘制的唯一方法吗?
更新2 经过数月的尝试,我发现它与QT有关.每当在另一个QGLWidget上绘制QGLWidget时,不会调用第一个的background()函数.所以一个按钮就在那里,可以点击,但它没有画出来.我的解决方法是使用QPainter自己绘制所有内容 - 这很有效.我发现很奇怪的是,必须使用QPainter :: startNativePainting()来绘制它.可以预期,只要QGLWidget是绘图设备,他们就会在QPainter中重载start()以调用startNativePainting()...
另一个(可能有用的)事实是QPainter调用CHANGE Opengl上下文.因此,如果您有另一个与QPainter合作的工具(在我的案例中是可视化库),很可能其中一个会崩溃(在我的情况下,VL会检查在每个帧之前是否已清除了上下文状态).
我想对非平面多边形进行三角测量(即顶点不在同一个3D平面中).多边形由许多点(数百个)组成.三角形表面不必是光滑的.事实上,它越密集越好.
我最初的想法是:
我不确定哪些想法适用于我的情况,或者可能还有更好的方法?
更多细节:即使轮廓上的点是数百个,它们也可以分组为3到10个子集,因此每个子集都非常接近一条线.这样生成的线仍然不在同一平面上.人们可以把它想象成一群鸟,它们以多边形飞行,但不完全在同一垂直高度上飞行.
我的opengl场景有两个遍 - 一个渲染整个场景(颜色和深度),另一个渲染只有一些场景对象,需要第一遍的深度缓冲.
是否可以使用两个帧缓冲对象FBO1和FBO2,并将相同深度的渲染缓冲区绑定到它们两个?伪代码将是:
// ---------- Initialization ----------
// create 'FBO1'
// create render buffer 'RB'
// bind RB to FBO1
// bind TEXTURE1 to FBO1 for color rendering
// create FBO2
// bind RB to FBO2
// bind TEXTURE2 to FBO2 for color rendering
// ---------- Rendering frame----------
// bind FBO1
// render entire scene with depth writing enabled
// bind FB2
// render some objects again with depth mask GL_EQUAL
Run Code Online (Sandbox Code Playgroud)
结果应该是TEXTURE2仅包含对象的那些部分,这些部分不会被第一遍中呈现的其他对象遮挡.