問題タブ [glm-math]
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.
c++ - glm::ortho() は実際には間違っていますか?
私は最近、行列演算や固定関数パイプラインなど、OpenGL が提供する古い (非推奨の) 機能から切り替えることをお勧めします。
物事を少し単純化するために、マトリックス ライブラリとして GLM を使用しています。問題は、単純化するよりも多くの問題を引き起こした可能性があることです...
パースペクティブ プロジェクションはシェーダーとセットアップでうまく機能しましたが、直交に切り替えようとすると、すべてが機能しなくなりました。ポイントと単純なクワッドが表示されません。古い OpenGL マトリックスを使用すると、再び機能し始めました。
すべて射影行列に絞り込みました。これが私がそれを呼んだ方法です:
これが呼び出されたら、それをopenglによって提供されるものと比較しました」
唯一の違いは [0][0] 要素と [1][1] 要素です (私の知る限り、それぞれ「2/幅」と「2/高さ」に等しい)。OpenGL マトリックスから、値はまさにそれでした! ただし、glm マトリックスでは、値は 0 でした。
glm::ortho を呼び出した後、手動で glm マトリックスから値を切り替えると、すべてが再び機能していました。
だから私の質問: glm::ortho() 関数は本当に壊れていますか、それとも間違って使用していますか?
c++ - WaveFront .objローダーがオブジェクトを表示しない(VBOおよびVAO)
私はWaveFront.objローダーに取り組んでおり、最初の目標は、次の.objファイルからすべての頂点とインデックスをロードすることです(湾曲したエッジを持つ立方体を表示します)。
すべての頂点とインデックスをverticesVecとindexesVecという2つのベクトルにロードし、両方をチェックしました(すべての入力が正しい順序であり、verticesVec [0]=0.9およびindexesVec[0]= 1です)。VertexBufferObjectに頂点をロードし、VerticArrayObjectにインデックスをシェーダーフィールド設定と一緒にロードします。
ただし、立方体をレンダリングすると、次の画像が表示されますが、これは正しくありません。すべてのコードを再確認しましたが、問題が発生している部分が見つかりません。ベクトルとベクトルのバイト単位のサイズと関係がありますか?
次のコードは、すべてのレンダリングを行うDraw/Renderメソッドからのものです。
そして、私の.objローダーでのバッファーオブジェクトの初期化:
c++ - 頂点シェーダー OpenGL 3.x を使用したルックアット マトリックスの計算
この投稿に従って、GluLookAt タイプ マトリックスを作成しました。
そのCPU側を計算して、透視行列と同じようにユニフォームとしてシェーダーに渡します。
シェーダーはこんな感じ。
単位行列として lookAtMatrix を渡すと、シーンは正しくレンダリングされますが、上記のコードを使用して行列を次のように設定します ...
空白のシーンになります。シーンは X/Y に描画された 10x10 のグリッドであるため、ズームアウトされたシーンのビューを期待していました。
(行と列で遊んでみましたが、パースペクティブ マトリックスは問題ないので、99.9% は問題ないと確信しています)
c++ - openglは、画面にレンダリングする前に、オブジェクトを回転させて正しい面を設定します
GLMライブラリを使用してopenglのobjファイルを介してオブジェクトをロードしていますが、画面に逆さまに表示されます。また、私はユーザーに機能を提供しているので、ユーザーはマウスでもそれに応じてすべてのオブジェクトを回転させることができます。例:ズームイン、ズームイン、y軸で回転します。
問題は、最初にオブジェクトを回転させて、必要に応じて顔を作成する方法がわからないことです。その後、私はこのオブジェクトを描きたいと思います。そのとき、マウスはそれを回転させる役割を果たすことができます。
私の描画関数には次のコードが含まれています
ここで回転関数はすべてマウスの動きに依存していますが、逆さまに負荷がかかる場合は、最初にオブジェクトを正しい方向に向けてから、この描画関数で許可する方法がわかりません...つまり、これを呼び出す前に顔を設定する必要があります描画機能。
c++ - GlmVECTORIZE2_VECがXCode警告を再定義しました
glmの一部のマクロが再定義されているという警告がXCodeでのみ表示され続けます。大きな問題ではありませんが、警告が煩わしいと思います。
犯人マクロの上に#ifndefブロックを置いても、システム全体が機能しない場合はどうなりますか?それらを含むアプリにリンクされている静的ライブラリにそれらを含めます。これが問題になる可能性があるので、2つのうちの1つから削除して、問題が解決するかどうかを確認しました。そうではありませんでした。
この警告は、Windowsでmingw g ++を使用している場合は表示されませんが、Xcode4では表示されます。glmバージョン0.9.3.4を使用しています。
警告:
これは何百回も繰り返されます。
犯人コード(glmファイル_vectorize.hppから取得):
これに非常によく似たマクロが他にもいくつかあります。
c++ - GLMのモデル行列
自分の行列/ベクトル演算からGLMに移行しましたが、1つ理解できません。
OpenGLのモデル行列 --model_matrix=scale_matrix * rotate_matrix * translate_matrixなので、最初に変換してから回転し、最後にスケールします。しかし、GLMでそうしようとすると、乗算の逆順(平行移動*回転*スケール)を使用した場合にのみ正しい場所にクワッドが表示されますが、MVP行列(投影*ビュー*モデル)では正常に機能します。
サンプルコード
バーテックスシェーダー
c++ - オブジェクトとその「子」の回転
今、私はオブジェクトを回転させています。それを「mainBody」と呼びましょう。しかし、mainBody にはいくつかのアタッチメントが取り付けられています。私は親子システムを使用していません。本体には添付ファイルの配列があり、mainBody 描画関数でそれらを描画します。
本体からの glPopMatrix() は、装備アイテムが描画された後に実行されます。
過去に pushMatrix(); を使用してこれを行うことができたことは知っています。および popMatrix(); しかし、今はうまくいかないようです。
私は c++、opengl、および glm を使用しています。
ここに私が今持っているものを示すいくつかのコードがあります:
そしてglmコード
そして描画装置コード
c++ - プレーヤーを追跡するカメラ
この問題についてしばらく調べていますが、解決策が見つかりません。現在、カメラはプレイヤーの位置を正しく追跡していますが、カメラの回転がうまくいきません。x 軸に沿ってのみ回転すると、正常に動作します。しかし、別の回転を追加すると、「y」がうまくいかず、カメラが間違った方向を見始めます。
現在、私のカメラには位置と回転しかありません。
ここにいくつかのコードがあります。
また、opengl、c++、および glm を使用していることも知っています。
opengl - glm::vec3 を glm::mat4 で変換するにはどうすればよいですか
glm::vec3
(camera.target) を (camera.rotationMatrix) で変換したいglm::mat4
。これを掛けてみると、 error:error: no match for 'operator*' in 'originalTarget * ((Camera*)this)->Camera::rotationMatrix
. vec3 * mat4 を掛けることはできないと思います。GLM はこれを変換する機能を持っていますか? 変換を行う他の方法は?
コード: