タグ付けされた質問 「vbo」

頂点バッファーオブジェクト(VBO)は、非イミディエイトモードレンダリングのためにビデオデバイスにデータをアップロードするメソッドを提供するOpenGL機能です。

3
チームはソースファイルの上書きをどのように防止しますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 4年前に閉鎖されました。 たとえば、ゲームエンジンなどが複数の人によって同時に処理されているときに、上書きをどのように防ぐことができるのか、ということが起こりました。 開発者1が作業してAudio.cppおり、開発者2も作業をしているとしましょう。Audio.cppこれは、一般的に大規模なチームで上書きに対処するためにどのように管理されていますか?(つまり、開発者2がファイルを開くのを停止して、開発者1が終了するまで)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

3
OpenGL> = 3でVBOのみが許可されるのはなぜですか?
OpenGLバージョン3以降では、クライアント側レンダリングの使用が不要になりました。即時モードは廃止され、頂点配列は非推奨のようです。代わりに、私が正しく理解していれば、VBOは頂点をレンダリングする主な方法です。 すべてを均一にレンダリングする方法の背後にあるロジックを見ていますが、VBOには頂点配列に大きなマイナス面がないのですか?一般に、VBOは1 MBを超えるデータを含む大きなバッファーであると考えられていました。小さいジオメトリがたくさんあるシーンがある場合はどうなりますか?多数のノードを持つシーングラフがあり、各ノードには独自の変換などが必要です。各ノードは個別に削除したり、個別に追加したりすることもできます。以前は頂点配列を使用していました。したがって、最初の質問は、VBOに切り替えた場合、各オブジェクトにVBOを割り当てる必要があるため、シーングラフオブジェクトのオーバーヘッドが大きくなるかどうかです。 もう1つの懸念は、レンダリングするジオメトリが非常に動的になる可能性があることです。最悪の場合、すべてのジオメトリを一定期間フレームごとに再送する必要がある場合があります。この使用例では、VBOのパフォーマンスは頂点配列よりも劣りますか、それともVBOは頂点アレイと同じくらい機能しますが、それ以上は機能しませんか? したがって、より簡潔な形式で、私の質問は次のとおりです。 1)VBOの割り当て/割り当て解除にかなりのオーバーヘッドがありますか(つまり、バッファーをセットアップするだけの行為です)。 2)フレームごとにCPUからデータを更新する場合、これは頂点配列を使用した場合よりも大幅に悪化する可能性がありますか? そして最後に、私は知りたい: 3)上記の質問のいずれかに対する答えが「はい」の場合、なぜVBOよりも有利なレンダリングの他のモードを非推奨にするのですか?これらの潜在的な割り当てコストなどを軽減するために使用するはずのテクニックなど、ここに欠けているものはありますか? 4)これらの質問への回答は、使用しているOpenGLバージョンによって大幅に変わりますか?パフォーマンスの高い方法でVBOを使用してコードをOpenGL 3または4の上位互換にリファクタリングすると、同じ手法がOpenGL 2でうまく機能する可能性が高いか、特定の手法がOpenGL 3ではるかに高速になる可能性があります+およびOpenGL 2を使用する他のユーザー スタックオーバーフローについてこの質問をしましたが、このサイトが私の質問に適している可能性があることに気付いたので、ここに再投稿しています。

2
OpenGL:VBOまたはglBegin()+ glEnd()?
私は最近、オリジナルのOGLレッドブックを渡した人からチュートリアルサイトへのこのリンクを与えられました。3番目のヘッダーは、典型的なレンダリングメソッドとしてglBegin()とglEnd()を忘れるようにはっきりと述べています。Redbookの方法で学びましたが、VBOにはいくつかの利点があります。これは本当に進むべき方法ですか?その場合、レンダーコードと後続のシェーダーをVBOと後続のデータ型に簡単に変換する方法はありますか?
16 opengl  graphics  glsl  vbo 

2
どのOpenGLバージョンを学習または使用しますか?
だから、私はOpenGLが初めてです...ゲームプログラミングの一般的な知識はありますが、実際的な経験はほとんどありません。 私はさまざまな記事や本を調べてOpenGLに飛び込もうとしましたが、さまざまなバージョンと、物事を混乱させる古い方法と新しい方法を見つけました。 私の最初の質問は、OpenGLの各バージョンを実行できるゲーマーの割合に関する数値を誰でも知っているかどうかです。市場シェアはどのようなものですか?2.x、3.x、4.x ... Half Life 2の要件を調べたのは、ValveがMacで実行するためにOpenGLで更新したことを知っているためです。NvidiaのWebサイトで8800 GTを見て、OpenGL 2.1のサポートをリストしました。4.xがすでにあるので、これはおそらく間違っているかもしれません。8800GTのドライバーを検索したところ、4.2をサポートしていると書かれています!少し矛盾があります、笑。 また、XPが特定のバージョンまでしかサポートしていない、OS Xが3.2のみ、またはその他のすべての種類をサポートしているなどの記事も読みました。全体として、さまざまなバージョンに対するサポートの量と、学習/使用するバージョンについて混乱しています。 学習リソースも探しています。これまでの私の検索結果は、OpenGL SuperBibleを示しています。第4版はAmazonで素晴らしいレビューがありますが、2.1を教えています。第5版は3.3を教えていますが、第4版の方が優れていること、第5版が新しい機能などを適切に教えていないことを言及しているレビューがいくつかありますか?基本的に、学習教材内でも矛盾が見られ、どこから始めればよいかさえわかりません。 私が理解していることから、3.xはまったく新しい方法を開始し、「glBegin()、glEnd()などの非推奨の機能から遠ざけたい」というさまざまな記事やレビューを読んでいますが、私が見たチュートリアルでは、この方法を使用しています。基本的に、新しいやり方はもっと複雑であるが、古いやり方は悪いと言っている人々を見てきました>。> 個人的には、前もって学ぶべきことがたくさんあることは知っていますが、テッセレーションに興味があります。私はそれが4.xにしかないと理解している限り、 [ところで、私のデスクトップは4.2をサポートしています]

2
OpenGL:VBOを指定せずにVAOを使用できますか
VAO(頂点配列オブジェクト)に関するすべてのチュートリアルで、頂点属性を構成し、VBO(頂点バッファーオブジェクト)をバインドすることにより、VAOの使用方法を示しています。しかし、各バッファーが同じデータパターン(頂点、uv、色など)を使用する固定シェーダーと組み合わせて、VBOのセット用に構成されるVAOを作成します。したがって、1つのシェーダーを使用して描画される複数のVBOに対して1つのVAOを作成します。 これに関するデモが見つからなかったため、試してみることにしました。しかし、それは機能せず、glDrawArray呼び出し時にクラッシュします。VBOがバインドされていないようです。私が使用しているコードは次のとおりです。 レンダリング: /* Prepare vertex attributes */ glBindVertexArrayOES(vao); /* Upload the buffer to the GPU */ glBindBuffer(GL_ARRAY_BUFFER, pool->next()); glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer()); /* Draw the triangles */ glDrawArrays(GL_TRIANGLES, 0, parts * 6); glBindVertexArrayOES(0); VAO作成: glBindVertexArrayOES(vao); glEnableVertexAttribArray(ls.position); glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0); glEnableVertexAttribArray(ls.color); glVertexAttribPointer(ls.color, 3, …
12 opengl  vbo  vao 

1
マルチスレッドOpenGLアプリケーションを使用してVBOを更新し、それらを同時に使用する方法
簡単なアプリケーションがあります。2つのスレッドがあり、それぞれに独自のレンダリングコンテキストがありますが、1つのVBOを共有しています(これは機能しており、テストしました)。 ここで私が欲しいのは、1つのスレッドがVBOの前半から一部のデータをレンダリングし、2番目のスレッドがVBOの2番目の部分を更新していることです。 VBOを更新しない場合、問題なく動作しています。 しかし、更新時に奇妙な問題がいくつかあります。glMapBuffer(2番目のスレッドで)VBOを更新するために使用すると、ほとんどの場合、最初のスレッドでは何もレンダリングされませんglClear。画面全体が(呼び出し後)クリアになります。VBOからのデータにアクセスできないようです(これは理解できます。これは、バッファー全体がマップされており、何らかの方法でロックできるためです)。 をglMapBufferRange使ってみましたGL_MAP_UNSYNCHRONIZED_BIT。これは、「あなたが望むようにVBOを待たずに使用しないでください。私(プログラム)が自分で同期するからです」を意味します。また、VBOの範囲をマップして別の部分からデータをレンダリングするとき、それは待っているべきではありませんが、私と同じ問題が発生していますglMapBuffer。 誰かがこれを修正するのを手伝ったり、なぜそれが起こるのか説明したりできますか?


2
2Dゲームと最新のOpenGL
事前概念 わかりました、それで私がこれまでに集めたのはこれです: 固定パイプラインを使用しない(非推奨または非推奨) vbosは「オブジェクトモデル」を格納します(n頂点データ、ほとんど) vaosは、データがどのように配置されるかを記述し、描画呼び出しが各vboのどの部分がどの種類の頂点情報に対応するかを認識します(1つのvaoは複数のvboを参照でき、その逆は少し難しい) 各描画呼び出しは、シェーダーに頂点データも送信します 3Dの見方(オプション) これらの情報があれば、3Dの複雑なオブジェクトの描画が最新のOpenGLで非常に優れていることがわかります。基本的に、(おそらくBlenderまたは他の同様のソフトウェアからの)オブジェクトモデルの束をローカル座標を持つVBOにロードし、次に、オブジェクトの各インスタンスに異なるシェーダーパラメーター(オフセット)を指定して、ワールドスペースに描画します。 問題/質問 ただし、2Dでは問題と優先順位はまったく異なります。それほど複雑なオブジェクトを描画する必要はありません。複雑な投影行列は必要ありません。シェーダーははるかに単純です。 最新のOpenGLで頻繁に(実際には頻繁に、基本的にすべてのフレームで)変化するジオメトリを描画するための最良の方法は何でしょうか? 次の段落では、問題のいくつかの考え(円と四角形の問題)を見ることができます。これにより、興味のある変更の種類をより明確に識別できます。 私の試み(オプション) そこで、基本的な2Dジオメトリを画面に描画する方法を考え始めました。 正方形:[(1, 0), (1, 1), (0, 1), (0, 0)]ローカル空間で正方形のジオメトリのVBOを読み込み、シェーダーに正方形の実際の幅と世界座標および色情報を提供します 涼しく、簡単に見えます。円に移動しましょう: 円:三角ファン...ええ。どのくらいの精度(頂点の数)?小さな円の精度は小さく、バグの円の精度は高くなければなりません。明らかに1 VBOをロードしても、すべてのケースに対応できるわけではありません。円のサイズが大きくなるために精度を上げる必要がある場合はどうなりますか? かっこいい。少し簡単な長方形に移動しましょう。 長方形:ええ。「一般的な長方形のジオメトリ」はありません。幅と高さの比率があればそれだけですが、サイズが変化すると、各長方形はおそらく異なります。 ご覧のとおり、物事はそこから下り坂になります。特に複雑なポリゴンなどではそうです。 コードポリシーなし:P アイデアの概要が必要なだけで、コードは必要ありません。特にCまたはC ++コードは必要ありません。「この頂点データでVBOを作成し、それをバインドする...」のように言ってください。
10 opengl  2d  vbo  vao 

2
Unity3dを介して新しいc#スクリプトを追加するときにVS soution Explorerを強制的に再読み込みしますか?
私はC#スクリプトを作成する(ときCreate -> C# Script)を介しUnity3d やからそれを削除Unity3d- Visual Studioショー私の警告ウィンドウ。 気に障る。 ウィンドウなしでソリューションエクスプローラーで「ReloadAll」を強制する方法はありますか?
8 unity  visual-studio  unity  google-play-services  google-play  physics  simulations  c#  unity  raycasting  unity  virtual-reality  savegame  arcade  c++  steam  ios  objective-c  databases  storage  opengl  vbo  vao  libgdx  scene2d  unity  animation  c#  path-finding  roguelikes  opengl  c++  glsl  2d  physics  phaser  selection  3dsmax  unity  collision-detection  c#  tilemap  isometric  unity  c#  2d  sprites  mouse  scripting  grid  c#  unity  libgdx  java  unity  playstation4  c#  c++  directx  dll  c++cli  libgdx  overlap2d  multiplayer  node.js  websocket  animation  unity  textures  unity  terrain  physics  unity  rotation  movement  transformation  monogame  windows  installer  shaders  unity  virtual-reality  unity  performance  frame-rate  profiler  google-play  appstore  trademark  java  android  libgdx  unity  unity-networking  unity  physics  software-engineering  unity  savegame  physics  2d  unity  unity  c#  unity-networking  textures  geometry  unreal-4  3d-modeling  java  android  libgdx  android  collision-detection  libgdx  rotation  legal  localization  patents  opengl  cubemap  sampler-state  2d  transformation  unity  c#  opengl  glsl  lighting  opentk  c++  collision-detection  physics 

4
インデックス描画は非インデックス描画よりも高速です
6つの頂点(2つの三角形)からなる多数のポリゴンを描画する必要があります。 テクスチャ座標、法線などがない場合、どちらのアプローチでも72バイトになります。将来的には、テクスチャ座標と法線も間違いなく必要になります。これにより、インデックスの描画で消費されるメモリが少なくなります。それほど多くはありません。 だから私の質問は:頂点の重なりが少ないVAOの場合、どちらのアプローチがより速いですか?インデックス以外の描画で消費される余分なメモリは気にせず、速度のみを気にします。 編集:明確にするために。 非索引アプローチ: float[18] vertices = { //Triangle 1 1,1,0, 1,0,0, 0,0,0, //Triangle 2 1,0,0, 0,1,0, 0,0,0, }; インデックスアプローチ: float[12] vertices = { 1,1,0, 1,0,0, 0,0,0, 0,1,0, }; int[6] indices = { //Triangle 1 0,1,2, //Triangle 2 0,3,2 };
8 opengl  rendering  vbo  vao 

2
頂点バッファスチーミングの場合、複数のglBufferSubData VS Orphaning?
私は最近OpenGLを学んでいました。ゲームでは、ゲームオブジェクトの位置を頻繁に更新する必要があり、それらは常に画面に出入りします。そのため、レンダリングでは、頂点バッファーも頻繁に更新する必要があります。 OpenGLのコンテキストでは、1つの直感的な方法は、glBufferSubDataを使用して変更されたものを更新することです。 しかし、私はまた、新しいバッファデータを作成して頂点データ全体をそれにアップロードするOrphaningと呼ばれるトリックをオンラインで読んでいます。 また、州の費用とアップロードの費用により、複数のglBufferSubDataの費用も高くなる可能性があります。 これが私の質問です、 どちらの方法が良いですか? この場合、屋台は本当に重要ですか? この場合、状態の変更とアップロードのコストは本当に重要ですか? ありがとう!

1
非即時OpenGLではアニメーションはどのように処理されますか?
私は現代のOpenGLの初心者です。私は当面のOpenGL方法論に慣れていますが、VBOを真剣に使用したことはありません。私の質問はアニメーションについてです。即時モードでは、アニメーションを実現するには、オブジェクト空間で(キーフレームから補間された)異なる頂点位置をストリーミングする必要があります。 非イミディエートOpenGLでこれをどのように実現しますか?当然のことながら、フレームごとに新しいVBOデータをアップロードすると、グラフィックバスが占有されます。私はそれを行うための現代的な方法についての文献を見つけていません。それについて考えて、私はいくつかのオプションに行きました: 属性: 3Dオフセットとしてのアニメーション。フレームごとに、異なる(可能な補間された)オフセット属性が各頂点に渡され、各キーフレームの同じ頂点に適用されます。 インデックス:キーフレームを絶対的な頂点として格納し、キーフレームごとに異なる頂点のセットを使用して、インデックスを介してそれらにアクセスします。隣接するキーフレームにアクセスできないため、キーフレーム間を補間できないため、このアプローチは不可能です。また、手続き型アニメーションでは悪い考えのようです。 テクスチャ:これは非常に伸縮性があるかもしれませんが、私にとっては良い解決策のように聞こえます。この場合も、アニメーションは各頂点のxyzオフセットと見なされます。各キーフレームは、次元が頂点IDにマップされる1Dテクスチャに保存できます。私が間違っていない場合、OpenGL 4.0では、任意のシェーダーからテクスチャにアクセスできるため、このテクスチャを頂点シェーダーから読み取って、各頂点変換を適用できます。2Dテクスチャは複数のフレームを保持できます。引き続き補間を実行します(そして、補間がフラグメントシェーダーの外側のテクスチャに対して機能する場合、確信が持てませんが、線形補間を無料で行うことができます!)これは、骨のアニメーションなどのより複雑なアニメーションシステムにそれほど労力をかけずに適用できます。 私はこれを考えすぎていますか?誰かが光を当てることはできますか?
8 opengl  animation  vbo 

2
即時モードからVBOに切り替えるにはどうすればよいですか?
私はOpenGLを短期間使用していますが、VBOについて説明が必要です。私が理解しているように、VBOはVRAMに格納されたオブジェクトです。即時モードでは、テクスチャを適用するために、テクスチャをバインドし、頂点座標の前にテクスチャ座標を指定するだけですが、VBOではそのようには見えません。 質問1: VBOでテクスチャデータを指定できますか?データのどの部分ですか? 通常、2Dでゲームを作成するときは、すべてのオブジェクトを異なるクラスのインスタンスに格納し、描画ルーチンが起動したら、画面上にあるオブジェクトを描画します。3D環境では、画面上にオブジェクトを描画するだけでは少し難しくなりますが、いくつかの数学ではそれが可能であると確信しています。 質問2:どのオブジェクトをレンダリングする必要があるかがわかったら、それらの対応するオブジェクトに「適用」リクエストを送信し、それらを自分自身に適用させるのは許容できるほど速くなりますか?それとももっと良い方法がありますか? 質問3:完全に動的なマップがあり、オブジェクトがそれほど頻繁に変更されない場合、とのパフォーマンスの違いに関するガイドラインは GL_STATIC_DRAWありGL_DYNAMIC_DRAWますか? 最後の質問:頂点リストの使用を検討すべきですか?または、VBOはより良いオプションですか?
7 opengl  c++  vbo 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.