物体的点状后边缘

2024-01-01

在我的 Android 应用程序中,我需要显示一个 3D 对象(这没问题),但前边缘应该是实心的,后边缘应该是虚线的。我需要有像图片上这样的东西。如何使用 OpenGL ES 1 或 2 实现它?

我尝试过蒂姆的想法(使用深度缓冲区)。它有效,但有一些伪像,如图片所示,虚线(紫色)线与实线(红色)线重叠:

发生这种情况是因为虚线(紫色(GL_GREATER))是在红线(GL_LEQUAL)之后绘制的。 有什么想法如何预防吗?

Thank you everyone for helping. Now it looks great!! enter image description here


这是我要做的事情的粗略轮廓。您需要一个用于对象本身的网格,以及另一个用于您要绘制的“边缘线”的 GL_LINES 网格。

  1. 将实体网格绘制到深度缓冲区中。
  2. 使用标准着色器绘制“边缘网格”,以便获得实线,但将深度测试设置为 GL_LEQUAL(仅绘制比深度值更近的对象。
  3. 使用 GL_GREATER 深度测试第二次绘制边缘网格。在此通道中,使用点画着色器来获得虚线效果(下面将进一步解释)。

这可能会出现问题,具体取决于场景中的其他对象,因为在立方体被其他物体遮挡的情况下,您可能会绘制虚线,但也许这对您来说不是问题,或者您可以以某种方式剔除网格,如果它被遮蔽了。

对于点画着色器,您可以将线条的一个顶点的纹理坐标设置为零,并将线条的另一个端点设置为 1。然后在您的着色器中,您可以使用类似于建议的步骤函数tencent,拒绝片段以创建点画图案。

如果您想自己计算哪些线位于对象后面,您也可以跳过深度缓冲区的混乱,尽管对于除立方体以外的任何东西可能需要大量工作。

如果您想使用 OpenGLES 1 而不是 OpenGLES 2,请将点画着色器替换为点画图案的 1D 纹理,并用它来纹理化背线。然而我不是 100% 确定你可以在 OpenGL 中对一条线进行纹理处理,所以这可能行不通。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物体的点状后边缘 的相关文章

随机推荐

  • 如何为我的 JavaScript 创建自己的 vsdoc.js 文件?

    如何为现有 JavaScript 库创建 vsdoc js 文件 该文件将在 Visual Studio 2010 内部提供智能感知详细信息 只需创建与库中相同的函数和对象 但是添加 XML 注释 http weblogs asp net
  • 为什么CGO_ENABLE会对虚拟内存产生如此大的影响?

    我有一个用 Golang 编写的小守护进程 它在循环中工作并执行一些操作 我发现 当守护进程使用 CGO ENABLE 1 或 CGO ENABLED 0 进行编译时 其行为会有所不同 例如 当 CGO ENABLE 1 默认值 时 程序的
  • 如何显示当前分支与其远程对应分支之间的日志

    有时从远程存储库获取后 我看到我的分支落后了 gt git status On branch develop Your branch is behind origin develop by 7 commits and can be fast
  • 如何在动态生成的按钮中设置特定id处的文本

    我有以下代码 在此我动态生成了按钮 单击按钮时 它会显示时间选择器 我的问题是设置单击按钮的时间 但它设置了最后一个按钮的文本如何设置单击按钮的值 public void addButton int value list removeAll
  • Jacob 连接到远程计算机以获得 WMI 支持

    我正在尝试使用 java 和 Jacob 连接到远程计算机 以便获取有关远程计算机的一些 WMI 信息 对于本地主机 我使用下面的代码 它工作正常 String host localhost String connectStr String
  • 从 docker 容器访问 localhost

    我有一个任务要在 localhost 8081 localhost 8082 和 localhost 8083 上设置 3 个 docker 容器 我已经成功完成了 然后最后一个容器是 localhost 8080 上的 java 应用程序
  • Matplotlib 在第一帧后停止动画

    我正在尝试为两个子图设置动画 每个子图都有多行 我在用Matplotlib http matplotlib org 我正在使用FuncAnimation http matplotlib org api animation api html
  • 为什么二进制序列化要求将对象标记为可序列化?

    我正在使用 xml 序列化程序 但是当我切换到二进制序列化时 它会抛出异常 运行时错误 dotNet 运行时异常 程序集 MyTypes Version 1 0 0 0 Culture neutral PublicKeyToken null
  • 为什么显式调用基移动构造函数实际上调用基复制构造函数? [复制]

    这个问题在这里已经有答案了 我试图通过派生类 move ctor 显式调用基类 move ctor 但是 惊喜 这实际上调用基类复制构造函数而不是基类移动构造函数 我在用着std move 对象上的函数以确保派生的移动向量被调用 代码 cl
  • 使用 RxJava、Retrofit 上传进度

    在我的项目中 我使用 MVP 设计模式 RxJava RxAndroid 和 Retrofit 来使用 API 调用 目前 我正在寻找在发送图片时尝试显示上传进度的解决方案 我已经看到了几种可能的实现 但恐怕它们不适合我的实现 以下是我如何
  • 从WebWorker同步获取数据?

    虽然我知道 JavaScript 本质上是单线程的 并且通常不赞成这样的事情 但我想知道是否有任何方法可以让 WebWorker 等待 直到主线程提供一些数据 而不破坏 WebWorker 的调用堆栈 由于这是一个有趣的项目 我可以使用新技
  • 创建文本行,'\n'.join(my_list) 缺少尾随换行符

    我想将 N 个字符串连接在一起 每个项目一行 my list one two three lines n join my list 不幸的是 我需要在每行末尾添加一个换行符lines 在上面的解决方案中 最后一行缺少换行符 我使用Pytho
  • 如何定期更改背景图片?

    我想在一秒计时器上更改我的应用程序的背景图像 更改两个图像之间的背景 我知道如何在按下按钮时更改图像 但我很难找到计时器的代码 我应该做什么 Thanks 你可以使用View postDelayed Runanble r long dela
  • 使用 TestCafe 时如何与 Windows 桌面交互

    我需要使用 TestCafe 在 Electron 应用程序中执行操作 但我还需要在 Windows 桌面上执行操作 例如单击任务栏 启动其他应用程序 由于 TestCafe 只能与浏览器窗口中的内容进行交互 因此我尝试使用 Appium
  • Javascript 文件无法访问 jstl

    我的 jstl 代码位于一个 javascript 文件中 该文件包含在我的 jsp 页面中 我遇到的问题是 当我在 jsp 页面内的脚本中编写 jstl 代码时 它工作正常 但是当我在单独的js文件中编写相同的代码时 jstl代码根本不起
  • 如何使用 jQuery 从 dom 中删除空元素?

    WordPress 文字编辑器吐出空内容 p 像这样的标签 p p nbsp p 我想针对所有 p with nbsp 并删除它们 我相信我必须使用contains and remove功能 但我不确定这段代码是否会删除 p p 标签仅 n
  • 从匿名内部类中突破方法

    我有一个方法 void someMethod String someString final String testAgainst for int i 0 i lt testAgainst length i if someString eq
  • 手机上无法播放背景视频?

    我制作了一个登陆页面 视频在表单的背景下播放 它在桌面上运行良好 但我使用 Chrome 在我的 Android 设备上检查 背景视频无法在其上播放 谁能帮我解决这个问题 这是我的链接fiddle http jsfiddle net Jam
  • 如何从 MySQL 数据库获取“印地语”文本(印度本地语言)?

    我已将印地语数据存储在 MySQL 数据库中 请参阅下图 现在我想获取该数据并显示在我的 JSP 页面上 但是当我尝试在 java 代码中获取数据时 我将文本转换为以下格式 UID Test upgrade 1 UID 159 1 UID
  • 物体的点状后边缘

    在我的 Android 应用程序中 我需要显示一个 3D 对象 这没问题 但前边缘应该是实心的 后边缘应该是虚线的 我需要有像图片上这样的东西 如何使用 OpenGL ES 1 或 2 实现它 我尝试过蒂姆的想法 使用深度缓冲区 它有效 但