問題タブ [lwjgl]
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.
opengl - ステンシル バッファを使用してダイナミック シャドウをマージする
LWJGL を使用して、分割画面のコープ 2D フロム ザ トップ ゲームを作成しています。私は現在、2 つの視野をステンシル バッファーとマージするスマートな方法を見つけようとしています。全体のポイントは、他のプレイヤーが見ることができるものを見ることができるということです.
写真は言葉よりも優れています。
白い四角と黒い影しか描けないことに注意してください。
黒い領域内には何も描画したくないため、ステンシル バッファーを使用します。
ステンシルバッファを「1」で埋めながら世界を描くのは簡単です。プレイヤーの視野を描くのは簡単です。プレイヤーの 1 人だけが見える場所を特定するのは簡単ではありません。
私には、最後の 2 つの写真の間の OR 操作のように思えます。ただし、ステンシル バッファは 1 つしかありません。ステンシル バッファーに関するドキュメントが相対的に不足しているため、それが実際にどのように機能するかについてもわかりません。
また、FBO のような複雑なものは避けたいと思います。ステンシル バッファを使用して簡単に実行できる方法があると確信しています。
誰もこれについて考えを持っていますか?
opengl - LWJGLでのサポートが必要-テクスチャのタイプの設定
誰かがさまざまなテクスチャタイプの設定を手伝ってもらえますか?(GL_LINEAR、GL_NEARESTなど)netbeansでslick-utillybraryを使用しています。問題は、異なるタイプに設定できないことです。私は文書化し、MIP_MAPを使用したい場合は、それらを作成する必要があることを知りました。問題は、それらを作成できないことです。だから問題は!slick-utilテクスチャを使用して、または使用せずに作成するにはどうすればよいですか。また、さまざまなテクスチャタイプに設定するにはどうすればよいですか。私はそれがC++でどのように作られているか知っていますが、Javaで実装されていませんか?
お時間をいただきありがとうございます、Zsurzsa、
java - Webstart および JavaCompiler API の制限
私は、すべて同じ証明書によって署名された jar のみを持つアプリケーションを持っています。Webstart でアプリケーションを実行したくありません。アプリケーションはコンパイラを実行し、コンパイルされたコードは LWJGL を実行します。ただし、アプリケーションを実行すると、コンパイルされたコードによって、文字通り LWJGL(-library) パッケージが見つからないというエラーが返されます (元のアプリケーションでは問題なく表示されます)。アプリケーションを Trusted-Library としてコンパイルすると、同様にエラーが発生します。
http://download.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html 私はこのサイトを見つけましたが、特定の主題についてあまり賢くはありません。コンパイルされたコードは、他のコードとは異なる方法で処理されます。
誰でもこれで私を助けることができますか? それともクリア?
編集: コンパイルされたコードは署名なしとして扱われると結論付けました。ライブラリを認識させるには、それらをクラスパスに追加する必要があります。
java - VBOデータのバッファリングのわずかな遅延
私は、まもなく実際のゲームに実装されるMinecraftに着想を得たグラフィックエンジンに取り組んでいます。ジオメトリストレステストで最大60FPS以上のエンジンを使用しています。グラフィック支援にLWJGLのみを使用しています。ある時点で、ローカルメモリ上のVBOデータを更新する際に大きな遅延が発生しましたが、マルチスレッド化、合理化、および汎用ブロックカラー/コンストラクターの同期によってそれを解決しました。
カリング後にVBOデータをビデオメモリにバッファリングしている間、ときどき小さな問題(20〜30ミリ秒)が発生し、その時間の間画面がフリーズする可能性があります。遅延が発生する理由は、数フレームごとにglBufferData(静的描画モード)を介して大量のジオメトリデータをVBO(3-5mb)に送信するためだと思います。私はすでにチャンク錐台カリング、ブロック錐台カリング、エアブロックカリング、および指向性周囲カラーを実装しました。
これは私に2つの質問を残します:
glBufferDataよりも高速な別のデータバッファリング方法を使用できますか?(おそらく、準備として2番目のバッファーをマルチスレッド化する方法です。これによりヒッチが2番目のスレッドに移動します)?
そうでない場合は、立方体の角を示すフローティングポイントのマトリックス(簡単に操作できる)を使用して、ローカルメモリ(おそらくビデオメモリ)から直接オクルージョンカリングを実装するにはどうすればよいですか?アンチポータルは私のフレームワークと互換性がないことに注意してください。
または、「プレーン」英語:データサイズをさらに縮小せずに、glBufferDataを使用してvramへのデータのバッファリングを高速化するにはどうすればよいですか?
更新:カスタムオクルージョンカリングルートを実行します。データのバッファリング時間は、オクルードされたブロックを追加するのにかかる時間によって大幅に増加し、カリングアップデーターがロックを取得するため、同期によって遅延する可能性さえあると確信しています。誰かがバッファからのオクルージョンカリングに関する提案を持っているなら、それは素晴らしいことです。
アップデート2:隠し顔のカリングを追加すると、問題は偶然に解決されました(2つの接触面=どちらもレンダリングされません)。バッファサイズが90%減少し、フレームレートが400%増加したため、パフォーマンスをさらに向上させる必要はありません。回答RTSをありがとう。
java - LWJGL テクスチャを使用すると色が乱れる + テクスチャリングを頻繁に無効にすると FPS が低下する
最初は、テクスチャリングを使用するときに色が台無しになるという問題がありましたが、なんとか修正できました (問題は、必要なときにテクスチャリングを無効にしなかったことです)。それを行った後、色は変更されましたが、まだ私が望むものではありません.純粋な青(0,0,255)RGBの代わりに白です。完全なレンダリング方法は次のとおりです。
RENDERING TILES 部分で問題が発生します。それらにはテクスチャがありません (今のところ)。赤 (溶岩) と青 (水) の色の付いた正方形にしたいだけです。色は静的変数から取得され、適切です (System.out.ln(tile.color.getRed()...... で確認しました - 出力は 0,0,255 でした)。静的変数は次のとおりです。
出力は次のようになります。レンダリングされたシーン
白いフィールドは水です - それらは青いはずです!
追加の問題は FPS です。画面でわかるように、41 です。レンダリング セクションにテクスチャの複数の glEnable と glDisables を追加する前は、FPS は 60 でした。これらの複数の有効化と無効化が原因で、回避できますか?
私はopenGLの完全な初心者であり、これはここでの最初の質問でもあるため、何か間違ったことをした場合はご容赦ください.
java - Eclipse のデバッグの問題
Javaで作成されたLWJGLとSlick2Dを使用したゲームがあります。最近、ピクセルが空かどうかを取得するために次のコードを追加しました。
このコードは、Eclipse の実行モードでは正常に動作するように見えますが、Eclipse のデバッグ モードでプログラムを開始すると、ゲームの実行が非常に遅くなり、非常にグリッチが発生します。このコード ブロックを削除すると、デバッグ モードが実行モードと同じくらいスムーズに実行されます。
なぜこれが起こっているのか、それが私のせいなのか誰か知っていますか? それは本当に役に立ちます:)
java - lwjgl に依存するように Gradle プロジェクトを構成する
build.gradle
LWJGL に依存するように構成するにはどうすればよいですか?
私はGradleを初めて使用し、ライブラリの依存関係を構成する方法は私にとって泥のように明らかです。
ソース管理にチェックインするのではなく、Gradle がダウンロードするライブラリの依存関係を指定できることを理解していますが、構成に関するあらゆる種類のヘルプをいただければ幸いです。
(Ivy も Maven も知りません。)
java - Javaビットマップフォント:1ビット画像をさまざまな色でブリットする
JavaAWTベースのアプリケーションで単純なビットマップフォントの描画を実装したいと思います。アプリケーションはGraphics
、単純なアルゴリズムを実装したいオブジェクトを描画します。
1)ファイルをロードします(おそらくを使用してImageIO.read(new File(fileName))
)。これは、次のような1ビットのPNGです。
つまり、8*8文字の16*16(Unicodeをサポートしたい場合は16 *多く)のマトリックスです。黒は背景色に対応し、白は前景色に対応します。
2)文字列を文字ごとに描画し、このビットマップの関連部分をターゲットにブリットしますGraphics
。これまでのところ、私はそのようなものでしか成功していません:
それは機能しますが、残念ながら、テキストをそのままブリットします。つまり、白黒を希望の前景色と背景色に置き換えることはできず、背景を透明にすることさえできません。
したがって、問題は次のとおりです。Javaには、1ビットビットビットの一部を別のビットビットにブリットし、ブリッティングの過程で色付けする(つまり、すべての0ピクセルを1つの特定の色とすべての1ピクセルに置き換える)簡単な(そして高速な)方法がありますか?他のと)?
私はいくつかの解決策を研究しましたが、それらはすべて私には最適ではないように見えます:
- このソリューションで概説されているように、カスタムカラー化BufferedImageOpを使用すると、機能するはずですが、すべてのブリット操作の前にビットマップを再カラー化することは非常に非効率的であるようです。
- 複数の32ビットRGBAPNGを使用し、アルファチャネルを黒ピクセルの場合は0に、前景の場合は最大に設定します。必要なすべての前景色は、独自の事前レンダリングされたビットマップを取得する必要があります。このようにして、背景を透明にし、ブリットする前に長方形として個別に描画し、フォントで1つのビットマップを選択し、目的の色で事前に色付けして、その長方形の上にその一部を描画できます。私には大きなやり過ぎのように思えます-そしてこのオプションをさらに悪化させるのは-それは前景色の数を比較的少量に制限します(つまり、数百万ではなく数百または数千のビットマップのように現実的にロードして保持できます)
- このソリューションで概説されているように、カスタムフォントのバンドルとロードは機能しますが、 Font#createFontのドキュメントで確認できる限り、AWT
Font
はベクターベースのフォントでのみ機能し、ビットマップベースでは機能しないようです。
そのような機能を実装するライブラリはすでにあるのでしょうか?または、 lwjglのようなより高度なグラフィックライブラリに切り替える時が来ましたか?
ベンチマーク結果
簡単なテストでいくつかのアルゴリズムをテストしました。2つの文字列(それぞれ71文字)があり、同じ場所に次々と連続して描画します。
次に、かかった時間を測定し、速度を計算します。1秒あたりの文字数と1秒あたりの文字数です。これまでにテストしたさまざまな実装により、次の結果が得られます。
- ビットマップフォント、16 * 16文字ビットマップ:10991文字列/秒、780391文字/秒
- ビットマップフォント、分割前の画像:11048文字列/秒、784443文字/秒
- g.drawString():8952文字列/秒、635631文字/秒
- LookupOpおよびByteLookupTableを使用して色付けされた色付きビットマップフォント:404文字列/秒、28741文字/秒
lwjgl - シーンをFBOにレンダリングしようとすると白が返されます
これが私がやろうとしていることです。画像をタイルとして使用して動的に生成された地形を持つLWJGLを使用して2Dゲームを作成しようとしています。正常に動作しますが、ズームしようとすると、タイルの端に暗い色合いが表示され、タイルの間に余分なピクセルが表示されます。ズーム前後のスクリーンショットは次のとおりです。
ズームの前後のスクリーンショット:http://postimage.org/image/rhuc9744/
私は見てみましたが、インターネットで少し集めたところから、ズームがピクセル精度の問題を引き起こしていて、ブレンド後に悪化していることが要点だと思います。タイル間でいくつかのピクセルを重ねることができるというブログを見ましたが、複雑すぎるようです。私はすべてのブレンドオプションを試しましたが、どれも機能しませんでした。だから私は、すべてのタイルをバッファ、FBOにレンダリングし、それを1つの大きなテクスチャとして適用する必要があると考えました。したがって、ズームしても、すべてが1つの巨大な画像になるため、暗いエッジは表示されません。だから私はFBOに関する多くのチュートリアルを読みましたが、それらのすべてではないにしてもほとんどが3Dを対象としており、実際に作業を開始しました。問題は、2Dオルソに適用する場合です。コードが壊れて、私が得るのは白いボックスだけです。私はこの問題に何日も立ち往生していて、グーグルを使って答えを見つけることができないようです。ここ'
このコードは、resource / lamp.pngに画像をロードします。これは任意の.pngファイルであり、FBOにレンダリングしてから、2Dクワッドのテクスチャとして適用します。何らかの理由で、FBOをテクスチャとしてバインドしようとすると、白い空白のクワッドしか表示されません。FBOに正しくレンダリングされていないのか、正しくバインドされていないのかわかりません。draw()メソッドをチェックして、私が何について話しているのかを知ることができます。私が言ったように、私はこの問題で一日立ち往生しているので、どんな助けでも大歓迎です。
resources / lamp.png:http ://s3.postimage.org/rhpdn5ms/lamp.png?noCache=1315464566