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

OpenGLは、デスクトップおよびワークステーション市場を対象とするグラフィック標準およびAPIです。専用のコンピューターハードウェアで簡単に加速できるように設計されているため、ほとんどの実装では、従来のソフトウェアレンダリングよりもパフォーマンスが大幅に向上しています。現在、OpenGLはCADソフトウェアやコンピューターゲームなどのアプリケーションに使用されています。また、クロスプラットフォームです。OpenGL標準は、OpenGL ESも制御するKhronosグループによって制御されています。

6
標準ビューボリュームの目的は何ですか?
私は現在OpenGLを学んでいますが、この質問に対する答えを見つけることができませんでした。 投影行列がビュースペースに適用された後、すべてのポイントが範囲[-1、1]内に収まるように、ビュースペースが「正規化」されます。これは一般に、「標準ビューボリューム」または「正規化デバイス座標」と呼ばれます。 私はこれがどのように起こるかを教えてくれる多くのリソースを見つけましたが、なぜ起こるのかについては何も見ていません。 このステップの目的は何ですか?

1
使用しているビデオカードメモリの量を確認するにはどうすればよいですか?
実行時にプログラムで使用されているビデオカードメモリの量をプログラムで判断したい。具体的には、OpenGLを使用してWindowsマシンでそれを行う方法について疑問に思っていますが、他のプラットフォームでも同様に行う方法に興味があります。 プログラムの実行中にメモリ使用量を表示するユーティリティがあることは知っていますが、コードからその情報を照会できるようにしたいと考えています。
15 opengl  c++  windows  c 

1
複数のダウンサンプリングには利点がありますか?
だから私はこのサイトに出くわし、最初と2番目の段落でこれらの行を見ることができます: 粗雑だが簡単な効果を得るには、シーンの明るい部分(光源など)をFBOに描画し、GL_LINEARミニファイを数回使用してダウンサンプリングします。最終レンダリングでは、元のシーンとダウンサンプリングされたFBOを単純に組み合わせます。 次の例では、元のシーンは128 x 128であり、3回ダウンサンプリングされます。これには4つのフレームバッファオブジェクトが必要です。元のシーンが左上に表示され、最終レンダリングが右上に表示されます。 1回ダウンサンプリングする(128-> 16)のではなく、複数回ダウンサンプリングする必要がある理由はありますか(128-> 64-> 32-> 16)? さらに下にスクロールすると、9回ほどダウンサンプリングされます。(128-> ...-> 16-> 128-> ...-> 16->など)。(128-> 16-> 128-> 16->など)のようにしないのはなぜですか?
14 opengl  graphics  bloom 

4
球状の惑星とその領域を読み込む方法は?
私は、部分的に惑星探査で構成されるゲームを設計しています。疑似ランダム生成を使用して、すべての詳細を保存するのではなく、ロードする必要があるときに定義済みのシードから再生成します。これは重すぎます。そのため、プレイヤーが行ったランダムシードと変更をファイルに保存します。 プレイヤーは、軌道から惑星を見ることができる必要があります(非常に低いレベルの詳細で、その後地面に降り、着陸している地域の詳細レベルをゆっくりと上げ、反対側にあるものを降ろします)プレイヤーの視界の外に出る惑星の 平面の地面でそれをしなければならなかった場合、正方形のチャンクシステムで簡単にできます。しかし、ここでの問題は、惑星が-ほとんど-球体であるということです。 それでは、正確なポイントの周りに地面の詳細(レリーフおよび接地されたオブジェクト)をロードする最良の方法は何でしょうか? 私はすでに2つの解決策に取り組んでいますが、どちらにも弱点があります: 1.球体を正方形の塊に切断します。 プレーヤーが地面に十分に近づいたら、彼/彼女の位置から最も近い正方形の詳細を改善する必要があります。 十分でない場合でも、プレイヤーが地面にいるときや地面に本当に近づいているときに読み込むために、各正方形をサブ正方形にカットできます。 しかし、写真でわかるように、プレイヤーがポールに着地しようとすると問題があります:正方形は非常に細い長方形になり、最後の行では三角形になり、さらに多くの読み込みが必要になるという事実に加えて、世代が歪んで表示されます。 2.二十面体から始めます。 ここでは、プレイヤーが近づいているときに、プレイヤーの位置の周りの三角形のテッセレーションを増やすことができます。 しかし、私はプレイヤーの位置よりも近くに三角形を見つける方法を知りません。その場合、デカルト座標が役立つ可能性があると聞きましたが、使用方法はわかりません。 私はそのためにC ++ / OpenGLを使用しているので、ここで生成およびロードする主なものは、表面のレリーフと色/テクスチャを表す頂点です。

2
大きな頂点バッファーと複数の描画呼び出し
OpenGLを使い始めたばかりで、それを使用して2Dゲームを作成しようとしています。このゲームでは、非常に多くのさまざまな色の六角形で構成される六角形のグリッドがあります。初心者のOpenGLプログラマーとして、このグリッドを描くには2つの方法があります。 単一の六角形のデータで頂点バッファーを使用し、均一なオフセット値を使用してCPUを反復処理し、グリッドができるまで同じプログラムを何度も描画します。 1回の呼び出しですべての六角形を描画する、非常に大きな事前計算済みの単一の頂点バッファーを作成します。 最も効率的な方法は何ですか?これを行うより良い方法はありますか?
14 opengl  shaders 

1
GLSLバージョン330でスカイボックスを実装する
OpenGL 3.3およびGLSLバージョン330で動作するスカイボックスを取得しようとしています。 ウェブ上のどこにも完全に最新のOGLスカイボックスチュートリアルが見つからなかったため、古いものを最新化しました(頂点などのglVertexAttribPointer()代わりに使用gl_Vertex)。それはほとんど動作していますが、2つの主要な詳細: スカイボックスは空の三角形に似ており、テクスチャはひどくゆがんで伸びています(それらはスターフィールドであると想定されていますが、黒の背景に線が描かれています)。これは、古いチュートリアルを完全に正しく移植しなかったためだと99%確信しています。 これが私のスカイボックスクラスです。 static ShaderProgram* cubeMapShader = nullptr; static const GLfloat vertices[] = { 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, …
14 c++  opengl  glsl  cubemap  skybox 

2
GLSLシェーダー-色相/彩度/輝度の変更
GLSLフラグメントシェーダーを使用して画像の色相を変更しようとしています。Photoshopの色相/彩度調整レイヤーに似たものを実現したい。 次の画像では、私がこれまでに得たものを見ることができます。緑色の正方形の色相を変更して右側の赤い正方形のようにしたいのですが、このシェーダーでは半分の赤い半分のピンクの正方形(中央の正方形)が得られます。 フラグメントシェーダーで行っているのは、テクスチャの色をHSVに変換してから、頂点シェーダーから取得したHSV色を追加して、色をRGBに変換し直すことです。 私は何を間違えていますか? フラグメントシェーダー: precision mediump float; varying vec2 vTextureCoord; varying vec3 vHSV; uniform sampler2D sTexture; vec3 convertRGBtoHSV(vec3 rgbColor) { float r = rgbColor[0]; float g = rgbColor[1]; float b = rgbColor[2]; float colorMax = max(max(r,g), b); float colorMin = min(min(r,g), b); float delta = colorMax - colorMin; float …

1
グリッド上の正投影単位の変換の不一致(たとえば、64ピクセルが正しく変換されない)
グリッド上での単位変換に関する小さな問題についての洞察を探しています。 更新および解決済み 私は自分の問題を解決しました。詳細は以下をご覧ください。投稿のこの部分のすべてが正しいことが判明しました。どちらかといえば、次の人のためのミニチュアチュートリアル/例/ヘルプとして機能することができます。 セットアップ FBO、VAO、VBO 512x448ウィンドウ 64x64グリッド gl_Position = projection * world * position; projection定義されるortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);この教科書正射影関数です。 world (0、0)の固定カメラ位置によって定義されます position スプライトの位置によって定義されます。 問題 以下のスクリーンショット(1:1スケーリング)では、グリッド間隔は64x64であり、ユニットを(64、64)で描画していますが、ユニットは約10pxを間違った位置に描画します。ピクセルサイズのゆがみを防ぐために均一なウィンドウディメンションを試しましたが、1対1ピクセルから世界単位への投影を行う際に、適切な方法で少し迷っています。とにかく、ここに問題を支援するためのいくつかの簡単な画像があります。 私は、エンジンが64xオフセットであると信じているスプライトの束をスーパーインポーズすることにしました。 これがふさわしくないように思えたとき、私はあちこちに行き、1ユニットのベースケースをしました。予想通りに並んでいたようです。黄色は、動きの1pxの違いを示しています。 私が欲しいもの 理想的には、64ユニットが任意の方向に移動すると、以下が出力されます(重ね合わせたユニット)。 頂点 頂点シェーダーに入る頂点が正しいように見えます。たとえば、最初の画像を参照すると、データはVBOで次のようになります。 x y x y ---------------------------- tl | 0.0 24.0 64.0 24.0 bl | 0.0 0.0 -> 64.0 0.0 tr | …


3
クォータニオンベースのカメラを実装するにはどうすればよいですか?
更新ここでのエラーは非常に単純なものでした。ラジアンから度への変換を見逃しました。他の問題がある場合は、すべてを読む必要はありません。 私はこれについていくつかのチュートリアルを見て、四元数ベースのカメラを実装しようと思って理解したと思いました。問題は、約1分間回転させた後、正しく動作しないことです。10度戻ると-10度に戻ります。何が悪いのか分かりません。私はopenTKを使用していますが、すでにクォータニオンクラスがあります。私はopenglの初心者であり、楽しみのためだけにこれをやっており、四元数を本当に理解していないので、おそらくここで愚かなことをしているでしょう。ここにいくつかのコードがあります:(実際には、vboを​​ロードおよび描画するメソッドを除くほとんどすべてのコード(vbo-sを示すOpenTKサンプルから取得されます)) vboにキューブをロードし、カメラのクォータニオンを初期化します protected override void OnLoad(EventArgs e) { base.OnLoad(e); cameraPos = new Vector3(0, 0, 7); cameraRot = Quaternion.FromAxisAngle(new Vector3(0,0,-1), 0); GL.ClearColor(System.Drawing.Color.MidnightBlue); GL.Enable(EnableCap.DepthTest); vbo = LoadVBO(CubeVertices, CubeElements); } ここに透視投影をロードします。これは、最初とウィンドウのサイズを変更するたびにロードされます。 protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(0, 0, Width, Height); float aspect_ratio = Width / (float)Height; Matrix4 perpective = Matrix4.CreatePerspectiveFieldOfView(MathHelper.PiOver4, …

2
頂点配列を使用する場合とVBOを使用する場合
私は頂点配列と頂点バッファオブジェクトについて学ぼうとしていますが、次の点で違いがわかりません: 使用例(地形などの静的ジオメトリ、パーティクルシステムのようなすべてのフレームを変更するジオメトリなど) 性能 移植性(古いグラフィックカード、コンソール、AndroidやiPhoneなどのデバイスなど) いくつかの明確化?
14 opengl 


2
Time.deltaTimeを使用しているにもかかわらず、動きはフレームレートに依存しているように見える
Unityでゲームオブジェクトを移動するために必要な変換を計算する次のコードがありますLateUpdate。これはで呼び出されます。私が理解していることから、私の使用はTime.deltaTime最終的な翻訳フレームレートを独立させるべきCollisionDetection.Move()です(ただレイキャストを実行することに注意してください)。 public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If we're ignoring gravity, then just …

5
1秒あたりのフレーム数を制限する利点は何ですか?(もしあれば)
私はOpenGLでシンプルなゲームに取り組んでおり、ディスプレイの初期化と入力にSDLを使用していますが、タイミングに関しては2つの選択肢があります。最適なTimePerFrame-theTimeTakenToRenderでスリープ状態にある1つ目は、最適なTimePerFrameの秒数= 1 / theFramerateCapです。(vsyncを使用するのと同等であるため、これが必要かどうかは完全にはわかりません。これはより正確かもしれません。私の仮定が正しい場合、SDL + OpenGLがデフォルトでvsyncを持っているかどうかを教えてください。もう1つは、最後のフレームがレンダリングされてからの時間を測定し、それに応じて移動を調整することです。(フレームのレンダリングにかかる​​時間が短いほど、そのフレーム内でのエンティティの移動が少なくなります)。パフォーマンス、およびフリッカーの減少などに関して、これら2つの方法の長所と短所は何ですか?
13 opengl  sdl  frame-rate  vsync 

1
ピクセレーションなしで画像サイズを縮小する方法は?
滑らかなエッジキャラクターと高解像度の画像を使用したゲームをたくさん見ていますが、キャラクターの画像を64x64に縮小しようとすると、ピクセル化された混乱が発生します。64x64のキャンバスから始めても、ピクセル化されたエッジが生じます。 OpenGLでスケーリングする必要がありますか?または、おそらく私が知らないフォトショップやピクセンでいくつかのテクニックがありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.