トップページ > 記事閲覧
【Android版】 3Dと2Dが一部同時に描画できない
名前:まるまる 日時: 2019/11/23 01:48

環境/端末依存なのか、仕様なのか、あるいはバグなのか、または私のコードに 致命的な誤りがあるのか、区別がつかないため教えてください。 手元の環境/端末およびコードにて、一部の3D描画と2D描画が両立しない問題が 起こっています。 具体的には、  ・DrawLine3DとDrawStringを用いると、DrawLine3DとDrawStringが表示されない。  ・DrawLine3DとDrawSphere3DとDrawBoxを用いると、DrawBoxが表示されない。  ・DrawLine3DとDrawBoxを用いると、DrawLine3Dが表示されない。 と、なんとも不安定な様子です。 すべての3D・2D系の描画関数がダメなわけではなさそうで、組み合わせによって 動く関数と動かくなる関数があるように見受けられます。 以下のコードで、DrawLine3D・DrawSphere3D・DrawString・DrawBoxを色々な 組み合わせでコメントアウトして試すと、前述の通りコメントアウトしていない 関数も正しく描画されない組み合わせが存在しています。 ----- #include "DxLib.h" int android_main(void) { if (DxLib_Init() == -1) { return -1; } while (ProcessMessage() == 0) { ClearDrawScreen(); //@[3D]線分描画 DrawLine3D(VGet(100.0f, 0.0f, 0.0f), VGet(-100.0f, 0.0f, 0.0f), GetColor(255, 255, 255)); DrawLine3D(VGet(0.0f, 100.0f, 0.0f), VGet(0.0f, -100.0f, 0.0f), GetColor(255, 255, 255)); DrawLine3D(VGet(0.0f, 0.0f, 100.0f), VGet(0.0f, 0.0f, -100.0f), GetColor(255, 255, 255)); DrawSphere3D(VGet(0.0f, 0.0f, 0.0f), 50.0f, 32, GetColor(255, 0, 0), GetColor(255, 255, 255), TRUE); //A[2D]文字と四角形描画 DrawString(10, 10, "アプリテスト", GetColor(255, 255, 255)); DrawBox(200, 100, 250, 150, GetColor(255, 255, 255), TRUE); SetCameraPositionAndTarget_UpVecY(VGet(200.0f, 200.0f, 200.0f), VGet(0.0f, 0.0f, 0.0f)); } DxLib_End(); return 0; } ----- DXライブラリは3.21b、開発環境はWindows10×VisualStudio Community 2015、 端末はGoogle Pixel3a、Androidバージョンは10です。 エミュレーターは導入できておりません。 もし、上記が仕様やバグであれば(人によっては)致命的であるため、もっと 早く報告や修正が行われているはずであり、手元特有の環境依存か あるいは Android 10の問題だと思います。 環境依存であれば、それはそれで諦めを付けて他の道を模索するので教えて 頂けると助かります。 よろしくお願いします。
メンテ

Page: 1 |

Re: 【Android版】 3Dと2Dが一部同時に描画できない ( No.1 )
名前:管理人 日時:2019/11/23 03:28

ご指摘ありがとうございます 載せていただいたコードで手元でも現象が再現しました すみません、ライブラリのバグです 修正版をアップしましたので、よろしければお試しください m(_ _;m 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: 【Android版】3Dと2Dが一部同時に描画できな ( No.2 )
名前:まるまる 日時:2019/11/23 09:49

ご対応ありがとうございます。 頂いた修正版で問題は改善されました。 本件とは別だと思われますが、 同様にAndroid版にて、描画先を裏画面に切り替えると、3D描画におけるカメラ設定が 正しく機能していないように見受けられますが、仕様または環境依存でしょうか? 以下のコードをそのまま実行(表画面へ描画)すると、正しく画面中心に十字が現れますが、 SetDrawScreen(DX_SCREEN_BACK) と ScreenFlip() のコメントアウトを外し裏画面への 描画を有効にすると、十字らしき表示が左下に描画され、カメラ設定がおかしくなる ようです。 SetCameraPositionAndTarget_UpVecYの設定が上手くいっていないようですが、 SetCameraPositionAndTargetAndUpVecを用いても同じ現象が発生します。 ご確認よろしくお願いします。 ----- #include "DxLib.h" int android_main(void) { if (DxLib_Init() == -1) { return -1; } while (ProcessMessage() == 0) { //描画先画面を裏にする //SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); DrawLine3D(VGet(100.0f, 0.0f, 0.0f), VGet(-100.0f, 0.0f, 0.0f), GetColor(255, 255, 255)); DrawLine3D(VGet(0.0f, 100.0f, 0.0f), VGet(0.0f, -100.0f, 0.0f), GetColor(255, 255, 255)); DrawLine3D(VGet(0.0f, 0.0f, 100.0f), VGet(0.0f, 0.0f, -100.0f), GetColor(255, 255, 255)); DrawString(10, 10, "アプリテスト", GetColor(255, 255, 255)); SetCameraPositionAndTarget_UpVecY(VGet(200.0f, 200.0f, 200.0f), VGet(0.0f, 0.0f, 0.0f)); //SetCameraPositionAndTargetAndUpVec(VGet(200.0f, 200.0f, 200.0f), VGet(0.0f, 0.0f, 0.0f), VGet(0.0f, 1.0f, 0.0f)); //裏画面の内容を表画面に反映します //ScreenFlip(); } DxLib_End(); return 0; } -----
メンテ
Re: 【Android版】 3Dと2Dが一部同時に描画できない ( No.3 )
名前:管理人 日時:2019/11/25 01:47

SetDrawScreen を使用するとカメラ設定がリセットされますので、 SetCameraPositionAndTarget_UpVecY や SetCameraPositionAndTargetAndUpVec を呼ぶ順番を DrawLine3D などの3Dの描画関数よりも前にしていただければ正常な描画結果が得られます //描画先画面を裏にする SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); SetCameraPositionAndTarget_UpVecY(VGet(200.0f, 200.0f, 200.0f), VGet(0.0f, 0.0f, 0.0f)); //SetCameraPositionAndTargetAndUpVec(VGet(200.0f, 200.0f, 200.0f), VGet(0.0f, 0.0f, 0.0f), VGet(0.0f, 1.0f, 0.0f)); DrawLine3D(VGet(100.0f, 0.0f, 0.0f), VGet(-100.0f, 0.0f, 0.0f), GetColor(255, 255, 255)); DrawLine3D(VGet(0.0f, 100.0f, 0.0f), VGet(0.0f, -100.0f, 0.0f), GetColor(255, 255, 255)); DrawLine3D(VGet(0.0f, 0.0f, 100.0f), VGet(0.0f, 0.0f, -100.0f), GetColor(255, 255, 255)); DrawString(10, 10, "アプリテスト", GetColor(255, 255, 255)); //裏画面の内容を表画面に反映します ScreenFlip(); よろしければお試しください m(_ _)m
メンテ
Re: 【Android版】 3Dと2Dが一部同時に描画でき ( No.4 )
名前:まるまる(解決) 日時:2019/11/30 09:50

ご回答ありがとうございました。 先に SetCameraPositionAndTarget_UpVecY や SetCameraPositionAndTargetAndUpVec を 呼ぶ必要があるとは知りませんでした。失礼しました。 以降留意します。
メンテ

Page: 1 |

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

   クッキー保存