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

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

1
OpenGLで頂点を描画する最も効率的な方法
私はOpenGL 3Dゲームを書いています。地形や使用中のオブジェクト用の多数の三角形があります。 私はOpenGL公式ガイドから勉強していて、最初に提示された方法は、描画したい各頂点のglVertex後に関数を呼び出すglBeginことです。 ただし、何千もの三角形を描く必要がある場合、この方法はかなり古くて非効率的です。各フレームで変化しない情報をグラフィックカードのメモリに保存する方法があるので、各フレームをレンダリングすると、その情報はすでにそこにあります。より「不安定な」情報については、おそらくフレームごとに新しい頂点データを送信する必要があるため、別の手法の方が効率的かもしれません。 私の質問に来ます:頂点情報をハードウェアに送信し、レンダリングするための指示を与えるために使用される最も近代的で効率的なOpenGL関数と技術の明確な説明をお願いします。 フレーム中にめったに変化しない頂点データをレンダリングするための順序を送信するための最良の方法とOpenGLツールは何ですか(私は地形とオブジェクトについて考えます)、フレーム中に大きく変化する頂点データを送信するための最良の方法は何ですか?

2
OpenGL-モデル、ビュー、ワールドマトリックスの関係を理解する
これらのマトリックスがどのように機能するか、および適切なシステムを実行するために相互に関連してそれらをセットアップする方法を理解するのに少し問題があります。 私の理解では、モデルマトリックスはオブジェクトのマトリックスであり、たとえば立方体や球体です。アプリケーション/ゲームにはこれらの多くが存在します。 ワールドマトリックスは、3Dワールドの原点を定義するマトリックスです。出発点。 そして、ビューマトリックスは、すべてがこれで変換される「カメラ」であり、実際にすべてがこのマトリックスの代わりに動いているときに、実際のカメラのような錯覚を持っていることを確認します。 ここで少し迷ってしまいました。だから私はここの誰かがこれを正しく理解するのを助けてくれることを望んでいた。 すべてのmodelMatrixは、worldMatrixとworldMatrix、次にviewMatrixで変換/乗算されますか?それとも、すべてのmodelMatrixがviewMatrixで翻訳/乗算され、次にworldMatrixで翻訳/乗算されますか? これらすべてのマトリックスはどのように関連し、複数のオブジェクトと「カメラ」を備えた世界をどのように設定しますか? 編集: すでにフィードバックをありがとうございました。私はググリングをしましたが、もう少しよく理解できたと思いますが、疑似コードのアドバイスを得ることができますか? projectionMatrix = Matrix; makePerspective(45, width, height, 0.1, 1000.0, projectionMatrix); modelMatrix = Matrix; identity(modelMatrix); translate(modelMatrix, [0.0, 0.0, -10.0]); // move back 10 on z axis viewMatrix = Matrix; identity(viewMatrix); // do some translation based on input with viewMatrix; viewMatrixをmodelMatrixで乗算または変換しますか、それとも逆にしますか?そしてそれから?私は現在、引数を描画するために2つの行列のみを必要とするような方法で、drawメソッドを持っています。 これが私の描画方法です: draw(matrix1 matrix2) …

3
.fbxファイルのインポートと表示
.fbxファイルのインポート/表示に少し問題があります。 私は例をチェックしましたが、私が最も興味を持っているもの(アニメーションとテクスチャー)は、私のようにこれに慣れていない誰かが理解するためにひどく文書化されています。 これは私が試したことです:頂点と法線を取得することができましたが、各頂点のテクスチャ座標を取得することに行き詰まっています。 これまでのところ私のコードです: 3dModelBasicStructs.h struct vertex { float x,y,z; }; struct texturecoords { float a,b; }; struct poligon { int a,b,c; }; Model.h #ifndef MODEL_H #define MODEL_H #define FBXSDK_NEW_API #define MAX_VERTICES 80000 #include "3dModelBasicStructs.h" #include <fbxsdk.h> #include <iostream> #include <GL/glut.h> using namespace std; class Model { public: Model(char*); ~Model(); …
8 c++  opengl  3d  models  fbx 

3
OpenGLを使用してSDLで2D画像を描画する方法
結局のところ、openGLで2D画像を描画する方法を示す簡単なコードを見つけることができました。 #include "SDL/SDL.h" #include "SDL/SDL_opengl.h" #include "SDL/SDL_image.h" const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; const int SCREEN_BPP = 32; int tex; int loadTexture(char* fileName){ SDL_Surface *image=IMG_Load(fileName); SDL_DisplayFormatAlpha(image); GLuint object; glGenTextures(1,&object); glBindTexture(GL_TEXTURE_2D,object); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE); glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,image->w,image ->h,0,GL_RGBA,GL_UNSIGNED_BYTE,image->pixels); SDL_FreeSurface(image); return object; } void init(){ glClearColor(0.0,0.0,0.0,0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0,800,600,1.0,-1.0,1.0); …
8 c++  opengl  sdl  windows 

3
OpenGL、FTGLのフォントの概要
ゲームでフォントをレンダリングするためにFTGLライブラリを使用していますが、テキストの周囲にアウトラインを作成する方法がまったくわかりません。影の作成は、次のように簡単にできるので簡単です。 (疑似コード) font.render(Color::BLACK, position.x + 1, position.y + 1); // Shadow font.render(Color::WHITE, position.x, position.y) // Normal text しかし、アウトラインを作成する方法は?残念ながら、インターネットでそれに対する興味深い解決策を見つけることはできませんでした。かなり奇妙に思えましたが、これは非常に人気のある問題だと思っていました。 大きなフォントだけでアウトラインを描くのは正しい方法ではありません。私が知ったように、この場合は文字が一致しないからです。 では、フォントのアウトラインを作成する簡単な方法はありますか?彼らは実際のゲームでそれをどのように行うのですか? どんな答えも事前にありがとう
8 c++  opengl  gui  fonts 

1
OpenGL:トンネル効果の終わりに光
「トンネルの終わりの光」効果の実装を知っている人はいますか?外側が完全に明るく、徐々に見えやすくなる場所はどこですか? 逆も当てはまる可能性があります。この場合、トンネルの内側は、あなたが入って徐々に見え始めるまで、非常に暗いです。 任意の実装/アルゴリズムは、効果、または効果の実際の名前にさえ役立ちます ありがとう

1
OpenGLを備えたSDL2 —奇妙な結果、何が問題なのですか?
アプリをiOSに移植しているため、SDL1.2からSDL2にアップグレードする必要があります(これまでのところ、OS Xデスクトップアプリとしてのみテストしています)。ただし、SDL2でコードを実行すると、下の2番目の画像に示すように、奇妙な結果が得られます(最初の画像は、SDLを使用した場合の外観です)。これを引き起こす単一のチェンジセットはこれです、そこに明らかに問題があると思いますか、それともSDL2には知らないOpenGLのニュアンスがありますか?私のSDLはHGの最新のものに基づいています。 更新: 同じプロジェクトのiOSポートに関する別の質問がここにあります。 更新2:これもSDLニュースグループにあります:http : //thread.gmane.org/gmane.comp.lib.sdl/58026 更新3:ポータブルOpenGLにRegalを使用してみましたが、3番目のスクリーンショットはそれほど良くない結果です。 #include <OpenGL/gl.h> #include <OpenGL/glu.h> と #include "GL/Regal.h" #include "GL/RegalGLU.h"
8 opengl  sdl  macos  porting 

2
複数のプリミティブのジオメトリシェーダー
複数のプリミティブを処理できるジオメトリシェーダーを作成するにはどうすればよいですか?たとえば、三角形のジオメトリシェーダーを作成するときは、次のようにレイアウトを定義します。 layout(triangles) in; layout(triangle_strip, max_vertices=3) out; しかし、このシェーダーを使用すると、線や点が表示されません。だから追加: layout(triangles) in; layout(triangle_strip, max_vertices=3) out; layout(lines) in; layout(line_strip, max_vertices=2) out; シェーダーはコンパイルして実行しますが、ライン(または最後に定義されたプリミティブが何であれ)のみをレンダリングします。 それでは、複数のタイプのプリミティブを処理する単一のジオメトリシェーダーをどのように定義しますか?またはそれは不可能であり、各タイプを描画する前に複数のシェーダープログラムを作成してシェーダープログラムを変更する必要がありますか

1
glReadBuffer / glReadPixelsを使用すると、Intelカードで黒い画像が返されるのはなぜですか?
私はこのコードを持っています glReadBuffer( GL_FRONT ); glReadPixels( 0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer ); これは、私が試したすべてのNvidiaおよびAMD GPUで完全に機能しますが、試したほとんどすべてのIntelビルトインビデオでは失敗します。それは実際には非常に古い945GMEで動作しますが、他のすべてでは失敗します。スクリーンショットを取得する代わりに、実際には黒い画面が表示されます。 それが役に立てば、私はDoom3エンジンを使用しており、そのコードは組み込みのスクリーンキャプチャコードから派生しています。ちなみに、元のゲームでもインテルデバイスでの画面キャプチャはできません。私の推測では、彼らは標準を正しく実装していません。これの回避策はありますか?
8 opengl 

3
OpenGL Fast-Object Instancing Error
オブジェクトのセットをループしてそれらのオブジェクトのインスタンスをレンダリングするコードがいくつかあります。レンダリングする必要があるオブジェクトのリストはstd :: map>として保存されます。MeshResourceクラスのオブジェクトには実際のデータを含む頂点とインデックスが含まれ、classMeshRendererのオブジェクトはメッシュが配置される空間内のポイントを定義しますでレンダリングされます。 私のレンダリングコードは次のとおりです。 glDisable(GL_BLEND); glEnable(GL_CULL_FACE); glDepthMask(GL_TRUE); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_DEPTH_TEST); for (std::map<MeshResource*, std::vector<MeshRenderer*> >::iterator it = renderables.begin(); it != renderables.end(); it++) { it->first->setupBeforeRendering(); cout << "<"; for (unsigned long i =0; i < it->second.size(); i++) { //Pass in an identity matrix to the vertex shader- used here only for …

2
古いバージョンのOpenglを使用するアプリケーションは、新しいカードでも実行できますか?
OpenGl 3.0以降は、OpenGl 2.xやopengl 1.xなどの旧バージョンとは実装がかなり異なります。つまり、旧バージョンのopenglで記述されたアプリケーションは、ビデオカードを搭載したコンピューターでは実行できません。 Opengl 3.x以降をサポートしていますか? これがこれを尋ねるのに適切な場所でない場合は、申し訳ありません。 ありがとう。
8 opengl 

3
2つのサイズの累乗で制限されている場合に、ゲームのテクスチャを作成/使用する方法を理解する
ゲームのグラフィックの作成について質問があります。 例として。バイクを作りたい。(1ピクセル= 1センチメートル)したがって、私のバイクの幅は200、高さは150になります。(200x150)しかし、libgdxは2の累乗でのみサイズをロードできますか?!(2、4、8、16、...) 最初にそのように考えました。サイズ(200x150)の自転車を作成し、pngとして保存します。もう一度開く(たとえばgimpで)ので、2の累乗(128x128)の値を使用するサイズにイメージのサイズを変更します。これをテクスチャとしてプログラムにロードし、幅を200、高さを150に設定します。 しかし、それは問題ではないでしょうか?最初の会話をするとピクセル情報が失われるからです。だよね?

2
BC6 / BC7テクスチャを反転するには?
OpenGLテクスチャにDDS画像ファイルをロードするためのコードがいくつかあります。D3D11で導入されたBC6およびBC7圧縮形式をサポートするように拡張したいのですが。DirectXとOpenGLは、テクスチャの起点が左上隅か左下隅かについて意見が分かれているため、DDSローダーは、ピクセルをOpenGLに渡す前に、Y軸に沿って各画像のピクセルを反転します。 圧縮されたテクスチャを反転すると、追加のしわが生じます。4x4ピクセルブロックの各行を反転することに加えて、各ブロック内のピクセルを反転する必要もあります。私はここで BC1 / BC2 / BC3ブロックをフリップするコードを見つけました。MSDNのブロック図から、BC3フリッピングコードをBC4およびBC5を処理するように適合させるのは簡単でした。BC6とBC7フォーマットはかなり多くても、威圧的に見えます。これらの形式を反転するための同様のビット調整のトリックはありますか、または各ブロックを完全に解凍して再圧縮する必要がありますか? 更新:テクスチャの座標がエクスポート時に誤って反転されていたため、テクスチャの反転が必要だったことがわかりました。両方のフリップを削除すると、コードが単純かつ高速になりました(Humusに感謝します!)。BC6 / BC7ブロックを反転することは、興味深い課題である可能性がありますが、元のシナリオとは関係ありません。

2
.x(Direct X)ファイルからスケルトンアニメーションを適用するにはどうすればよいですか?
.x形式を使用してBlenderからモデルをエクスポートすると、メッシュ、アーマチュア、アニメーションをロードできます。ゲームでメッシュを生成してモデルを表示しても問題はありません。さらに、アニメーションとアーマチュアが適切なデータ構造に適切に読み込まれています。 私の問題は、アニメーションをモデルに適切に適用することです。モデルを適用するためのフレームワークと、アニメーションを選択してフレームをステップ実行するためのコードがあります。 私が理解していることからAnimationKey、AnimationSetサプライ内のは、バインドポーズをアニメーションフレーム内のポーズに変換する変換を提供します。小さな例として: Animation { {Armature_001_Bone} AnimationKey { 2; //Position 121; //number of frames 0;3; 0.000000, 0.000000, 0.000000;;, 1;3; 0.000000, 0.000000, 0.005524;;, 2;3; 0.000000, 0.000000, 0.022217;;, ... } AnimationKey { 0; //Quaternion Rotation 121; 0;4; -0.707107, 0.707107, 0.000000, 0.000000;;, 1;4; -0.697332, 0.697332, 0.015710, 0.015710;;, 2;4; -0.684805, 0.684805, 0.035442, 0.035442;;, ... …

1
Open GLでの頂点のベストプラクティス
Open GLに頂点データを格納することに関して、ベストプラクティスは何ですか?すなわち: struct VertexColored { public: GLfloat position[]; GLfloat normal[]; byte colours[]; } class Terrian { private: GLuint vbo_vertices; GLuint vbo_normals; GLuint vbo_colors; GLuint ibo_elements; VertexColored vertices[]; } または、次のように必要なクラスに個別に格納する: class Terrian { private: GLfloat vertices[]; GLfloat normals[]; GLfloat colors[]; GLuint vbo_vertices; GLuint vbo_normals; GLuint vbo_colors; GLuint ibo_elements; }
8 c++  opengl  vertex 

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