問題タブ [java-3d]
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.
java - 他のオブジェクトとは異なる投影で特定のオブジェクトを描画する方法は?
だから私はこれについてどこにも何も見つけることができませんでした.Java3Dを使用してユーザー用の環境を作成しています。X、Y、および Z 軸の 3D ディスプレイを、ビューを回転させると回転するコーナーに配置したいと思います。残念ながら、中央ではなく隅に配置する必要があります。これは、通常のビュー プロジェクション (PERSPECTIVE_PROJECTION) では、軸が正しく整列せず、非常にぎこちなく見えることを意味します。代わりに PARALLEL_PROJECTION を使用すると、ぎこちない軸表示が修正されますが、ズームできなくなるため、世界を適切に表示できなくなります。特に軸表示に PARALLEL_PROJECTION を使用し、他のすべてのオブジェクトに PERSPECTIVE_PROJECTION を使用するようレンダラーに指示する方法はありますか? または、この問題を回避する別の方法がありますか?
java - Javaプログラムを簡単に配布できるようにする
exeインストーラーを介してJava3DAPIをPCにインストールしました。このインストーラーは、libサブディレクトリとbinサブディレクトリにj3dcore.jar
、を使用して新しいディレクトリを作成するだけです。vecmath.jar
j3dutils.jar
j3dcore-ogl.dll
Netbeansには問題はなく、コードはスムーズにコンパイルおよび実行されましたが、プロジェクトをビルドしてコマンドプロンプトから実行しようとすると、次のように表示されましUnsatisfiedLinkError
たno j3dcore-ogl in java.library.path
。
グーグルが助けに来て、私に3つの実行可能な解決策を与えました:
- dllファイルをJREのbinディレクトリにコピーします
- dllファイルのパスをライブラリパスに追加する(
java -Djava.library.path=dllpath
) - プログラムにdllをロードします
System.load()
(実際には、これを機能させることができませんでした)
私の質問は:私が逃したこの問題に対するエレガントな解決策はありますか?
誰かがこのプログラムを使用したいPCごとに、実行する前にdllをコピーするか、ライブラリパスに追加する必要があるのは退屈なようです。(副次的な質問:なぜNetbeansはdllに問題がなかったのですか?)
java - Java3Dでポリゴン線とテクスチャを同時に表示
テクスチャ (POLYGON_FILL) を使用して 3D メッシュを正常にレンダリングしています。私がやりたいことは、プログラムで異なる色の線 (POLYGON_LINE PolygonAttribute) を同時に描画して、三角形のエッジを表示することです。これは、3D モデリング プログラムやそのようなアプリケーションで見られるようなものです。つまり、顔のエッジを示すワイヤ アウトラインを備えた顔のテクスチャです。
これは API を介して簡単に実行できますか? それとも、ある程度の創造性が必要ですか? テクスチャの座標を変更して、テクスチャがポリゴンのエッジをわずかに下回るようにすることができると思います (ただし、面のエッジのギャップが大きく変化すると一貫性がないように見えると思います)。ただし、TexCoordGeneration を使用していますが、そのようなことをどこから始めるべきかを確認してください。
基本的に、これは一種の基本的だが高度にカスタマイズされた 3D モデラー アプリ用になるため、3D ジオメトリのユーザー操作に関してはあまり一般的ではない操作が行われます。
java - 初心者のための Java3d Mac OSX インストール手順
Mac osx で java3d を使用しようとしていますが、インストール手順がどこにも見つかりません。誰かがこれを行う方法を知っている場合、または java3d に代わるものがある場合 (私は jmonkeyengine が 1 つであることを知っています)、私に知らせてください!
ありがとうございました
java - Windows、Linux ではアクセサ メソッドが表示されますが、OS X では表示されません
1.5.2 jar ファイルを使用して javax.vecmath に対してビルドしようとしています (たとえば、 Java.net http://java3d.java.net/binary-builds.htmlにあります)。
Point3d などの呼び出しを試みます。
64 ビット Windows および Linux (Ubuntu 10.04、64 ビットのみを試しました) では、これはコンパイルおよび実行されます。
OS X (10.6.7) ではコンパイルされません:
これは、まったく同じ物理 vecmath.jar を使用しています
代わりにソースを直接使用すると、OS X でコンパイルされますが、実行されません。
OS X 上で自分でソースを jar ファイルにコンパイルし、上記の例でその jar ファイルを使用すると、やはりコンパイルできません。
アクセスされるフィールドは、x、y、z のパブリック フィールドを持つ抽象クラスである javax.vecmath.Tuple3d にあります。したがって、OS X ではこれが機能します (実際、どこでも機能するようです)。
問題は、私は vecmath.jar に依存するコード ベースに取り組んでおり、メンテナーは Windows にいて、アクセサー メソッドを使い続けたいと思っていますが、私は OS X にいます。
私は両方を探しています:
(1) 何が起こっているかを理解する (2) vecmath.jar ファイルに依存しながら、これらのソースを移植可能にする方法を理解する。
java - Maya シーンがロードされた Java 3D アプリケーションで空の黒い画面が生成される
Maya 2011 を使用して 3D モデルを作成し、ローダーを使用して Java 3D アプリケーションにアクセスしました。ファイルを OBJ ファイルとしてエクスポートし、クラスで OBJ ファイル ローダーを使用しました。ただし、アプリケーションを実行すると、空の黒い画面しか表示されません。
これが私のコードです:
助けていただければ幸いです。
java-3d - Java3D と動作: KeyNavigatorBehaviour は正常に動作しますが、MouseRotate は動作しません
MouseRotate を使用して、ユーザーのマウス操作を ColorCube に与えることができません。しかし、KeyNavigatorBehaviour を使用すると、必要に応じてキーボードでキューブを制御できます。
ここで、 MouseRotate をテストするために使用したコード:
KeyNavigatorBehaviour を作成している行のコメントを外し、MouseRotate を作成している行のコメントを外すと、今度はユーザーの操作が可能になります。
では、キューブがマウスに反応できないのはなぜですか (MouseRotate ビヘイビア インスタンスを使用している場合)。
どんな助けでも大歓迎です。
システム: Xubuntu 11.04 Java3D バージョン: 1.5.2
swing - Swing マウス イベントのリダイレクト
Java3D キャンバスの上に Java Swing コンポーネントを表示して操作できるようにしようとしています。透明な JPanel をバッファリングされたイメージにペイントし、J3DGraphics2D を使用してそのバッファをキャンバスにペイントすることで、コンポーネントを表示しています。
私が理解できないのは、マウス イベントを JPanel のスイング コンポーネントに転送する方法です。Canvas3D のすべてのキーボードとマウスのイベントを JPanel にディスパッチしてから、swing コンポーネントによってキャプチャされない場合 (たとえば、マウスがそれらのいずれにもない場合)、Canvas3D にフォールバックするようにします。
Container.dispatchEvent(AWTEvent) を呼び出してみましたが、たとえばマウス カーソルがコンテナのボタンの真上にある場合でも、適切なコンポーネントにイベントが正常にディスパッチされません。
これを行う方法を知っている人はいますか?それは可能であるべきです。
java - Swing ツールチップでの Java3D の吃音の問題
私が取り組んでいる Java プロジェクトでは、Java3d と Swing のツールチップの間で奇妙な競合が発生しています。
私たちのプログラムは、Swing JComponents (ボタン、スライダー、テキスト ボックスなど) に囲まれた中央の Java3D Canvas3D でセットアップされています。キーボードとマウスは 3D ワールド内を移動するために使用され、ボタンは他の操作を可能にします。
問題は、Swing コンポーネントからのツール ヒントがウィンドウ (JFrame) の外に出るたびに、Java3D の動きが遅くなり、途切れる大きな問題が発生することです。スイングでのヘビーウェイトとライトウェイトの混合に関して読んだすべての問題のため、それが問題である可能性が高いと想定しました。
私たちの最初の解決策は、各コンポーネントの getToolTipLocation() メソッドをオーバーライドして、ツールチップがウィンドウ内にとどまるようにすることでした。これはほとんど機能しているように見えましたが、ツールチップが奇妙な場所に残りました。さらに、プログラムが起動するとすぐに、ツールチップが生成される前に (20 ~ 30 回の起動ごとに) 吃音/速度低下の問題が発生することがあります。
それから昨日、私はそれを修正するためのこれまでにない奇妙な方法を発見しました. ツールチップの幅が 151 ピクセル以上である限り、ウィンドウの外に出る速度低下の問題は発生しません。幅が 150 ピクセル以下のツールチップは、ウィンドウから出るとすぐにスローダウン/カクつきの問題を引き起こします。使用する各タイプのコンポーネントで createToolTip () をオーバーライドすることにより、setPreferedSize() を呼び出して、すべてのツール ヒントの幅を 151 ピクセルにすることができます。もちろん、この回避策の問題は、すべてのツールチップに多くの空白スペースがあるか、切り捨てられることです。
この奇妙な動作の原因と、それを修正するために何ができるか、誰にもわかりませんか?
performance - Java3Dでの動的オブジェクトの可視性
私はJavaとJava3Dを使用して、「飛ぶ」ことができる天の川銀河の比較的単純なモデルを構築しています。
これまでのところ、40,000個の既知の星を読み取り、それらをSphereオブジェクトとして(キーボード+マウスナビゲーションを使用して)表示する単純なバージョンが機能しています。ただし、それ以上の進歩を妨げるいくつかの問題があります。
私が苦労している問題の1つは、星の明るさの絶対等級(対数目盛)と観測者からの現在の距離の関数である見かけの等級に従って星をレンダリングする必要があることです。見かけの等級が非常に小さい星(地球軌道から見たプロキシマケンタウリなど)は見えないはずですが、非常に明るい星(デネブなど)は地球から比較的離れた場所でも見えるはずです。
そのため、固定された「実際の」サイズと現在の観測場所からの距離に基づいて星を表示することはできません。これにより、非常に薄暗い近くの星でも巨大なブロブが発生しますが、デネブのようなめちゃくちゃ明るい星は、距離が離れているためにまったく表示されません。
問題は、Java3dオブジェクトを動的に割り当てたり削除したりせずに、現在の視点位置からの距離に応じて変化する見かけの等級に基づいて星の画像をどのように表現できるかということです。または、レンダリングの開始後にJava3Dでオブジェクトを変更する必要がある場合、フレームレートを下げずにそれを行うにはどうすればよいですか?
透明度を使ってみました。巨大な円が少し見づらくなるだけです。霧を使ってみましたが、遠くの星(と星座の線)が完全に曇っています。球をShape3Dオブジェクトに変換しようとしましたが、ヒープスペースの2倍を消費します。
幸せな特殊なケースの1つは、見かけの等級が7.00より大きい星を表示する必要がないことです。これは、人間の目では星を見ることができないためです。理論的には、空間内の現在の位置に基づいて表示できるものについては、3Dオブジェクトを生成するだけで済みます。これにより、データベース内のすべてのスターに対してSphereオブジェクトを作成するよりもパフォーマンスが向上するだけでなく、Javaヒープスペースの不足を回避するのに役立ちます。(含めたい実際の星は100,000を超えていますが、40,000を超えるとヒープスペースが不足し、試したJava設定ではヒープスペースが増えません。)
このような星の明るさの動的な表示が可能であることを私は知っています。注目に値するSpaceEngineシミュレーションプログラムの作成者がそれを実行します(そして、1秒あたり60フレームを取得することができます)。彼がどうやってそれをしているのか、私は一生理解できません。
素朴な実装の限界に達し、許容できるパフォーマンスと機能を実現する唯一の方法は、ディスプレイの概念全体を再設計することだと完全に期待しています。Java3Dを使用して動的オブジェクトの可視化を行う方法について、いくつかの具体的な回答を確認したいと思いますが、この時点で、専門家の推測に落ち着きます。(私はJava3Dを放棄したくないのですが、そこでも特定の推奨事項を受け入れています。)