問題タブ [pyopengl]
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.
python - gluLookAt を適切に使用するにはどうすればよいですか?
3D ワールドの回転などを計算するために複雑な三角法を使用したくないので、gluLookAt は優れた代替手段のように思えます。ドキュメントによると、私がする必要があるのは、カメラの位置に 3 つの座標を配置することだけです。画面の上部があるべき方向の視線と直角でなければならないと私が考えるまで、最後のものは意味がありませんでした.
それはまったくそのようには機能しません。私はいくつかのPythonコードを持っています。これは、ゲームのこの部分に入るときのいくつかのデータといくつかのモード コードを初期化するコードです。
「game.engage_3d(45,0.1,100)」は、基本的に投影行列を 45 度の画角と 0.1 と 100 の近距離座標と遠距離座標を持つように設定します。
最初の gluLookAt は、カメラを適切な位置に配置します。
(0,0,0) の中心で描画された立方体があり、gluLookAt なしで正常に動作します。描画する前に、次のコードがあります。
これで、上向きの位置は常に同じで、常に直角になるはずです。私が考えていたのは、上下のキーで z 軸を前後に移動し、左右のキーで x 軸を左右に移動することです。実際に起こることは、左右のキーを使用すると、キーによって加速された「目」の周りを立方体が回転することです。上キーを押すと、どこからともなく別のキューブが画面を切り裂き、最初のキューブに当たります。ダウン キーは、謎のクローン キューブを元に戻します。これをローテーションと組み合わせて、ドキュメントに記載されているように、まったく異なる結果を得ることができます。
いったい何が間違っているのですか?
ありがとうございました。
visual-studio - 必要な C ランタイム ライブラリを省略したサード パーティ ライブラリを修正するにはどうすればよいですか?
PyOpenGL パッケージを必要とするプロジェクトの NSIS インストーラーを作成していますが、システムにmscvr71.dll
(VS C ランタイム ライブラリ) が含まれていないため、このパッケージのインストールは失敗します。KB326922によると、このライブラリは PyOpenGL でパッケージ化されているはずです。
私の質問は、インストーラー内に PyOpenGL dep をインストールできるように、これを修正する最も安全な方法は何ですか? 確かに、インストール中にファイルを system32 にドロップする必要はありません。また、このファイルを含む更新プログラム (VS 自体以外) を認識していません。
編集:
- 欠落しているdllを含めるためにPyOpenGLを簡単に再パッケージ化することはできません。VS がインストールされておらず、パッケージとインストーラーを再構築する方法がわかりません。
opengl - GL_POINTSをフィードすると、ジオメトリシェーダーは何もしません
ジオメトリシェーダーを使用してポイントをラインセグメント(GL_POINTSからGL_LINE_STRIP)に変換しようとしていますが、ラインセグメントが表示されません。入力をGL_LINESに変更し、頂点を繰り返すだけで、期待どおりの動作が得られます。どうしたの?
これは、動作を示す完全なプログラムです。現状では、黒い窓しか見えません。USE_POINTSをFalseに設定すると、期待している回転するサイケデリックスの点滅する線が表示されます。
python - フロートのタプルのリストからac配列を構築するPythonの最速の方法は何ですか?
コンテキスト:私のPythonコードは、2D頂点の配列をOpenGLに渡します。
私は2つのアプローチをテストしました。1つはctypesを使用し、もう1つはstructを使用し、後者は2倍以上高速です。
他の選択肢はありますか?そのようなコードを加速する方法についてのヒントはありますか(そして、はい、これは私のコードの1つのボトルネックです)?
python - GLSLを使用したOpenGLシャドウマッピング
GLSLを使用してシャドウマッピングを機能させようとしています。残念ながら、かなりまともなデプスバッファの精度があっても、デプスレンダリングの結果は使用できません。ワイヤーフレームのようにレンダリングされているので、次の画像の方がわかりやすいかもしれません。
テストケース(シェーダーを含む単一ファイル)も含めていますが、依存関係はpyopenglのみです。
python - 同時にソケットサーバーとして機能しているときにpyopenglの表示がブロックされる
私は実際にpyopenglプログラムを使用してソケットサーバーとして機能しています。同時に、サーバーはクライアントからコマンドを受け取り、これらのコマンドを解釈し、同時に対応する描画を行います。
ソケット処理中にメインスレッドがブロックされた場合、実際にソケットサーバー受け入れ処理を実行するスレッドを開始し、updateserverソケットメソッドが表示ループで呼び出されます。
- スレッドを終了する方法がわかりません
- 別のPythonファイルに書き込まれたクライアントがデータをプッシュし始めると、表示ループはまるで死んでいるかのようにハングアップしました
opengl - 非推奨の機能を使用していないオンラインの OpenGL 3.0 チュートリアルはどこにありますか?
OpenGL SuperBible の第 5 版を購入しました。彼らが非推奨の機能の使用を避けたことを非常に嬉しく思いますが、彼らの例ではGLTools
. GLTools
シンプルな 3D オブジェクトをレンダリングし、視錐台、カメラ、および変換マトリックスを管理するための便利な関数を多数提供します。
これはすべて素晴らしいことですが、提供された抽象化によって低レベルの詳細が隠され、使用できないコードに移動するのに苦労していGLTools
ますpyopengl
。私がオンラインで見たチュートリアルの大部分は、私が避けようとしている即時モードを利用しています。を使用glDrawArrays
する人は を利用しますがglEnableClientState
、これも避けようとしています。
私が探しているのは、OpenGL 3.x に完全に準拠した入門チュートリアルです。注文が多すぎる場合は、おそらく、ランドリー リストの適切な「出発点」機能が適切です。
opengl - OpenGL Phong シェーダがフラット シェーダのように動作するのはなぜですか?
私はここ数週間 OpenGL を学んでおり、Phong シェーダーの実装で問題が発生しました。smooth
修飾子を使用しているにもかかわらず、頂点間の補間を行わないようです。ここで何か不足していますか?当然のことながら、頂点シェーダーとフラグメント シェーダーのコードは、OpenGL SuperBible Fifth Edition から大幅に引用されています。この本を強くお勧めします!
頂点シェーダー:
フラグメント シェーダー:
ウィキペディアのこの (パブリック ドメイン) 画像は、取得している画像の種類と目的を正確に示しています。「フラット」画像を取得していますが、「フォン」画像が必要です。
どんな助けでも大歓迎です。ありがとうございました!
編集:違いがある場合は、PyOpenGL 3.0.1 と Python 2.6 を使用しています。
編集2:
解決
問題は私のジオメトリにあることがわかりました。コスは正しかった。Blender モデルでこの問題を抱えている他の人のために、Kos はそうすることがうまくいくと指摘しましたEdit->Faces->Set Smooth
。Wings 3D は「箱から出してすぐに」動作することがわかりました。
opengl - glTranslate/glRotated後のopenGLピッキング
openglキャンバスからシーンオブジェクトを選択するためのpick関数を作成しました。
これは、オブジェクトの描画にglTanslateまたはglRotatedを使用しない場合、つまり、描画するときに線を選択できる場合に最適に機能します。
しかし、私がそうするときはそうではありません、
私は何が欠けていますか?
python - 頂点配列へのレンダリングを実装すると、glReadPixelsが失敗します(無効な操作)
テクスチャから頂点バッファに頂点データをコピーしてから、頂点バッファを描画しようとしています。私の知る限り、これを行う最善の方法は、テクスチャをfboにバインドし、glReadPixelsを使用してvboにコピーすることです。ただし、これを機能させることができないようです。glReadPixelsが「無効な操作」というエラーで失敗します。
訂正、例、代替方法を歓迎します。:)
関連するコードは次のとおりです。