トップページ > 記事閲覧
DrawCube3Dが非常に遅い
名前:Marshal 日時: 2020/04/10 15:04

管理人様 3D上でDrawCube3Dを使用して90万個Cubeを描画する必要があるのですが、DrawPixel3Dに比べてあまりにも描画速度が遅くなってしまい困っています。 3D上でCubeを使用して描画する際に、どうにか高速に描画するよう何かしら対応方法は御座いませんでしょうか? もしくは、可能でしたら下記のような対応をして頂けませんでしょうか? DrawPixelSetのような、DrawCube3DSet的なものなど可能ですか? 以上、宜しくお願い申し上げます。
メンテ

Page: 1 |

Re: DrawCube3Dが非常に遅い ( No.1 )
名前:管理人 日時:2020/04/11 06:32

90万個はかなりの数ですね、仮に DrawCube3DSet を作成しても 60FPSで 90万個の Cubeを描画するのは難しいと思います 最適化の余地がありそうなのですが、どのような表現をされようとしているのでしょうか?
メンテ
Re: DrawCube3Dが非常に遅い ( No.2 )
名前:Marshal 日時:2020/04/14 09:11

管理人様 TcpIp通信等で取得した3次元データ(大凡90万点)を使ってCube3Dに描画しようとしております。 DX.VECTORデータは描画前に全て揃った状態で下記を実施しましたが、かなり描画速度に差が出ています。 Pixel3Dの場合は、ある程度高速描画が出来ますが、Cube3Dの場合は5Fps程度しか出ていないようでした。 もし最適化が可能でしたら、お手数をお掛けして恐縮なのですが、、カスタマイズして頂けますと大変助かります。 以上、何卒宜しくお願い致します。
メンテ
Re: DrawCube3Dが非常に遅い ( No.3 )
名前:管理人 日時:2020/04/15 08:47

> TcpIp通信等で取得した3次元データ(大凡90万点)を使ってCube3Dに描画しようとしております。 通信で取得した3次元データ… 何か特殊な処理なのでしょうか? 個人的には正直に 90万Cubeも描画しなくて良いように最適化するのが良いと思っているのですが… ( 例えば、Cubeどうしがぴったり隣接している場合は、隣り合ってくっついているCubeの面は描画しなくて良いので… ) とりあえず DrawCubeSet3D という関数を追加してみましたので、よろしければお試しください DrawCube3D を単体で 90万回呼ぶよりは高速になると思いますが、実用レベルになるかは不明です… https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい) <追加した関数> // 3Dの立方体の集合を描画する int DrawCubeSet3D( CUBEDATA *CubeDataArray, int Num, int FillFlag ) ; <追加した構造体> // 立方体データ型 struct CUBEDATA { VECTOR Pos1 ; // 座標1 VECTOR Pos2 ; // 座標2 COLOR_U8 DifColor ; // ディフューズカラー COLOR_U8 SpcColor ; // スペキュラカラー } ; 構造体内の色情報である DifColor と SpcColor の構造体 COLOR_U8 は以下のようになっていて、 GetColor の代わりに GetColorU8 という関数を使用します // unsigned char 型のカラー値 struct COLOR_U8 { BYTE b, g, r, a ; } ; // 符号なし整数8ビットのカラー値を作成する COLOR_U8 GetColorU8( int Red, int Green, int Blue, int Alpha ) ;
メンテ
Re: DrawCube3Dが非常に遅い ( No.4 )
名前:Marshal 日時:2020/04/16 21:18

管理人様 お手数をお掛けし早々に御対応して頂いたのに、なかなか確認する時間を取れずに現状おります。 来週中にはリビルドして動作確認させて頂きますm(_ _)m 以上、何卒、宜しくお願いします。
メンテ
Re: DrawCube3Dが非常に遅い ( No.5 )
名前:Marshal 日時:2020/05/20 13:08

管理人様 動作結果のご連絡が遅くなり申し訳ありません。 一通り動作確認しておりますが、DrawCubeSet3DのFillFlagをDX.FALSEに指定すると下記のような例外が発生するようです。 DX.DUBEDATAには90万データ分、設定しております。 ちなみに、FillFalgをDX.TRUEにすると問題なく動作しております。 原因の方を調査してい頂けませんでしょうか? 以上、何卒、宜しくお願い致します。 Error内容: 型 'System.AccessViolationException' のハンドルされていない例外が DxLibDotNet.dll で発生しました。
メンテ
Re: DrawCube3Dが非常に遅い ( No.6 )
名前:管理人 日時:2020/05/21 01:34

すみません、FillFlag を FALSE にするとメモリの不正なアクセスを行ってしまうバグがありました 修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.zip // Android版 ARM用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM64.zip // Android版 ARM64用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x86.zip // Android版 x86用 https://dxlib.xsrv.jp/temp/DxLibAndroidTest_x64.zip // Android版 x64用 https://dxlib.xsrv.jp/temp/DxLibiOSTest.zip // iOS版 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: DrawCube3Dが非常に遅い ( No.7 )
名前:Marshal 日時:2020/05/21 09:23

管理人様 早速修正して頂き、有難う御座います。 ただ、DX.FALSEに変更し実行してましたが、絵が何も出ておりません。 DX.TRUEの場合は、問題なく絵が出ております。 DX.DUBEDATAのα値は、0,128,255と実験してみましたが、変わらず何も絵が出ないようです。 本来であれば、キューブ上の骨格だけ出る想定ですよね? 以上、何卒、宜しくお願い致します。
メンテ
Re: DrawCube3Dが非常に遅い ( No.8 )
名前:管理人 日時:2020/05/22 00:57

すみません、ライティングが ON になっていると必ず真っ黒の線で描画されるように なってしまっていました DX.SetUseLighting( DX.FALSE ); を実行してライティングを OFF にしてから DrawCubeSet3D を実行することで正常な描画結果が得られると思います あと、ライティングが ON だと真っ黒の線になるバグを修正したバージョンをアップしましたので、 もしよろしければお試しください m(_ _;m ( 線描画でライティングすることはあまり無いと思いますが… ) https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存