- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 OpenGL 程序中,我按顺序执行以下操作:
// Drawing filled polyhedrons
// Drawing points using GL_POINTS
// Displaying information for each above point beside it
为了显示点信息(例如点标识符/编号),我使用 gluProject 将点的 3D 坐标转换为 2D 窗口坐标。 ()。我使用 glRasterPos 在该 2D 窗口位置写入点标识符()和2D字符渲染代码。
当渲染点被另一个图元遮挡时,由于 OpenGL 管道中发生的自动遮挡测试和深度测试,它会自动不显示。但是,我的点标识 rune 本显示在该点旁边,即使它被遮挡,因为我没有获得此遮挡信息。
如何确定 3D(渲染)点是否被其前面的其他 3D(渲染)图元遮挡?或者是否有更好的方法仅在没有被遮挡时在其旁边显示点信息文本?
注意:我知道需要额外渲染 channel 的方法。我觉得这些对于我的目的来说太昂贵了。
最佳答案
如果您不愿意使用第二遍遮挡查询,您可以尝试对 Z 缓冲区进行采样以与您的测试点进行比较。
由于您要在某个点旁边添加文本,因此请获取该点的归一化 Z 缓冲区值(例如使用 gluProject),然后将该值与该点的采样 Z 缓冲区值(使用 glReadPixels)进行比较。如果您的点落后(大于)您采样的深度值,则您的点应该被遮挡,并且您可以选择不绘制文本。
这当然要求您在文本之前渲染所有几何图形,但这不应该是问题。
示例代码:
// Assumed to already hold 3D coordinates of point
GLdouble point3DX, point3DY, point3DZ;
// Project 3D point coordinates to 2D
GLdouble point2DX, point2DY, point2DZ; // 2D coordinates of point
gluProject( point3DX, point3DY, point3DZ,
mMatrix, pMatrix, vMatrix, // MVP matrices
&point2DX, &point2DY, &point2DZ);
// Read depth buffer at 2D coordinates obtained from above
GLfloat bufDepth = 0.0;
glReadPixels( static_cast<GLint>( point2DX ), static_cast<GLint>( point2DY ), // Cast 2D coordinates to GLint
1, 1, // Reading one pixel
GL_DEPTH_COMPONENT, GL_FLOAT,
&bufDepth);
// Compare depth from buffer to 2D coordinate "depth"
GLdouble EPSILON = 0.0001; // Define your own epsilon
if (fabs(bufDepth - point2DZ) < EPSILON)
// 3D point is not occluded
else
// 3D point is occluded by something
关于OpenGL:如何确定 3D(渲染)点是否被其前面的其他 3D(渲染)图元遮挡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1311869/
我无法找出为什么会出现以下问题:在使用“extends Frame”创建窗口的程序中,我可以使用 BufferedImage 绘制到 Frame(而非 JFrame)的图形上下文,并且它看起来很好。但
我找到了一些示例代码。 它通过AppDelegate.m中的代码显示 View - (BOOL)application:(UIApplication *)application didFinishLa
我在 Objective-C 应用程序中成功使用了 Core Plot。我正在用 Swift 编写一个新应用程序,但遇到了一些麻烦。在我为图表设置 dataSource 之前,坐标轴显示正确且符合预期
多年来我一直在尝试来自 KDE/MATE 的很棒的东西,我真的很喜欢它。在我之前的工作流程中,我真的只遗漏了一件事。 有时我会使用具有大量 float 窗口的应用程序。我发现在 float WM 中非
我创建了默认的底部导航项目。在其中一个 fragment 中,我添加了一个 ListView,效果很好。然后我将其更改为 RecyclerView,它被 BottomNavigationView 遮挡
让两个自定义 View 一起工作时,我遇到了一个非常烦人的问题。我试图在 android Activity 中显示这两个 View ,但其中一个占据了 Activity 的整个可视空间,另一个位于其下
我正在尝试在我的 UITableViewController 中使用 UIRefreshControl,它本身位于 UINavigationController 中,它有它的 hidesNavigat
我是一名优秀的程序员,十分优秀!