問題タブ [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.
objective-c - フォーカスをNSTextFieldからNSOpenGLViewに変更しますか?
Interface Builderを使用して、MacでOpenGLシミュレーション用のインターフェイスを開発しています。すべてのOpenGLのものはC++で書かれています(私はかなりよく知っています)。残念ながら、Objective-Cについてはわかりません。
基本的に、画面で選択されたオブジェクトに関する情報を表示するNSTextFieldがいくつかあります。これらのテキストフィールドを使用すると、ユーザーは画面上のオブジェクトを操作でき、[保存]ボタンと[復元]ボタン(新しい値を保存するか、元の値を復元する)があります。
私はこれをすべて機能させています。私の問題は、NSTextFieldにデータを入力すると、ウィンドウの「フォーカス」がNSTextFieldに残っているように見えることです(青い境界線がその周りに残っています)。
キーボードを使用してNSOpenGLView内のアイテムを操作します。[保存]または[復元]ボタンを押したときに、フォーカスをNSOpenGLViewに戻す必要があります。
これが非常に簡単な質問である場合は申し訳ありません
ありがとう
デビッド
opengl - Mac OS で NSOpenGLView とフルスクリーン コンテキストの間でテクスチャを共有する方法は?
2D テクスチャを使用してアニメーションの万華鏡を作成するアプリに取り組んでいます。NSOpenGLView に表示することから始めます。フルスクリーンモードに切り替えるオプションを追加しています。
10.5 をサポートできるように OS 10.5 のアプローチをフルスクリーンに使用したいと思いますが、「Mac OS X v10 でフルスクリーン アプリケーションを作成する」の下のドキュメントで説明されているアプローチを使用していた場合、同じ問題に直面すると思います。 .6".
NSOpenGLContext の初期化メソッド initWithFormat:shareContext: は、「レシーバーと共有したいテクスチャ名前空間と表示リストを持つ別の OpenGL グラフィックス コンテキスト」へのオプションのポインタを受け取ります。
フルスクリーンの OpenGL コンテキストを作成するために使用しているコードは単純です。
しかし、うまくいかないようです。
私のアプリは 1 つのテクスチャしか使用しないため、glGenTextures と glBindTexture を使用しないことから始めました。代わりに、コンテキストに単一の現在のテクスチャを使用しました。
全画面コンテキストに切り替えた後に名前付きテクスチャをバインドできることを期待して、glGenTextures で名前付きテクスチャを作成するようにコードを変更しようとしましたが、ダイスはありませんでした。どちらのアプローチでも同じ結果が得られます。テクスチャはフルスクリーン コンテキストでは機能しません。
エラーは発生しませんが、テクスチャで描画しても何も起こりません。
フルスクリーン モードに切り替えるたびに、テクスチャを再作成する必要があります。テクスチャが非常に大きくなる可能性があるため (最大テクスチャ サイズまで、ユーザーがロードする画像の大きさによって異なります)、これは悪いことです。さらに悪いことに、バイト順を正しくするために、場合によってはバイトスウィズリングを行わなければなりません。大きなテクスチャでは数秒かかるため、フルスクリーン モードに入るときに「妊娠中の一時停止」が発生します。
NSOpenGLView とフルスクリーンの OpenGL コンテキストの間でテクスチャを共有するために私が見逃しているトリックはありますか?
cocoa - NSOpenGLView ココア (再び)
私は Cocoa/Objective-C の悪意全体に慣れていません (ただし、*nix で何年もの C/C++ を使用しています)。
NSOpenGLView で満たされた基本的な Cocoa アプリケーションを作成しようとしています。私は持っている:
隙間.mm
と chink.h
私は単一の.xibを次のように設定しています
https://skitch.com/cront/ri625/chinkxib
ここで、「chink View」は、ウィンドウとファイルの所有者の委任として設定されます。
「無効な描画可能」エラーが発生します (アプリケーションの起動が完了する前であっても)。これは、ウィンドウの前に opengl ビューをインスタンス化しようとしていることを意味します (おそらく間違っています)。
私が欲しいのは、ウィンドウを作成し、その中にopenglビューを設定するというこの問題の解決策です。これが完了したら、OGL を書くことにまったく問題はありません (前述したように、私は C++ を知っています) が、この NS コールはすべて私にとって異質です。
「SDL/GLUTでやってみませんか」という回答を求めているわけではありません。ウィンドウを適切に作成するためのコードだけです。
objective-c - OpenGL 深度テストの問題
Mac 上の OpenGL に問題があります。問題は深度テストにあると思います。
だから、私の問題について: 説明するのではなく、2 つのスクリーンショットを作成し ました。 .rackspacecloud.com/dd2267e27a561b5f02344dca57508dddce21d2315f.jpg
緑の床を描かないと、すべてが(ちょっと)うまく見えます。しかし、それでも、このように見えるのは恐ろしいことです。
Opengl のセットアップに使用する 3 つのコードブロックを次に示します。
opengl-es - Mac での OpenGL ES の使用
OS X 開発に OpenGL ES を使用することは可能であり、それほど複雑ではありませんか。私は Mac アプリケーションを作成して 3 年になりますが、OpenGL について学び始める準備ができていますが、OpenGL ES を使用したいと考えています。なぜなら、Xcode と Objective-C での使用に関する多くの情報と、いくつかのコード サンプルから得られる情報があるからです。完全な OpenGL よりも学習しやすいようです。ありがとう!
cocoa - -setWantsLayer は NSOpenGLView に歪みを引き起こします
これが私の NSOpenGLView でやりたいことです。現在、NSOpenGLView はウィンドウの全領域をカバーしており、NSOpenGLView の上にボタン、nsview、および画像を追加したいと考えています。Web を調べたところ、次の[myOpenGLView setWantsLayer:YES];
ようなことができることがわかりました[myOpenGLView addSubView:someView]
。
これは私が結果として得るものです:
(Family Guy を見ていたため、やや悪い例ですが、ここでビデオ メモリ バッファーが傍受されているという事実を証明しています)
ご覧のとおり、一部のビデオ メモリ バッファがウィンドウ上で歪んでいます。今、私はいくつかのデバッグを行っていましたが、問題は-setWantsLayer
. コードでその行をコメントアウトすると、すべての OpenGL が正しく表示されます。
これは私が得るべきものです:
私の質問は、どうすれば OpenGL ビューを正しく表示でき-addSubViews
ますか?
Apple には、「LayerBackedOpenGLView」( http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html ) と呼ばれるこの作業の非常に優れたサンプル プロジェクトがあり、私はそれをしばらく見てきました。今は良い時間で、私はそれで何が違うのかわかりません。私が気づいたことの 1 つは、NSOpenGLView を使用する代わりに、Apple が NSView を使用してクラスを NSOpenGLView をサブクラス化するカスタム クラスに変更しているのに対し、私は NSOpenGLView を使用してクラスを NSOpenGLView をサブクラス化するカスタム クラスに変更していることです。それが問題を引き起こすかどうかはわかりませんが、NSView に変更しても同じ問題が発生します。
interface-builder - OpenGL 3.2 コアを使用した NSOpenGLView
この質問が些細なことやナンセンスである場合は、事前にお詫び申し上げます...これは私が開発している最初のアプリの 1 つです。(残念ながら) 私は開発者ではありません。
のサブクラスであるカスタム ビューを含む NSWindow がありますNSOpenGLView
。
NSWindow
と はNSOpenGLView
Interface Builder で作成されるため、どちらも必要ありinit
ませNSOpenGLContext
んNSOpenGLPixelFormat
。
最近 OS X Lion に切り替えたので、新しい OpenGL 3.2 を活用したいと考えています。
Appleのドキュメントから、OpenGL 3.2を有効にするには、次のように書くだけでよいことがわかりました。
を初期化する前にNSOpenGLContext
.
これは(私にとっても)非常に簡単ですが、アプリにこれを実装するにはどうすればよいinit
NSOpenGLContext
ですか?
NSOpenGLView
は Interface Builder から作成されるため、メソッドは-initWithFormat:shareContext:
呼び出されません。
-initWithCoder:
したがって、私は次のような方法でメソッドをオーバーライドしようとしました:
OpenGL 3.2 は、によって報告されたように正しく読み込まれますglGetString(GL_VERSION)
が、作成されたコンテキストはアプリと対話しなくなりました...ビューには何も描画されません..
知っていることはすべて試しました...しかし、これを解決できません。
代わりにどうすればいいですか?
core-animation - レイヤーに裏打ちされたOpenGLViewは、ウィンドウのサイズが変更された場合にのみ再描画されます
タイプのメインビューと、名前が。NSView
のサブクラスであるサブビューを含むウィンドウがあります。のサブクラスは、Interface Builderで、そのクラスをに設定することで取得されます。これは、Appleサンプルコードレイヤーに裏打ちされたOpenGLViewに従って作成されています。NSOpenGLView
CustomOpenGLView
NSOpenGLView
Custom View
CustomOpenGLView
このアプリは、たとえば0.05秒ごとにOpenGLContextに何かを描画するように作成されています。Core Animation Layerを無効にすると、ビュー内で移動するオブジェクトを見ることができます。これは、ビューを継続的に再描画した結果です。そして、すべてが完璧に機能します。
CustomOpenGLView
再生/停止/eccなどのコントロールボタンを配置するために、上に半透明のビューを表示したいと思います。
これを行うために、にサブビューを追加し、でCoreAnimationLayerをCustomOpenGLView
有効にしましたCustomOpenGLView
。コントロールボタンは、この新しいサブビューに配置されます。
このようにして、コントロールボタンのあるビューが上に正しく表示されますCustomOpenGLView
が、ビューは再描画されません。これらすべてのビューを含むウィンドウのサイズを変更した場合にのみ描画されます。
その結果、「アニメーション」は表示されません...描画ループの開始時に描画される最初のフレームを表す静止画像のみが表示されます。ウィンドウのサイズを変更すると、ウィンドウのサイズ変更を停止するまで、openGLContextが再描画されます。その後、サイズ変更中に最後の描画が行われた静止画像が再び表示されます。
さらに、描画ループが開始すると、最初の「フレーム」のみが画面に表示されます。たとえば、5秒後にウィンドウのサイズを変更すると、開始から5秒後に描画されるべきものが正確にビューに表示されます。描画ループ。設定する必要があるようです[glView setNeedsDisplay:TRUE]
。私はそれをしましたが、何も変わっていません。
間違いはどこにありますか?Core Animation Layerを追加すると再描画が失敗するのはなぜですか?それは私が得ていない何かを意味しますか?
cocoa - Cocoa OpengGL: テクスチャを描画して角を丸くする
NSWindow
すべてのウィンドウ フレームに拡張する をホストするために標準を使用するとNSOpenGLView
、ウィンドウの 2 つの下隅が自動的に丸められます。
切り替えるときNSBorderlessWindowMask
は、コーナーの丸みを自分で処理する必要があります。透明なカスタムNSWindow
と丸みを帯びたカスタムを既に実装してNSView
おり、どちらも正常に機能します。その後、 0NSOpenGLContext
に設定NSOpenGLCPSurfaceOpacity
して透明を実装しました。OpenGL コンテキストに色付きの背景を設定すると、ビューが正しく描画され、目的の丸みを帯びたコーナーが得られます。
ただし、このアプリはムービー プレーヤーなので、ムービー フレームごとにテクスチャを描画する必要があります。
これを ( と を使用glTexCoord2f
してglVertex2f
) 行うと、テクスチャが角まで描画されるため、丸みを帯びた角の外側まで画像が描画され、ウィンドウの丸みが失われます。
ウィンドウが標準的で、再現できないと思われる場合 、システムは何をしますか?NSBorderlessWindowMask
テクスチャをフレーム バッファに描画する際に、テクスチャの角を丸くする最良の方法は何ですか?