翻转 OpenGL 纹理

2024-03-27

当我正常从图像加载纹理时,由于 OpenGL 的坐标系统,它们是颠倒的。翻转它们的最佳方法是什么?

  • glScalef(1.0f, -1.0f, 1.0f);
  • 反向映射纹理的 y 坐标
  • 手动垂直翻转图像文件(在 Photoshop 中)
  • 加载后以编程方式翻转它们(我不知道如何)

这是我在 Utilities.m 文件(Objective-C)中加载 png 纹理的方法:

+ (TextureImageRef)loadPngTexture:(NSString *)name {
    CFURLRef textureURL = CFBundleCopyResourceURL(
                                                  CFBundleGetMainBundle(),
                                                  (CFStringRef)name,
                                                  CFSTR("png"),
                                                  CFSTR("Textures"));
    NSAssert(textureURL, @"Texture name invalid");

    CGImageSourceRef imageSource = CGImageSourceCreateWithURL(textureURL, NULL);
    NSAssert(imageSource, @"Invalid Image Path.");
    NSAssert((CGImageSourceGetCount(imageSource) > 0), @"No Image in Image Source.");
    CFRelease(textureURL);

    CGImageRef image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL);
    NSAssert(image, @"Image not created.");
    CFRelease(imageSource);

    GLuint width = CGImageGetWidth(image);
    GLuint height = CGImageGetHeight(image);

    void *data = malloc(width * height * 4);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    NSAssert(colorSpace, @"Colorspace not created.");

    CGContextRef context = CGBitmapContextCreate(
                                                 data,
                                                 width,
                                                 height,
                                                 8,
                                                 width * 4,
                                                 colorSpace,
                                                 kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host);
    NSAssert(context, @"Context not created.");

    CGColorSpaceRelease(colorSpace);
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
    CGImageRelease(image);
    CGContextRelease(context);

    return TextureImageCreate(width, height, data);
}

其中,TextureImage 是一个具有高度、宽度和 void *data 的结构。

现在我只是在玩 OpenGL,但稍后我想尝试制作一个简单的 2d 游戏。我使用 Cocoa 进行所有窗口操作,并使用 Objective-C 作为语言。

另外,我想知道的另一件事是:如果我制作了一个简单的游戏,将像素映射到单位,是否可以将其设置为原点位于左上角(个人偏好),或者我会运行遇到其他问题(例如文本渲染)?

Thanks.


其中任何一个:

在纹理加载期间翻转纹理,
或者在模型加载期间翻转模型纹理坐标 或者设置纹理矩阵在渲染期间翻转 y (glMatrixMode(GL_TEXTURE))。

另外,我想知道的另一件事是:如果我制作了一个简单的游戏,将像素映射到单位,是否可以将其设置为原点位于左上角(个人偏好),或者我会运行遇到其他问题(例如文本渲染)?

取决于您将如何渲染文本。

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

翻转 OpenGL 纹理 的相关文章

  • NSUndoManager 会撤消后台发生的更改吗?

    我有一个编辑视图控制器 我正在使用 NSUndoManager 它是我的持久性存储 核心数据项目 的一组 我的应用程序的功能之一是与外部服务器同步 我想知道的是 如果我正在视图中编辑某些内容 同时应用程序正在与服务器同步 如果我改变主意并决
  • Xamarin 没有安装的配置文件与安装的 iOS 签名身份匹配

    我想知道是否可以在 ios 设备上编译 Xamarin 应用程序 使用 Visual Studio for mac 而无需成为开发人员 费用为 99 美元 年 因为当我尝试在 iPhone 上构建项目时出现此错误 Xamarin iOS C
  • 使用动画更改 UIView 背景颜色

    我想改变我的UIView带有过渡动画的背景颜色 例如 如果视图是红色的 我将其更改为蓝色 蓝色将从屏幕底部向上滑动到顶部并充满整个屏幕 我想通过制作一个来做到这一点UIView具有相同大小和所需颜色 然后将其从屏幕外一直动画到顶部 但这似乎
  • 更改 UINavigationBar 中 UIBarButtonItem 的位置

    如何更改 UIBarButtonItem 在 UINavigationBar 中的位置 我希望我的按钮比正常位置高约 5 像素 此代码为 UINavigationBar 创建一个具有图像背景和自定义位置的后退按钮 诀窍是创建一个中间视图并修
  • 如何确定 NSURLSessionTask 请求何时开始?

    I use NSURLSessionTask我正在尝试监视我的一些 HTTP 请求需要多长时间 我可以监视什么委托方法 或其他方法 NSURLSessionTask实际上提出了最初的请求 如果这是一个NSURLConnection里面一个N
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • stringFromDate 始终为 NIL

    我知道这是一个重复的问题 但是在 stackoverflow 和 google 上搜索了许多类似的问题后 没有一个解决方案对我有用 我正在尝试将从数据库收到的日期转换为字符串格式以在 iPhone 应用程序中显示 我正在按以下方式将日期转换
  • 将 Objective-C 框架 (CocoaPod) 导入 Swift?

    我正在尝试导入libjingle peerconnection框架到我的 Xcode 项目中 但由于某种原因 我无法使用以下命令导入 Objective C 标头import RTCICEServer在 Swift 源文件中 我尝试使用头文
  • MacTypes.h 中 UInt32 的 Typedef 重新定义,来自 CFBase.h 中的定义

    我在 MacTypes h 的以下代码块中的两行中收到 typedef 重新定义错误 if LP64 typedef unsigned int UInt32 typedef signed int SInt32 else typedef un
  • glut 库中缺少 glutInitContextVersion()

    我正在练习一些 opengl 代码 但是当我想通过以下方式强制 opengl 上下文使用特定版本的 opengl 时glutInitContextVersion 它编译过程失败并给出以下消息 使用未声明的标识符 glutInitContex
  • iOS 上读取证书问题

    我正在尝试从 iOS 中的各种 URL 读取证书 然而 我的代码运行不佳 应该返回我需要的信息的数组总是返回null 我缺少什么 void findCertificate NSString url NSInputStream input N
  • 如何将媒体附件添加到 iOS 10 应用程序中的推送通知中?

    有多个示例 您应该如何设置项目来添加使用 媒体附件 技术来显示图像的丰富通知 我已经阅读了其中的大部分内容 但我错过了一些内容 因为我的项目没有使用此有效负载显示任何丰富的通知 使用 APNS Tool 和 Boodle 进行测试 aps
  • 在 Android 版 Glide 中离线时加载已获取的图像

    我正在使用 Glide 版本 4 8 0 为了加载图像我这样做 GlideApp with HomePageFragment this load remoteURL diskCacheStrategy DiskCacheStrategy A
  • 动态框架中未定义的架构符号

    我正在开发一个 iOS 框架 该框架包含多个第三方框架并使用 UnitySendMessage C 方法与 Unity 进行通信 我想创建一个动态框架 支持 iOS8 但我偶然发现以下编译错误 Undefined symbols for a
  • 动画导航控制器“后退”按钮

    我在导航控制器层次结构中的视图控制器上有一个自定义按钮 按下该按钮时 会弹出可见的视图控制器 我想使用 UIView 的transform属性来动画关闭视图控制器 它有效 但如果我使用 popViewControllerAnimated Y
  • iOS7 无法隐藏状态栏

    我刚刚将我的 iPhone 5 iOS 7 升级到了四个测试版 现在 当我在这台 iPhone 上通过 Xcode 5 运行我的应用程序时 状态栏不会隐藏 尽管它应该隐藏 不工作 UIApplication sharedApplicatio
  • 在 Swift 中使用 Obj-C 完成块

    在 Objective C 中 我有一个完成块类定义为 File h typedef void MYCompletionBlock BOOL success NSDictionary result NSError error 然后 在 Sw
  • 如何更改焦点/按下时图像按钮的色调

    我有一个ImageButton在我的应用程序中 当按钮打开时我需要更改图像的色调pressed focused 我有ImageButton设置为获取其src来自 XML 文件 如下所示
  • iOS 中的视频可以进行反卷积吗?

    我想拍摄击球手挥动棒球的镜头 但球棒很模糊 视频为 30 fps 通过研究 我发现反卷积似乎是最小化运动模糊的方法 但我不知道是否或如何在我的 iOS 应用程序后处理中实现它 我希望有人能给我指出正确的方向 比如如何在 iOS 中应用反卷积
  • 如何声明仅调试语句

    在 C 中 我可以使用以下代码来获得仅在调试构建期间执行的代码 我如何在 Xcode 中执行相同的操作 if DEBUG etc etc endif 您可以使用 ifdef DEBUG endif 你需要添加DEBUG 1到调试配置设置中项

随机推荐

  • 获取最近创建的 Pod 的名称

    在OpenShift中 是否有一种更优雅的方式来获取应用程序中最近创建的pod的名称my app比这个 name oc get pods l app my app o jsonpath range items status startTim
  • 是否有在 Spring 上下文 XML 文件中创建字符串常量的简写?

    我需要在 Spring 上下文 XML 文件中定义一个由多个 bean 共享的字符串值 我就是这样做的
  • 在数据注释的ErrorMessage属性中使用html

    任何人都知道是否可以执行以下操作 public class User public Guid UserID get set Required ErrorMessage A school selection is required Range
  • HTTP 状态代码 411 - 需要长度

    我尝试从服务器获取数据 我使用 NSURLConnectionDelegate NSURLConnectionDataDelegate 有代码 目标 C void sendRequest NSURL url NSURL alloc init
  • 如何获得 Mac 操作系统上的峰值内存?

    在 Windows 中 我可以通过调用 GetProcessMemoryInfo 获取峰值内存使用情况 function TProcess Peek Cardinal var PMC PPROCESS MEMORY COUNTERS PMC
  • 如何转义 NSString 以在 NSURL 中使用? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 到目前为止我的发送按钮得到了这个代码
  • 何时使用 ko.utils.unwrapObservable?

    我使用 KnockoutJS 编写了一些自定义绑定 我仍然不确定何时使用ko utils unwrapObservable item 查看代码 该调用基本上检查是否item是一个可观察的 如果是 则返回value 如果不是 则返回value
  • 如何从asp.net中的复选框列表控件返回选定的项目

    我试图以字符串形式返回动态绑定的复选框列表控件中选定的项目 但没有成功 我希望有人能提供帮助 在我的代码隐藏文件中 我连接到一个名为 users 的类并构建一个数据表 然后我将数据表绑定到 cblist 控件 private void po
  • Bootstrap 模式:背景在切换时跳到顶部

    我有一个模态问题 我在页面上有一个按钮 可以切换模式 当模式出现时 页面跳转到顶部 我已尽一切努力寻找解决方案 等等 但我真的迷失了 EDIT 我也尝试过 myModal modal show 但它具有完全相同的效果 当模态打开时modal
  • 没有找到处理意图的活动?

    我正在编写一个程序 当特定的短信到达手机时 应调用应用程序中的主要活动 我已经注册了一个BroadcastReceiver调用该活动的意图是onReceive 方法 问题是 每次我发送这条特定的短信时 我都会收到强制关闭消息 阅读 logc
  • C# - 我应该使用什么,接口、抽象类还是两者?

    因此 假设我正在用 C 构建某种房地产应用程序 对于每种类型的财产 我将创建一个类 例如 ResidentialProperty 和 CommercialProperty 这两个类以及所有其他属性类将共享一些公共属性 例如 Id 标题 描述
  • import jwt 导入错误:没有名为 jwt 的模块

    我一直在尝试运行这个项目https github com udacity FSND Deploy Flask App to Kubernetes Using EKS https github com udacity FSND Deploy
  • 在 C++ 中获取所有打开的窗口的列表并存储它们

    我目前正在尝试获取所有打开的窗口的列表并将它们存储在向量中 我一直在查看代码 以至于解决方案可能非常简单 但如果没有全局变量 我想避免 我似乎无法完成它 这是代码 include stdafx h include json h includ
  • 按月和日分组的事件直方图

    我正在尝试根据多年但按月和日分组的一组数据制作每个事件发生次数的直方图 或其他图 基本上 我想要从 3 月 1 日开始的一年长的 x 轴 显示每个日期出现的次数 并根据分类值对这些日期进行着色 以下是数据集中前 20 名的条目 goose
  • ValueError:参数 scipy rv_continuous 中的域错误

    我试图使用 scipy stats rv continuous 对给定概率密度函数 pdf 的随机变量进行采样 class Distribution stats rv continuous def pdf self x a c return
  • 在 Stata 的 do-file 中将命令分成几行

    我想运行keepStata 12 中 do 文件中的命令 keep a1 a2 a3 a4 a5 b1 b2 b3 b4 b5 c1 c2 c3 c4 我想要的是执行以下操作 keep a1 a2 a3 a4 a5 b1 b2 b3 b4
  • C++ 和 OpenCV:白色像素聚类算法

    我有一个二值图像 黑色和白色像素 我想根据彼此之间的距离将白色像素聚类成组 对象 并检索每个聚类的质心 这是我必须处理的示例图像 框架为紫色 我想检查聚类方法是否可以提供我正在寻找的结果 这意味着我试图避免在知道它值得之前自己实现算法 Op
  • 带有我的应用程序图标的安全中心符号盾

    我开发了一个需要管理员权限才能执行的应用程序 在 Windows 7 上运行应用程序 用户始终必须以 以管理员身份运行 启动应用程序 否则我的应用程序会提示用户 您没有管理权限等 这是可以理解的 因为 Windows 7 中有 UAC 要摆
  • 设置模拟位置时 GPS 提供商未知错误?

    我正在尝试设置我的模拟位置 但是 我收到以下错误 提供商 gps 未知 并且不确定出了什么问题 我已经获得了在manifest xml 中声明的所有权限以及所有参数 模拟定位法 Initiates the method to set the
  • 翻转 OpenGL 纹理

    当我正常从图像加载纹理时 由于 OpenGL 的坐标系统 它们是颠倒的 翻转它们的最佳方法是什么 glScalef 1 0f 1 0f 1 0f 反向映射纹理的 y 坐标 手动垂直翻转图像文件 在 Photoshop 中 加载后以编程方式翻