问题标签 [nsopenglview]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
5887 浏览

cocoa - NSTextField 在 NSOpenGLView

我制作了一个带有 NSOpenGLView 的窗口,我正在将 openGL 内容渲染到该窗口中。

我想在视图中添加一些按钮和文本字段:我可以使用界面生成器(或代码)添加 NSTextFields 和 NSButtons,但它们不会出现。

NSOpenGLView 被记录为无法拥有子视图,因此我通过直接从 NSView 派生并实现代码以在其中创建和使用 NSOpenGLContext 来制作自己的 CustomGLView。但是子视图仍然没有出现:- OpenGL 上下文在它们上面绘制。

在 Windows 上不存在这个问题:- 用于承载 OpenGL 的 Windows 必须设置WS_CLIPCHILDRENWS_CHIPSIBLINGS样式,以确保任何对等点或子子项(视图)不会被 OpenGL 表面遮挡。

如何让子视图显示在使用 OpenGL 绘制的 NSView 上?

0 投票
1 回答
1741 浏览

cocoa - OpenGL像素格式属性(NSOpenGLPixelFormatAttibutes)解释?

我不是 OpenGL 的新手,但不是专家。许多教程教如何绘制、3D、2D、投影、正交等,但是如何设置视图呢?(可可,Mac 中的 NSOpenGLView)。

例如我有这个:

而且我不太了解它们的用法,特别是在组合它们时。

例如:

如果我希望我的视图能够全屏显示,我应该只写 NSOpenGLPFAFullScreen 吗?或两者?(有能力我的意思是不总是全屏)

关于双缓冲,这到底是什么?(下:苹果的定义)

如果存在,此属性指示仅考虑双缓冲像素格式。否则,仅考虑单缓冲像素格式

关于颜色:如果 NSOpenGLPFAColorSize 是 24 并且 NSOpenGLPFAColorSize 是 8 那么这意味着 alpha 和 RGB 组件的处理方式不同吗?如果我将前者设置为 32,将后者设置为 0,会发生什么?

等等,一般来说,我如何学习从头开始设置我的视图?

提前致谢。

伊格纳西奥。

0 投票
1 回答
1101 浏览

cocoa - 使用 ImageKit 和 CGI​​mageDestination 将 NSOpenGLView 像素数据导出为某些图像文件格式时出现问题

摘要:将像素数据从 NSOpenGLView 导出到某些文件格式会导致颜色不正确

我正在开发一个应用程序来可视化一些实验数据。它的功能之一是在NSOpenGLView子类中呈现数据,并允许将生成的图像导出到文件或复制到剪贴板。

视图将数据导出为NSImage,生成如下:

复制使用此图像非常简单,如下所示:

对于文件写入,我使用 ImageKitIKSaveOptions附件面板设置输出文件类型和相关选项,然后使用以下代码进行写入:

(我在这里修剪了一些无关的代码,但据我所知,没有什么会影响结果。newUTType来自IKSaveOptions面板。)

当文件导出为 GIF、JPEG、PNG、PSD 或 TIFF 时,此方法可以正常工作,但导出为 PDF、BMP、TGA、ICNS 和 JPEG-2000 会在部分图像上产生红色伪影。示例图像如下,第一个导出为 JPG,第二个导出为 PDF。

图像导出为 JPEG,颜色正确
(来源:walkytalky.net

图像导出为 PDF,移液器上有红色条带
(来源:walkytalky.net

复制到剪贴板在 的当前实现中没有出现这个红色条纹image,但原始实现中出现了,它生成了imageRepusingNSCalibratedRGBColorSpace而不是NSDeviceRGBColorSpace. 所以我猜我从 OpenGL 获得的像素中的颜色表示存在一些问题,无法正确通过后续转换,但我不知道该怎么做。

那么,谁能告诉我(i)是什么原因造成的,以及(ii)我怎样才能让它消失?我不太关心所有格式,但我真的希望至少 PDF 可以工作。

0 投票
1 回答
1663 浏览

cocoa - 确定 NSOpenGLView 是否具有有效的上下文(Cocoa OSX)

我正在尝试检查我的 NSOpenGLView 是否具有有效的上下文,但似乎对 openGLContext 的调用无法帮助我解决这个问题。openGLContext 似乎总是返回一个 NsOpenGlContext (如果视图有一个,它会返回当前上下文,如果没有,它会创建一个上下文并返回它)。我可以使用另一种方法吗?

0 投票
1 回答
294 浏览

objective-c - 调整大小时 NSWindow 标题栏变为白色

我正在以编程方式调整包含NSOpenGLView的NSWindow的大小。窗口调整大小, NSOpenGLView 正在处理调整大小,但 NSWindow 的标题栏变为完全白色。但是可以单击按钮(最小化,...),但您也看不到它们。

使用 Windows 控制器中的以下代码调整大小。该方法在主线程上调用。

可能是什么原因,标题栏变成白色并且不再绘制自己?你能告诉标题栏把自己画出来作为一种解决方法吗?

谢谢

0 投票
1 回答
822 浏览

cocoa - 无法与 OpenGL/Cocoa 共享纹理

我是一个 openGL 新手,我正在尝试让纹理共享在两个 openGL 视图之间工作。我创建了两个 NSOpenGL 视图类,然后在界面构建器中创建了一个窗口,每个窗口都有一个 openGL 视图。第一个视图在其 prepareOpenGl 中有代码,用于设置纹理并将其分配给全局变量,第二个视图将其 openGlContext 重新初始化为与创建纹理的原始视图共享的代码,然后在第二个视图我在全局纹理上调用 glBindTexture。当我运行我的应用程序时,我只在第一个视图上看到一个纹理,而第二个视图只显示一个无纹理的对象。看来我的纹理共享不起作用。我想知道我的总体策略是否有缺陷,或者我是否只是遗漏了一些细节。

当我提到“第二个视图”时,我的意思是试图使用原始视图的纹理。

0 投票
1 回答
723 浏览

objective-c - 异常 NSOpenGLView 设置的问题

我正在尝试以NSOpenGLView不寻常的方式设置子类,但遇到了一些问题。基本上,我正在编写一个程序来为我的博士学位执行生物工程模拟,我需要能够在 MacOSX 和 Unix 下编译它(我的机器是 Mac,但 sim 最终将在更强大的 Unix 机器上运行)。由于代码将在接下来的一年半内变得越来越长,我宁愿不必跟踪该程序的两个完全不同的版本。因此,我希望能够通过避免使用 ObjectiveC-2.0 并保持接口可选的方式在 Unix 下编译 ObjectiveC 代码(它主要用于在长时间模拟之前执行设置并在开发过程中监控短时间的事情)。

当前版本在没有接口的情况下运行良好 - 模拟正确执行,程序能够渲染 OpenGL 帧并将它们导出到图像和视频文件中,没有任何问题。因为我现在要在其上添加界面(现在只是一个带有 NSOpenGLView 子类和“开始”按钮的简单窗口)(这样我就可以在没有它的情况下使用 main() 的替代版本运行代码)我必须以一种奇怪的方式将OpenGL“连接”在一起,因为绘图代码不在drawRect函数中,甚至不在子类视图中的任何地方,而是在“基本”程序中。

到目前为止我所做的是:

  1. 主程序(使用名为“Lattice”的对象)执行所有模拟和渲染,正确地将图像和视频输出到文件中。这也包含NSOpenGLContextand 调用[renderContext flushBuffer];

  2. NSOpenGLView 的一个名为 PottsView 的子类包含一个 lattice 的实例,它与视图一起初始化,如下所示:

    /li>

drawRect()是空的。

  1. PottsController 是 InterfaceBuilder 中实例化的对象,它将开始按钮连接到视图。开始按钮只是告诉格子运行多个步骤。

现在,按下开始会导致模拟正确运行(即输​​出到文件和终端),但 PottsView 无法正常工作。它仍然是白色的,但是如果我 cmd+tab 部分更改为渲染帧的部分。如果我按 Expose (F3) 也是一样。

我尝试了几种冲洗,setNeedsDisplay等的组合,但坦率地说,我迷路了。在今年四月之前我没有做过任何编程,并且(据我所知)这是一种使用 NSOpenGLView 的完全向后的方式,我没有想法。我希望有人可以建议我如何使当前设置工作或如何完全重新连接程序(同时仍然保持界面可选)。

0 投票
3 回答
2387 浏览

objective-c - 我的 NSOpenGLView 不起作用。我已经尝试了一切

我想在 中显示一些东西NSOpenGLView,但由于它总共有零字节的文档,并且示例代码与文档一样大和复杂我无法从中获得任何明智。到目前为止,这是我的代码,我ANOpenGLView的代码NSOpenGLView在一个 NIB 中,子类为ANOpenGLView

我怎样才能让三角形出现?我唯一得到的是一个空白的白色屏幕。


PS我想画2D。


编辑我已经更新了我的代码,这就是我现在所拥有的: 截屏

0 投票
1 回答
877 浏览

cocoa - NSOpenGLView 子类中带有键盘事件的烦人的颠簸声音

我已经重写了 NSOpenGLView 来处理键盘事件。事件检测工作正常,但每次我按下一个键时,我都会听到恼人的碰撞声。我怎样才能让我的观点冷静下来?

这是我的 keyUp: 方法的样子:

0 投票
1 回答
609 浏览

cocoa - 创建 NSOpenGLView 时出错

我正在尝试使用 Cocoa API 创建一个 OpenGL 应用程序,现在一切正常,除了一件事。当主窗口调整大小时,GL 上下文似乎没有正确更新。

这是用于设置窗口和渲染上下文的代码。

主窗口:

m_window = [[NSWindow alloc] initWithContentRect:window_rect styleMask:( NSClosableWindowMask | NSMiniaturizableWindowMask | NSTitledWindowMask | NSResizableWindowMask ) backing:NSBackingStoreBuffered defer:YES];

OpenGL 视图:

NSOpenGLPixelFormatAttribute attrs[] = {NSOpenGLPFADoubleBuffer, NSOpenGLPFAWindow, NULL};

这应该可以工作,但是当调整窗口大小并更新 OpenGL 视图和视口后,后台缓冲区内容似乎没有正确调整大小。那有什么问题?

感谢您的回复。