带着色器的 HUD (opengl-es 2.0)

2024-06-23

如何在opengl es 2.0上使用着色器绘制HUD?

我有一个在屏幕上绘制纹理四边形的着色器,它使用 MVP 矩阵。四边形有自己的顶点,独立于视图位置等(MVP 矩阵的原因)

Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3f, 17);
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

我想在右上角显示相同的四边形(例如按钮或其他东西,HUD)。 据我了解,我需要创建一个正交矩阵而不是“frustumM”,但是稍后我应该做什么?顶点着色器应该如何使用四边形的顶点?


好的,你有正交矩阵和四边形,那么问题是什么,将四边形的模型视图矩阵转换到所需位置(x,y,z = 0),将其乘以正交矩阵,将相乘的矩阵传递给顶点着色器,乘以顶点位置通过你的矩阵并完成:),我没有在代码中使用任何lookat函数来执行此操作,但我有自己的矩阵计算代码,其部分代码来自一些bada教程,对于投影矩阵,我有其他函数。

  void
    Letter::Ortho(Matrix* result, float fovy, float aspect, float nearZ, float farZ)
    {
        GLfloat frustumW, frustumH;

        frustumH = tanf(fovy / 360.0f * PI) * nearZ;
        frustumW = frustumH * aspect;

        Frustum(result, -frustumW, frustumW, -frustumH, frustumH, nearZ, farZ);
    }

    void
    Letter::LoadIdentity(Matrix* result)
    {
        memset(result, 0x0, sizeof(Matrix));
        result->m[0][0] = 1.0f;
        result->m[1][1] = 1.0f;
        result->m[2][2] = 1.0f;
        result->m[3][3] = 1.0f;
    }


    void
    Letter::Frustum(Matrix *result, float left, float right, float bottom, float top, float nearZ, float farZ)
    {
        float   deltaX = right - left;
        float   deltaY = top - bottom;
        float   deltaZ = farZ - nearZ;
        Matrix  frustum;

        if ((nearZ <= 0.0f) || (farZ <= 0.0f) ||
            (deltaX <= 0.0f) || (deltaY <= 0.0f) || (deltaZ <= 0.0f))
        {
             return;
        }

        frustum.m[0][0] = 2.0f * nearZ / deltaX;
        frustum.m[0][1] = frustum.m[0][2] = frustum.m[0][3] = 0.0f;

        frustum.m[1][1] = 2.0f * nearZ / deltaY;
        frustum.m[1][0] = frustum.m[1][2] = frustum.m[1][3] = 0.0f;

        frustum.m[2][0] = (right + left) / deltaX;
        frustum.m[2][1] = (top + bottom) / deltaY;
        frustum.m[2][2] = -(nearZ + farZ) / deltaZ;
        frustum.m[2][3] = -1.0f;

        frustum.m[3][2] = -2.0f * nearZ * farZ / deltaZ;
        frustum.m[3][0] = frustum.m[3][1] = frustum.m[3][3] = 0.0f;

        Multiply(result, &frustum, result);
    }

所以,用这段代码:

LoadIdentity(&matPerspective);
Ortho(&matPerspective, 60.0f, TEXMANAGER.aspect, -1.0f, 20.0f);
LoadIdentity(&matModelview);
Translate(&matModelview, x ,y ,z);
Scale(&matModelview,size);
//Rotate(&matModelview, 0.0f, 1.0f, 0.0f, 1.0f);
Multiply(&posMatrix, &matModelview, &matPerspective);

并将 posMatrix 传递给着色器:)

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

带着色器的 HUD (opengl-es 2.0) 的相关文章

  • Android 使用带有空格的键访问 Firebase

    这可能是一个愚蠢的问题 但我在谷歌的 firebase 网站上找不到任何示例 如果我在 firebase 数据库中有一个密钥 First Name 然后我打电话 FirstNameClass firstName dataSnapshot g
  • GridView 的行中列宽不同

    我有一个 GridView 需要在其中显示图像 我应用了以下逻辑 If 1 Photo 1 row and 1 col and full width image If 2 Photos 1 row and 2 cols with equal
  • 一部又一部的Android动画

    我在 TextView 上有两个 TranslateAnimations 我希望它们一个接一个地执行 但是 通过使用下面的代码 仅执行第二个代码 我该如何解决这个问题 TranslateAnimation animation new Tra
  • 无法绑定到调试器的本地 XXXX

    我不断得到Can t bind to local XXXX for debugger控制台中的消息 但不适用于 1 个端口 适用于所有随机端口 我已经完成了中所述的操作这个问题 https stackoverflow com questio
  • 如何限制可以选中的复选框数量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 尝试在空对象引用上调用接口方法“...”

    我正在开发一个具有蓝牙功能的应用程序 我使用片段来扫描并列出蓝牙设备 单击时 会回调提供所选蓝牙设备的主要活动 我从使用 Android 6 API 23 的智能手机开始 然后必须调整代码以用于 Android 5 0 API 21 我刚刚
  • 如何在 Google Maps API V2 中获取我的当前位置

    我正在创建一个应用程序 用户需要使用 getMyLocation 查看他 她的地理位置 但这返回 null 有没有解决这个问题的方法 因为我确实读到 getMyLocation 方法总是返回 null 我是 Google 地图新手 因此我们
  • Lombok 如何将代码生成到现有类中? [复制]

    这个问题在这里已经有答案了 我可以使用注释处理器从头开始生成类 但我无法像 lombok 那样修改类 我在 android studio 中搜索了 lombok 生成的类 但是我什么也没找到 然后我通过他们的网站检查了龙目岛概述 还在论坛中
  • 无法分派 DDM 块 46454154:未定义处理程序 - Eclipse - Android SDK

    我正在 Windows 7 64 位机器上工作 刚刚下载并安装了 Android SDK 并且正在使用带有 Android 插件的 Eclipse 我刚刚浏览了 Hello Android 指南 你好 安卓 http developer a
  • 问题:将大数据传递给第二个 Activity

    我有一个奇怪的问题 我在网上浏览但没有找到答案 我仍然是android编程的初学者 那么让我们开始吧 我想做的就是用一些数据调用第二个活动 它适用于小数据 但如果数据变大 第二个 Activity 将不会显示 第一个 Activity 将完
  • 如何在改造中在主体内传递 JSON 数组

    intent sale redirect urls return url http example com your redirect url html cancel url http example com your cancel url
  • 无法启动由 ContextImpl.openFileOutput 处的 NullPointerException 引起的活动

    我发布了一个使用 Google 地图 Android 兼容性库的应用程序 https github com petedoyle android support v4 googlemaps https github com petedoyle
  • 使用 ExoPlayer 播放 YouTube 视频 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣使用外放播放器 http developer android com guide topics
  • ImageView adjustViewBounds 不适用于相对布局

    我有一个ImageView并已设置其layout height为 100dp 其layout width为 wrap content 使用的绘图具有更大的实际尺寸 为 130dp 宽度 X 215dp 高度 当 的时候ImageView被放
  • 当我关闭应用程序时,AsyncTask 是否会停止?

    我想将文件从手机上传到服务器 因为我正在使用 AsyncTask 如果文件很大 如果它们仍在上传并且用户关闭应用程序 上传会停止 即 AsyncTask 将结束还是继续直到完成 推荐使用Service http developer andr
  • ACRA formkey 哪里可以得到?

    所以我尝试按照以下说明进行操作https github com ACRA acra wiki BasicSetup https github com ACRA acra wiki BasicSetup但它太旧了或者什么的 使用我自己的 gm
  • 将文本文件写入 SD 卡失败

    我遇到了一个奇怪的问题 我的应用程序可以将一个简单的文本文件写入 SD 卡 有时它对某些人有效 但对其他人无效 我不知道为什么 对于某些人来说 如果他们输入一些字符 例如 在文件等中 我似乎无法重现它 因为我没有遇到任何麻烦 但这是处理文件
  • Android:Html 锚链接仅在 Web 视图中有效一次

    在使用锚链接加载 html 内容时 我在 webview 中遇到一些奇怪的问题 以下代码非常适合锚标记 但是只有一次 第二次当我按下锚标签时不工作 protected void onCreate Bundle savedInstanceSt
  • 如何从 Activity 的包含类启动 Intent

    我正在寻找从不是 Activity 而是 Activity 类的包含对象的类启动意图的最佳方法 例如活动类 Class MainActivity extends ListActivty TestLauncher tester 以及我想从中开
  • 如何将 Three.js 代码实施到 Android 移动应用程序中?

    我用 HTML CSS 和 JS 编写了 Three js 场景的代码 显示 3D 头部模型及其上的标记 它适用于我的 Angular 项目 我还可以通过将 HTML 代码添加到 Web 视图中 使其在适用于 Android 和 iOS 的

随机推荐

  • 使用 q.js 链接 Promise

    我试图了解承诺链是如何工作的 我在用着q js https github com kriskowal q 这就是我正在玩的东西 var Q require q npm install q the function Q value retur
  • 在调用 clFinish 或 clWaitForEvents 之前,OpenCL 内核不会开始执行

    我正在尝试在 GPU 上运行内核并在主机 CPU 上进行额外的计算 我看到这样的效果 只有内核需要大约 2000 毫秒 clEnqueueNDRangeKernel clFinish 或 clWaitForEvents 我都尝试过 我用 s
  • 在可在 Blackberry 设备和 Windows Mobile 6.5 上运行的网页上嵌入视频

    我正在尝试在一个网站上嵌入一个视频 该视频将在黑莓和 Windows Mobile 6 5 设备上播放 目前正在黑莓 curve 和 acer betouch 上进行测试 但似乎没有任何进展 黑莓Flash 不起作用 HTML5 视频也不起
  • C# 私有成员可见性

    我们的商业模式中有一个学生课程 令我感到奇怪的是 如果我们从另一个学生操纵一个学生 则学生的私人成员是可见的 这是为什么 class Program static void Main string args Student s1 new S
  • 从性能角度来说,是每次调用给定数组的长度更好,还是将长度存储在变量中并每次调用该变量更好?

    我经常调用给定数组的长度 我想知道是否最好继续调用它多次 目前超过 50 次 但它一直在增长 还是将长度存储在整数中并使用每次都是那个整数 如果我不清楚我所说的内容 请考虑以下几点 我有一个字符串数组 String str new Stri
  • 为什么返回 *this 会导致无限循环?

    class binaryOperators public int i binaryOperators int tempI 0 i tempI binaryOperators operator const binaryOperators ri
  • python - 分割字符串而不删除分隔符

    我试图在不删除分隔符的情况下拆分字符串 但这样做遇到了麻烦 我要分割的字符串是 9 4 3 2 我想结束 9 4 3 2 但我尝试过的一切都没有奏效 我正在通过这个 stackoverflow 帖子寻找答案以及谷歌 Python split
  • “word-wrap”css 属性中的“anywhere”是什么意思?

    我刚刚注意到在 Firefox 中 我认为在 Chrome 中也是一样 属性 word wrap 有一个名为 anywhere 的新属性值 它有什么作用 我记得使用正常 默认 或断词 对于大多数用途 但 任何地方 是什么意思 它与 破词 有
  • 如何在 Guice 中进行需要注入实例的动态绑定?

    我想创建一个将实例动态绑定到命名注释的模块 用例是我想自动将配置中的值与属性文件中的键绑定为 Named 值 但是 配置绑定在不同的模块中 因此我需要注入配置 我看过的解决方案是 绑定在configure 方法中 此方法未注入 我无法获取基
  • 触发 OnPropertyChanged 的​​更好方法

    我们有一个遵循 MVVM 模式的 WPF 项目 在视图模型中有很多代码 如下所示 private string m Fieldname public string Fieldname get return m Fieldname set m
  • Swift 中的动态类转换

    我正在尝试动态转换为 Swift 中的类 这可能吗 这是我尝试使用的代码 let stringClass AnyClass NSString self let anyObject AnyObject foo let string anyOb
  • 使用 Pandas 模拟 Excel AverageIF

    我正在尝试在 Pandas 中模拟日期范围内的 Excel 的 AVERAGEIFs 函数 但到目前为止尚未成功 我知道我需要使用 apply 和 groupby 但显然我的语法不正确 因为我收到此错误 TypeError can only
  • 当 git 说它正在“解决增量”时,它在做什么?

    在存储库的第一次克隆期间 git 首先接收对象 然后花费大约相同的时间 解析增量 在克隆的这个阶段实际上发生了什么 的阶段git clone are 接收存储库数据库中所有对象的 pack 文件 为收到的包创建索引文件 查看头部修订版 显然
  • 使用 Linq C# 检查 XML 节点是否具有属性?

    如何检查节点是否确实具有特定属性 我有一个包含几个节点的 XML 文件 如下所示
  • 在 PHP 中解析 CFML 标签

    背景 我一直在跑步a site http www gastronomicfightclub com 过去 5 年一直在博客平台上 我选择在自己的服务器上托管该网站 并通过 FTP 发布 我的服务器正在运行 ColdFusion 因此我决定利
  • 使用 python requests 模块登录网站

    我正在尝试使用 python 请求模块登录网页 我在使用 chrome 提交登录表单并重新检查该表单的代码时捕获了发布请求 下面的代码片段中提到了网站以及参数 根据某人的帖子 我能够创建一个尝试登录和访问受保护内容的 python 代码片段
  • Selenium 看不到 AngularJS 页面元素

    我在编写 Selenium 测试来检查我的应用程序时遇到问题 我想测试的是 当用户输入正确的登录名 密码时 会显示正确的页面并且用户已登录 主要问题是我的登录表单是作为 AngularJS 指令生成的 我有两个不同的登录页面 并且该指令在两
  • 使用间接的动态 Vlookup

    我在使用间接函数时遇到问题 这就是我正在寻找的内容 我正在尝试根据当前选项卡创建动态 vlookup VLOOKUP B3 NH BBC E 1 Z 188 MATCH Share Outstanding NH BBC E 1 Z 1 0
  • Typescript Promise 拒绝类型

    如何设置拒绝承诺的类型 假设我这样做 const start Promise
  • 带着色器的 HUD (opengl-es 2.0)

    如何在opengl es 2 0上使用着色器绘制HUD 我有一个在屏幕上绘制纹理四边形的着色器 它使用 MVP 矩阵 四边形有自己的顶点 独立于视图位置等 MVP 矩阵的原因 Matrix frustumM mProjMatrix 0 ra