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

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

12
グラフィックスAPIの前の3D理論?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 5年前に閉鎖されました。 私はソフトウェアエンジニアであり、キャリアをゲーム開発に向けたいと考えています。現在、C ++ / DirectXを使用して2Dに関する本を読んでいます。3Dに入ると、正しくやりたいと思うようになります。たとえば、3Dスペースについては何も知りません。したがって、APIだけを学べば、それを知っているかもしれませんが、それを使ってインタラクティブなミニ3Dワールドを開発できるかどうかはわかりません。私は、最新のシェーダーなどで回転木枠を持っているだけで成功したとは思わないでしょう。私の数学スキルは、trig / linear代数までで、まだ大学にいます。もっと数学が来ることを知っています。OpenGL / Direct3Dやその他の提案を取り上げる前に、3D理論の本を読むべきですか?APIが3Dゲーム開発を教えるものではなく、その後失われることを望まないことを知っています。私は非常に本志向なので、そこに提案があればそれでも問題ありません。考えを歓迎します。ありがとう!
19 graphics  c++  opengl  directx 

7
浮動小数点数の解像度が原点からさらに低下するのはなぜですか?
OpenGLシーンには、原点から途方もなく遠くに位置するオブジェクトがあります。これらのオブジェクトを表示し、それらの周りでカメラをパン/回転/ズームすると、それらは「ジッター」します。つまり、オブジェクトを構成する頂点は、点の仮想3Dグリッドの周りにスナップしているように見えます。これは、浮動小数点精度(OpenGL、および他のほとんどすべてが使用する)を使用して格納できる情報量が多いため、よくある問題であると読みました。なぜこれが起こるのかわかりません。 解決策を探しているときに、非常に単純な「浮動原点」の修正に出会いましたが、うまくいくようです。オブジェクトが同じ相対位置にあるようにすべてを変換するだけですが、カメラの視線はすべて原点に近くなります。ここで説明を見つけました:http : //floatingorigin.com/、しかし、私はそれに従うことができませんでした。 だから...なぜ私のシーンを原点から非常に遠く(たとえば1000万単位)に配置すると、私が観察した不規則な行動になるのかを説明できますか?また、なぜ原点に近づけると問題が解決するのでしょうか?
19 c++  opengl 


6
シームレスなタイルマップレンダリング(境界のない隣接画像)
タイルセットイメージからタイルを描画してタイルマップを描画する2Dゲームエンジンがあります。デフォルトでは、OpenGLはテクスチャのGL_REPEAT一部()ではなくテクスチャ全体のみをラップできるため、各タイルは個別のテクスチャに分割されます。次に、同じタイルの領域が互いに隣接してレンダリングされます。意図したとおりに動作しているときの外観は次のとおりです。 ただし、分数スケーリングを導入するとすぐに、継ぎ目が表示されます。 なぜこれが起こるのですか?これは、四角形の境界線をブレンドする線形フィルタリングによるものだと思いましたが、それでもポイントフィルタリングでは発生します。私がこれまでに見つけた唯一の解決策は、すべての位置決めとスケーリングが整数値でのみ発生するようにし、ポイントフィルタリングを使用することです。これにより、ゲームの視覚的品質が低下する可能性があります(特に、サブピクセルの配置が機能しなくなるため、動きがそれほど滑らかになりません)。 私が試した/考えたこと: アンチエイリアスは、継ぎ目を減らしますが、完全に排除しません ミップマッピングをオフにしても効果はありません 各タイルを個別にレンダリングし、1ピクセルずつエッジを押し出します-しかし、これは最適化されていません。タイルの領域を一度にレンダリングできなくなり、透明領域のエッジに沿って他のアーティファクトを作成するためです。 ソース画像の周囲に1pxの境界線を追加し、最後のピクセルを繰り返します-しかし、それらは2のべき乗ではなくなり、NPOTサポートのないシステムとの互換性の問題を引き起こします タイル化された画像を処理するためのカスタムシェーダーを記述しますが、それではどうしますか?GL_REPEAT境界で画像の反対側からピクセルをつかみ、透明度を選択しないでください。 ジオメトリは正確に隣接しているため、浮動小数点の丸め誤差はありません。 フラグメントシェーダーが同じ色を返すようにハードコーディングされている場合、縫い目は消えます。 テクスチャに設定されている場合GL_CLAMPの代わりにGL_REPEAT、継ぎ目が消え(レンダリングが間違っているが)。 テクスチャがに設​​定されているGL_MIRRORED_REPEAT場合、縫い目は消えます(ただし、レンダリングは再び間違っています)。 背景を赤にしても、縫い目は白のままです。これは、透明ではなく、どこかから不透明な白をサンプリングしていることを示唆しています。 そのため、シームGL_REPEATは設定されている場合にのみ表示されます。このモードでのみ何らかの理由で、ジオメトリの端にブリード/漏れ/透明度があります。それはどうですか?テクスチャ全体が不透明です。

1
ゲームエンジンの設計-Ubershader-シェーダー管理設計[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店しました。 遅延シェーディングを備えた柔軟なUbershaderシステムを実装したい。私の現在のアイデアは、FlatTexture、BumpTexture、Displacement Mappingなどの特定の機能を処理するモジュールからシェーダーを作成することです。色をデコードしたり、トーンマッピングなどを行う小さなモジュールもあります。これには、 GPUがサポートしていない場合、特定のタイプのモジュールを交換します。そのため、現在のGPU機能に適応できます。このデザインが良いかどうかはわかりません。私は今、悪いデザインを選択し、後でそれを支払うことができるのではないかと恐れています。 私の質問は、シェーダー管理システムを効果的に実装する方法に関するリソース、例、記事はどこにありますか?ビッグゲームエンジンがこれを行う方法を知っている人はいますか?

4
目標点についてカメラを周回させるにはどうすればよいですか?
カメラが宇宙を自由に動き回るシーンを描いています。カメラクラスは、(またはビューのトラック続けるを見てポイント、カメラの位置、およびアップベクトル)。これらのベクトル/ポイントは、gluLookAtに渡されます。 パンとズームの実装はほとんど簡単です。しかし、私はポイントの見方をめぐるローテーションをより多くの問題であると感じています。2つの角度をとる関数Camera.rotateを作成します。1つは上/下に回転し、もう1つは視点を中心とした仮想球に沿って左右に回転します。 これを行う簡単な方法はありますか? 私は(簡単に)四元数について読みましたが、自分のシーンの構成が比較的単純であるため、簡単な解決策があるかどうかを確認したかったのです。

3
ピクセルシェーダーでフレームバッファーまたは深度バッファーから直接読み取ることができないのはなぜですか?
ピクセルシェーダーでフレームバッファーまたは深度バッファーをサンプリングさせておくと、非常に便利な機能になります。現在のピクセルの背後にあるものの深さまたは色を知ることができるだけでも役立ちます。 OpenGLとDirectXの両方でこれができないのはなぜですか?何らかのハードウェアの制限があると予想していましたが、アルファブレンディングではブレンドの計算にフレームバッファーの色を使用し、Zテストでは現在の位置で深度バッファーをサンプリングします。これらの値を直接公開しないのはなぜですか?将来これを見てみたいですか?
18 opengl  3d  directx  shaders 

2
マウスクリックをレイに変換するにはどうすればよいですか?
透視図法があります。ユーザーが画面をクリックすると、マウスポイントから投影される近距離面と遠距離面の間の光線を計算したいので、自分の世界で光線交差コードを実行できます。 私は自分のマトリックスとベクターとレイのクラスを使用していますが、それらはすべて期待どおりに機能します。 ただし、レイをワールド座標に変換しようとすると、遠方は常に0,0,0になるため、レイはマウスクリックからオブジェクト空間の中心ではなく、オブジェクト空間の中心に移動します。(nearとfarのx座標とy座標は同一であり、互いに負であるz座標のみが異なります) GLint vp[4]; glGetIntegerv(GL_VIEWPORT,vp); matrix_t mv, p; glGetFloatv(GL_MODELVIEW_MATRIX,mv.f); glGetFloatv(GL_PROJECTION_MATRIX,p.f); const matrix_t inv = (mv*p).inverse(); const float unit_x = (2.0f*((float)(x-vp[0])/(vp[2]-vp[0])))-1.0f, unit_y = 1.0f-(2.0f*((float)(y-vp[1])/(vp[3]-vp[1]))); const vec_t near(vec_t(unit_x,unit_y,-1)*inv); const vec_t far(vec_t(unit_x,unit_y,1)*inv); ray = ray_t(near,far-near); 何が間違っていますか?(マウスポイントをどのように投影解除しますか?)

6
OpenGLワイヤフレーム
いいえ、glPolygonModeを探していません。私はメソッドを探しています。おそらく、レトロスタイルのワイヤフレームルックを生成するGLSLシェーダーです。助言がありますか? Vector Tanksのようなもの。 できれば、ソリューションはOpenGL ES 2.0でも動作するはずです。 ヒントとポインター(NULLでない限り)はありがたいです!
18 opengl 

1
フォン照明-鏡面照明には非常に奇妙なものがあります
Phongライティングを実装しました。トーラスと球体は予想どおりに点灯するなど、すべてが機能しているように見えます。しかし、指向性ライトの鏡面照明に関して奇妙なことに気付きます。 以下に2つのスクリーンショットを示します。 最初: 第二: ご覧のように、カメラがオブジェクトから遠い場合、より多くの領域に鏡面照明があります。 以下は、単純化された頂点シェーダーです。 #version 330 core layout(location = 0) in vec3 vertexPos; layout(location = 1) in vec3 vertexNorm; layout(location = 2) in vec2 vertexUV; uniform mat4 MVP; uniform mat4 M; out vec2 fragmentUV; out vec3 fragmentNormal; out vec3 fragmentPos; void main() { fragmentUV = vertexUV; fragmentNormal = …

1
法線と法線マップ
Assimp Asset Importer(http://assimp.sourceforge.net/lib_html/index.html)を使用して3Dモデルを解析しています。 これまでのところ、メッシュの各頂点に定義されている法線ベクトルを単純に引き出しました。それでも、法線マップに関するさまざまなチュートリアルを見つけました... 法線マップについて理解しているように、法線ベクトルは法線マップの各テクセルに格納されており、これらをシェーダーの法線テクスチャから引き出します。 法線を取得するのに2つの方法があるのはなぜですか?

1
GLSL Light(減衰、色、強度)の式
ボクセルエンジンにポイントライトを実装していますが、光源の近くで100%から光の半径で0%まで、適切な光の流れを得るのに苦労しています。 関数には5つの引数があります。 明るい色(Vec3) 光の強度(光から減衰が100%になる距離までの距離) ライトからフラグメントまでの距離 ライトに垂直なフラグメントからの角度 ライトの位置 フラグメントの色を計算するための関数を作成するために、誰かが私を正しい方向に押すことができますか? 私の実験の1つの画像: 編集(Byteによって要求された現在のコード)これは私の側からの単なる実験コードであることに注意してください。私はウェブサイトからフロート属性を取得しましたが、それは動作しますが、完璧からはほど遠いです。: void main() { // Light color vec3 torchColor = vec3(1.0f, 1.0f, 1.0f); float lightAdd = 0.0f; for (int i=0; i<5; i++) { vec3 pos = lights[i]; if (pos.x == 0.0f) continue; float dist = distance(vertex_pos, pos); if (dist < 9) …
17 opengl  glsl  lwjgl  lighting  pixel 

2
OpenGL:シェーダーを配置する場所
私はOpenGL ES 2.0を学ぼうとしていますが、シェーダーを「管理」するための最も一般的なプラクティスは何だろうと思っています。 私がこの質問をしているのは、私が見つけた例(Android SDKで提供されているAPIデモに含まれている例など)で、通常、GLRendererクラス内のすべてが表示され、私ができるように物事をかなり分けたいからです。たとえば、OpenGL ES 1.0コードと同じように、テクスチャ付きのクワッドを描画したいときに再利用できるGLImageオブジェクト(現時点では2Dのみに焦点を当てています)。私が見つけたほとんどすべての例で、シェーダーはクラス属性として定義されています。例えば: public class Square { public final String vertexShader = "uniform mat4 uMVPMatrix;\n" + "attribute vec4 aPosition;\n" + "attribute vec4 aColor;\n" + "varying vec4 vColor;\n" + "void main() {\n" + " gl_Position = uMVPMatrix * aPosition;\n" + " vColor = aColor;\n" + "}\n"; public …

1
GLSL、1つまたは多くのシェーダープログラムですべてですか?
OpenGLを使用して3Dデモを行っていますが、GLSLが多少「制限されている」ことに気づきました(または、私だけですか?)。とにかく、私は多くの異なる種類の資料を持っています。一部のマテリアルにはアンビエントカラーと拡散カラーがあり、一部のマテリアルにはアンビエントオクルージョンマップがあり、一部にはスペキュラマップとバンプマップがあります。 1つの頂点/フラグメントシェーダーペアですべてをサポートする方が良いでしょうか、それとも多くの頂点/フラグメントシェーダーを作成し、現在選択されているマテリアルに基づいて選択する方が良いでしょうか?OpenGLまたはD3Dの通常のシェーダー戦略とは何ですか?
17 opengl  3d  shaders  glsl 

2
OpenGLで制限された(256)カラーパレットをシミュレートするにはどうすればよいですか?
Twitterで、開発中のゲームの次のスクリーンショットを見つけました。 上の画像には色の制限がないようです。しかし、下部にある他の2つの画像には256色のパレットがあります。 私はで同様の効果を達成したい私のゲームを(私はOpenGLを使用しています)。どうすればできますか?
16 opengl  webgl 

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