iOS 中的 Opengl ES 1.x 发光效果

2023-12-11

我目前正在开发一款 iOS 游戏。现在我想要的是一个用opengl绘制任意发光和半透明椭圆的函数。这有点棘手,因为我使用的是 cocos2d 1.1,它不支持 opengl es 2.0,所以没有着色器。这是我所做的:

首先是绘制挤出线的函数,这是来自http://answers.oreilly.com/topic/1669-how-to-render-anti-aliased-lines-with-textures-in-ios-4/

-(void) drawLineFrom:(CGPoint) start to:(CGPoint) end color:(ccColor4B) color width:(CGFloat) width texture:(CCTexture2D *) texture{
    // calculate direction vector
    CGPoint e = [self op:end minus:start];
    CGFloat length = sqrtf(e.x * e.x + e.y * e.y);
    e = ccp(e.x * width / length, e.y * width / length);

    CGPoint n = ccp(-e.y, e.x);
    CGPoint s = [self op:CGPointZero minus:n];
    CGPoint ne = [self op:n plus:e];
    CGPoint nw = [self op:n minus:e];
CGPoint sw = [self op:CGPointZero minus:ne];
    CGPoint se = [self op:CGPointZero minus:nw];

    // init vertices
    CGPoint vertices[8];
    vertices[0] = [self op:start plus:sw];
    vertices[1] = [self op:start plus:nw];
    vertices[2] = [self op:start plus:s];
    vertices[3] = [self op:start plus:n];
    vertices[4] = [self op:end plus:s];
    vertices[5] = [self op:end plus:n];
    vertices[6] = [self op:end plus:se];
    vertices[7] = [self op:end plus:ne];

    // init texture coordinates
    CGPoint texCoords[8] = {ccp(0, 0) ,ccp(0,1), ccp(0.5, 0), ccp(0.5, 1), ccp(0.5, 0), ccp(0.5, 1), ccp(1, 0), ccp(1, 1)};
    // init colors
    ccColor4B colors[8];
    for (int i = 0; i < 8; i++) {
        colors[i] = color;
    }

    glBindTexture(GL_TEXTURE_2D, texture.name);
    glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors);
    glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
    glVertexPointer(2, GL_FLOAT, 0, vertices);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 8);
}

然后是我的画椭圆函数。基本上它所做的就是将椭圆分割成许多小线并使用上面的画线函数来绘制它们:

-(void) drawEllipse:(float) r focus1:(CGPoint) f1 focus2:(CGPoint) f2 {
    // load texture
    CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage: @"glow.png"];

    int segments = 50;
    CGFloat width = r / 2;
    CGFloat height = sqrtf(powf(r / 2, 2) - powf([Helper distanceFrom:f1 to:f2] / 2, 2));
    CGPoint center = CGPointMake((f1.x + f2.x) / 2, (f1.y + f2.y) / 2);

    glEnable(GL_TEXTURE_2D);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);

    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glTranslatef(center.x, center.y, 0.0);
    glRotatef(atanf((f1.y - f2.y) / (f1.x - f2.x)) * 180 / M_PI, 0, 0, 1);

    GLfloat vertices[segments * 2];
    int count = 0;
    for (GLfloat i = 0; i < 360.0f; i += (360.0f / segments)) {
        vertices[count++] = (cos(degreesToRadian(i)) * width);
        vertices[count++] = (sin(degreesToRadian(i)) * height);
    }

    int i = 0;
    CGFloat lineWidth = 20;
    ccColor4B lineColor = ccc4(255, 255, 255, 50);
    while (i < segments * 2 - 2) {
        [self drawLineFrom:ccp(vertices[i++], vertices[i++]) to:ccp(vertices[i++], vertices[i++]) color:lineColor width:lineWidth texture:texture];
    }
    [self drawLineFrom:ccp(vertices[segments * 2 - 2], vertices[segments * 2 - 1]) to:ccp(vertices[0], vertices[1]) color:lineColor width:lineWidth texture:texture];
}

我的问题是,使用上述混合模式,我的椭圆看起来像这样:

enter image description here

可以看到混合模式显然不对。由于混合,线条连接在一起的地方看起来不像其他部分。但我不知道应该使用哪种混合模式。

I also tried glBlendEquation(GL_MAX_EXT), and it definitely makes my ellipse look much better: enter image description here

但问题是,如果我使用 GL_MAX_EXT 颜色的 alpha 值似乎完全被忽略,因此无法使椭圆半透明。有人能帮我找出正确的方法吗?非常感谢!

顺便说一句,这是我的纹理:

enter image description here


None

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

iOS 中的 Opengl ES 1.x 发光效果 的相关文章

  • Crashlytics 和答案套件的问题

    我在我的应用程序中使用 Crashlytics 来跟踪崩溃 并使用 Answers 工具包来处理自定义事件 我正在使用 pod 文件将框架集成到我的项目中 但是在添加两个 pod 时出现链接错误 pod Fabric pod Answers
  • 使用 Xcode 资产目录缓存 UIImage

    我们都知道UIImage神秘的幕后缓存机制imageNamed 方法 在苹果的UIImage 类参考 https developer apple com library IOS documentation UIKit Reference U
  • Cordova 构建 iOS 应用程序并打开模拟器,但未安装

    我正在 MacOS 上用 Cordova 制作一个 iOS 应用程序 当我跑步时cordova emulate ios该应用程序会构建并打开 iPhone X iOS 11 4 的模拟器 但它从未在模拟器中安装该应用程序 它仅显示模拟器主屏
  • NSXMLParser 解析使用 Windows-1256 编码的 xml 文件

    我想解析 Windows 1256 编码的 rss 文件 但解析器没有读取它 我用 UTF8 编码做了很多解析 但只有这个不起作用 为什么 带有 Windows 1256 的 rss 文件 http youm7 com Rss asp 解决
  • 在 Xcode 中查看 TestFlight 崩溃日志

    我已将我的应用程序发送给 TestFlight 的一些外部测试人员 仅当您从 testFlight 安装应用程序时才会出现问题 如果我从 Xcode 安装它 一切都很好 因此 我必须从 iPhone 中删除我的应用程序 并将自己添加为外部测
  • 在 UIScrollView Swift 中禁用垂直滚动

    不要将此问题标记为重复 我读了很多问题 但没有找到问题的答案 我的问题如下 我有一个UIScrollView它应该只水平滚动 这里它垂直滚动 20px 奇怪的事实 它似乎与状态栏的高度相同 我尝试打印内容大小 y 偏移量和高度UIScrol
  • 如何在 iOS 上反转使用 CoreGraphics 渲染的 pdf 上的文本颜色?

    我正在使用开源 PDF 查看库 VFR PDF Readerhttps github com vfr Reader https github com vfr Reader 我正在尝试实现 夜间模式 或黑色背景与白色文本 我可以将背景设置为我
  • Measure 应用程序是否有可用的 URL 方案?

    我想推出新的测量应用程序 在 iOS 12 上 在我的应用程序中 这可能吗 应用程序是否有可用的 URL 方案可用于此目的 或者还有其他方法可以做到吗 Thanks 您似乎无法打开此应用程序 In the 文档存档 https develo
  • 通过更改其优先级值来动画布局约束

    我有一个包含大量文本的标签 有一个用于折叠和展开标签高度的切换开关 此处名为 里拉套房 所以它会截断文本的结尾 我精心设置了垂直内容拥抱优先级和压缩阻力 因此内在尺寸比压缩阻力具有更高的优先级 高度限制 直接位于标签右侧的可选约束 设置为常
  • 不同形状的图像拼贴

    我对照片编辑应用程序开发完全陌生 我如何开发这样的网格样式 以便我可以添加从相机胶卷中选取的多个图像来创建拼贴画 我浏览了下面的链接 但没有找到实现这一目标的方法 任何建议或链接都 会有帮助 LINK1 https stackoverflo
  • 如何在 Swift 中的标签上制作阴影效果?

    我不知道如何在标签上编写阴影代码 我有一个会改变的乐谱标签 因此无法仅对带有阴影的文本进行Photoshop处理 我需要对其进行编码 以便它始终自动在文本后面有一个模糊的阴影 有人可以举一些例子或提供帮助吗 人们说这是重复的 重复 是关于
  • 将数据库(例如 sqlite)与 cocos2d-x 一起使用

    我开始在 iPhone 上构建游戏应用程序 我正在使用 cocos2d x 游戏引擎 因为它很容易从那里移植到 Android 而且编码是用我非常熟悉的C 编写的 我想知道是否有办法在 cocos2d x 中使用任何数据库 虽然sqlite
  • Objective C - 如何从 NSAttributedString 创建 rtf

    我可以使用以下方法从 rtf 字符串转换为属性字符串 NSAttributedString attributedStr NSAttributedString alloc initWithData data options NSDocumen
  • 如何保存 UIButton 的属性并使用按钮加载? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在应用程序中保存和加载 UIButton 的 alpha 值 https stackoverflow com questions 7336594 how can i save and load t
  • Swift 中的“is”关键字

    据我所知 似乎共识是is在 Swift 关键字中是同义词isKindOfClass method 但是 我在执行以下操作时遇到困难 inside of a method in UITabViewController check if the
  • PreferredStatusBarStyle 不起作用[重复]

    这个问题在这里已经有答案了 我以前用过setStatusBarStyle在我的项目中 它工作正常 但它已被弃用 所以我使用preferredStatusBarStyle 那不起作用 知道我已经 调用方法setNeedsStatusBarAp
  • UIWindow.makeKeyAndVisible() 在 XCTest 中抛出“props 必须具有有效的 clientID”错误

    我正在 Xcode 中使用 XCTest 测试 UIViewController 为了测试一些导航和警报功能 我需要将视图控制器放在 UIWindow 中 我使用以下代码执行此操作 let myViewController UIViewCo
  • Cordova - 已弃用尝试访问非导航器对象上的属性“userAgent”

    我正在尝试让我的 Cordova iPhone 应用程序在 iOS 8 1 中运行 在 7 中工作正常 从 8 开始出现以下错误 Deprecated attempt to access property userAgent on a no
  • 如何在按回车键时以编程方式关闭 iOS 键盘

    我创建了一个UITextField以编程方式制作UITextFieldviewController 的属性 我需要通过回车和触摸屏幕来关闭键盘 我能够让屏幕触摸关闭 但按回车键不起作用 我已经了解了如何使用故事板以及通过分配和初始化来做到这
  • KeyboardAvoidingView“行为”中的高度与位置与填充

    KeyboardAvoidingView 中有一个 行为 属性 例如 import KeyboardAvoidingView from react native

随机推荐

  • 来自 Kafka 主题的 PySpark 结构化流的 Cassandra 接收器

    我想使用 PySpark 结构化流 API 将结构流数据写入 Cassandra 我的数据流如下 REST API gt Kafka gt Spark 结构化流 PySpark gt Cassandra 来源和版本如下 火花版本 2 4 3
  • 如何使用 RxDB 处理 JWT 身份验证?

    我有一个本地 RxDB 数据库 我想将它与 CouchDB 连接 除了身份验证之外 一切似乎都工作正常 我不知道如何以不同的方式添加它 然后在数据库网址中插入凭据 database tasks sync remote http userna
  • PySpark 2.1:使用 UDF 导入模块会破坏 Hive 连接

    我目前正在使用 Spark 2 1 并且有一个主脚本 该脚本调用包含我所有转换方法的帮助程序模块 换句话说 main py helper py 在我的顶部helper py文件我有几个自定义 UDF 我按以下方式定义了它们 def refo
  • Android WebViewClient 属性中的“isForMainFrame”请求是什么意思?

    What is isForMainFrame意思是 android 21 请求是否针对主框架 例如 对于 iframe 将为 false 不清楚 因为对于下面的日志 它返回false用于主框架请求 是不是一样isMainFrame在 and
  • 两个 Java 日期之间的天数差异?

    我想获得两个 Java Date 对象之间的差异 我使用过 Joda Time 库 但问题是我得到的天数差异比实际的天数差异更大 这是我的代码片段 DateFormat formatter new SimpleDateFormat mm d
  • 如何从列表框列表项中获取值

    在我的火狐插件中我有一个
  • 将 AM/PM 时间转换为 24 小时格式?

    我需要将 12 小时格式时间 上午 下午 转换为 24 小时格式时间 例如01 00 PM 至 13 00 使用 C 我该如何转换它 如果您需要将字符串转换为日期时间 您可以尝试 DateTime dt DateTime Parse 01
  • 如何从 Swift 打开邮件应用程序

    我正在开发一个简单的快速应用程序 用户输入电子邮件地址并按下打开邮件应用程序的按钮 并在地址栏中输入输入的地址 我知道如何在 Objective C 中执行此操作 但在 Swift 中无法使其工作 您可以使用简单的 mailto iOS 中
  • 嵌入 Maven 3

    除了 m2eclipse 源之外 是否有关于该主题的任何类型的文档 谢谢 杰巴鲁克 据我所知 文档Maven 嵌入器仍有待创建 是的 Maven 3 0 xJason 创建的页面确实提到了旧文档的链接 但 Jason 后来在MNG 3658
  • 为什么我可以在“res.send”之后执行代码?

    我想知道以下代码行为背后的机制是什么 res send 200 data test data console log still here 我的理解是res send不return该功能 但确实关闭连接 结束请求 这可以解释为什么我仍然可以
  • 无权执行 sts:AssumeRoleWithWebIdentity AWS s3 Cognito 身份验证失败

    我有一个简单的 iOS 应用程序 可以上传到 s3 我正在尝试各种 unauth 尽管理想情况下我想做 Facebook 2 个 IAM 角色 使用向导创建 IAM 身份验证策略 对于 unauth 角色 Version 2012 10 1
  • jQuery 根据选择选项保持显示隐藏状态

    我根据下拉列表中选择的选项下拉选择并显示隐藏其他字段 在 div 内 此代码工作正常并根据选择显示隐藏 但当我加载页面时 所有字段都是可见的 其他事情是 例如 如果我想在选择选项 2 的情况下显示字段并将该选项保存到数据库 并且在重新加载页
  • Powershell .替换正则表达式

    用于替换的正则表达式让我大吃一惊 我正在尝试寻找 值 COM8 gt 在文本文件中并将 COM8 替换为另一个 com 端口 即 COM9 COM13 等 Get Content C Path File config Replace COM
  • 获取列中最常见的 10 个名称

    我一直在努力想出一个能够提取列中出现频率最高的 10 个名称并将它们存储到数组中以供进一步使用的程序 将列的值收集到数组中以加快处理速度 转移到字典的键 频率作为每个键的项目 工作表的 Large 可以轻松找到第 10 大频率 删除任何频率
  • 创建单元测试用例时 PHPUnit 错误

    我有控制器类 UserController 在控制器文件夹中 扩展BaseController 存在于应用程序文件夹中 当我右键单击并选择选项时 Create PHPUnitTests 它给了我以下错误 phpunit Fatal erro
  • 如何检查 @patched-out python 方法是否被调用而不改变其行为?

    我一直在使用Pythonmock我的测试用例的模块 我经常用以下内容装饰我的测试用例 patch my method 装饰师 然后在测试用例的主体中 我设置了 return value属性或 side effect修补方法上的属性来模拟其行
  • 为什么 document.GetElementById 返回 null [重复]

    这个问题在这里已经有答案了 我一直在使用document GetElementById 成功了 但从一段时间开始我就无法让它再次工作了 看下面的代码 div div
  • 从 JavaScript 中的图像读取像素数据会返回半透明像素的意外结果

    我正在 JavaScript 中从 png 文件读取 RGBA 数据 为此 我在画布上绘制图像并使用 getImageData 数据与我的预期不同 测试图像 https raw githubusercontent com FlorianLu
  • “无法获取文档,因为客户端处于离线状态”Firestore 模拟器出现 Firebase 错误

    编辑 我知道这是模拟器的问题 因为没有模拟器它也能正常工作 我正在关注一个Next js 课程我正在使用 Firebase 模拟器 它建议这样做 但没有教程 因为它非常简单 并且我正在尝试为用户从 firestore 读取一些数据 但它总是
  • iOS 中的 Opengl ES 1.x 发光效果

    我目前正在开发一款 iOS 游戏 现在我想要的是一个用opengl绘制任意发光和半透明椭圆的函数 这有点棘手 因为我使用的是 cocos2d 1 1 它不支持 opengl es 2 0 所以没有着色器 这是我所做的 首先是绘制挤出线的函数