トップページ > 過去ログ > 記事閲覧
3Dポリゴンが表示されない
名前:チルチル 日時: 2009/06/05 21:10

DrawPolygon3D関数を使って 3Dポリゴンを描画したいのですが、 消失点が中心にある場合と SetUseZBufferFlagを有効にした場合に 3Dポリゴンが表示されなくなってしまいます・・ 画像がロードできていないとか 他の画像に隠れていると言う事はありません 消失点を動かしZバッファを無効にすれば 正常に?描画されます

Page: 1 | 2 |

Re: 3Dポリゴンが表示されない ( No.1 )
名前:管理人 日時:2009/06/06 20:53

消失点が中心にある場合か SetUseZBufferFlag が有効な場合にポリゴンが表示されない、 ということは DrawPolygon3D のサンプルプログラムに SetUseZBufferFlag( TRUE ) ; を 追加した以下のプログラムでもポリゴンが表示されないということでしょうか? ( TestTex1.jpg は「サンプルプログラム実行用フォルダ」に入っています ) #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int GrHandle ; float Z, ZAdd ; VERTEX_3D Vertex[6] ; // ポリゴン2枚なので、頂点は6個 ChangeWindowMode( TRUE ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) return -1 ; // エラーが起きたら直ちに終了 // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // テクスチャの読み込み GrHandle = LoadGraph( "TestTex1.jpg" ) ; SetUseZBufferFlag( TRUE ) ; // Z値の初期化 Z = 0.0F ; // Z値の加算値を初期化(最初は近づける) ZAdd = -1.0F ; // 何かキーが押されるまでループ while( CheckHitKeyAll() == 0 ) { // メッセージ処理 if( ProcessMessage() != 0 ) break ; // 画面の初期化 ClearDrawScreen() ; // Z値の処理 Z += ZAdd ; // 一定のラインを越えていたら進行方向を反転する if( Z < -300.0F || Z > 300.0F ) ZAdd = -ZAdd ; // 頂点情報のセット { // 画面の中央に幅・高さ100で描画 Vertex[0].pos.x = 320.0F - 50.0F ; Vertex[0].pos.y = 240.0F + 50.0F ; Vertex[0].pos.z = Z ; Vertex[0].u = 0.0F ; Vertex[0].v = 0.0F ; Vertex[1].pos.x = 320.0F + 50.0F ; Vertex[1].pos.y = 240.0F + 50.0F ; Vertex[1].pos.z = Z ; Vertex[1].u = 1.0F ; Vertex[1].v = 0.0F ; Vertex[2].pos.x = 320.0F - 50.0F ; Vertex[2].pos.y = 240.0F - 50.0F ; Vertex[2].pos.z = Z ; Vertex[2].u = 0.0F ; Vertex[2].v = 1.0F ; Vertex[3].pos.x = 320.0F + 50.0F ; Vertex[3].pos.y = 240.0F - 50.0F ; Vertex[3].pos.z = Z ; Vertex[3].u = 1.0F ; Vertex[3].v = 1.0F ; Vertex[4].pos.x = 320.0F - 50.0F ; Vertex[4].pos.y = 240.0F - 50.0F ; Vertex[4].pos.z = Z ; Vertex[4].u = 0.0F ; Vertex[4].v = 1.0F ; Vertex[5].pos.x = 320.0F + 50.0F ; Vertex[5].pos.y = 240.0F + 50.0F ; Vertex[5].pos.z = Z ; Vertex[5].u = 1.0F ; Vertex[5].v = 0.0F ; // 輝度は全要素100% Vertex[0].r = Vertex[0].g = Vertex[0].b = 255 ; Vertex[1].r = Vertex[1].g = Vertex[1].b = 255 ; Vertex[2].r = Vertex[2].g = Vertex[2].b = 255 ; Vertex[3].r = Vertex[3].g = Vertex[3].b = 255 ; Vertex[4].r = Vertex[4].g = Vertex[4].b = 255 ; Vertex[5].r = Vertex[5].g = Vertex[5].b = 255 ; // a も最大値 Vertex[0].a = 255 ; Vertex[1].a = 255 ; Vertex[2].a = 255 ; Vertex[3].a = 255 ; Vertex[4].a = 255 ; Vertex[5].a = 255 ; } // ポリゴンを透過色無しで2枚描画 DrawPolygon3D( Vertex, 2, GrHandle, FALSE ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリ使用の終了処理 DxLib_End() ; // ソフトの終了 return 0 ; } あと、最新のバージョンでは正常に表示されるかもしれませんので、 宜しければこちらのバージョンをお試しになってみてください http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: 3Dポリゴンが表示されない ( No.2 )
名前:チルチル 日時:2009/06/09 16:42

サンプルでも表示されませんでしたね・・ ちょっとWLANの調子が悪くて最新版のダウンロードに手間取っています 更新したのは3ヶ月前だったかな・・
Re: 3Dポリゴンが表示されない ( No.3 )
名前:チルチル 日時:2009/06/09 17:35

最新版を試してみましたが表示されませんでした・・
Re: 3Dポリゴンが表示されない ( No.4 )
名前:チルチル 日時:2009/06/09 22:00

さっき気付いたんですが最新版にしたら正常に表示されていたポリゴンまで表示されなくなりました どうやらX,Y,Zの最大値が低くなっているようですが、表示されないので大変な事になっています
Re: 3Dポリゴンが表示されない ( No.5 )
名前:管理人 日時:2009/06/10 20:13

状況が悪化してしまいましたか・・・ うーん、宜しければ実行時にプロジェクトのフォルダに作成される Log.txt の中身を こちらの掲示板に貼り付けて頂けないでしょうか? 何か原因に繋がる情報が出力されているかもしれませんので・・・ あと、差し支えなければチルチルさんがお使いのPCに搭載されているグラフィックスデバイスの 名称を教えていただけないでしょうか?
Re: 3Dポリゴンが表示されない ( No.6 )
名前:チルチル 日時:2009/06/11 22:38

0:システムの情報を出力します 5: DXライブラリ Ver2.25c 6: OS WindowsVista ( Build 6001 Service Pack 1 ) 110: CPU動作速度:大体2.19GHz 113: MMX命令を使用します 113: SSE命令が使用可能です 116: SSE2命令が使用可能です 116: CPUベンダ:GenuineIntel 125: CPU名:Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz 126:COMの初期化... 成功しました 129:メモリ総量:2037.68MB 空きメモリ領域:844.37MB 132:タイマーの精度を検査します 132:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 135: パフォーマンスカウンターを使用します タイマー分解能 : 14318.180000 KHz 138: ソフトの二重起動検査... 二重起動はされていませんでした 142:ウインドウクラスを登録します... 登録に成功しました 145:ウインドウモード起動用のウインドウを作成します 149:ウインドウの作成に成功しました 155:IMEを無効にしました 358:ウインドウスタイルをウインドウモード用に変更します... 完了 362:DirectInput関係初期化処理 362: DirectInput7 の取得中... 成功 381: 引き続き初期化処理... 初期化成功 385: ジョイパッドの初期化... 394: ジョイパッドの初期化は正常に終了しました 394: マウスデバイスの初期化... 初期化成功 398: キーボードデバイスの初期化... 初期化成功 402:DirectInput 関連の初期化は正常に終了しました 407:DirectSound の初期化を行います 407:DirectSound インターフェースの取得を行います.... 成功 414:引き続きインターフェースの初期化処理... 成功 504: DirectSound デバイスを列挙します 508: モジュール名: ドライバ記述:プライマリ サウンド ドライバ 508: モジュール名:{0.0.0.00000000}.{00bb1b30-05e2-4cd7-9aab-a1de0411238c} ドライバ記述:スピーカー (Realtek High Definition Audio) 511: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 512: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 515: 利用可能サンプリング精度 515: プライマリ 16bit = OK 8bit = OK 518: セカンダリ 16bit = OK 8bit = OK 519: 利用可能チャンネル 522: プライマリ MONO = OK STEREO = OK 522: セカンダリ MONO = OK STEREO = OK 526:DirectSound の初期化は正常に終了しました 526:DirectDraw 関連の初期化を行います 529: DirectDraw オブジェクトの取得を行います.... 成功 541: 引き続き初期化処理... 初期化に成功しました 571: ビデオカードの情報 572: 画面モード変更処理を開始します 635: 画面モードの変更処理を開始します 640 x 480 16 bit 635: ウインドウモードにします 639: 画面モードの変更は正常に終了しました 639: カラー情報 642: A:00000000 B:00ff0000 G:0000ff00 B:000000ff 643: ウインドウスタイルをウインドウモード用に変更します... 完了 647: 出力画面用の DirectDrawSurface を作成します 667: 各スクリーンメモリの配置位置 667: PrimaryBuffer : VIDEOMEMORY 671: BaskBuffer : VIDEOMEMORY 671: 出力画面用の DirectDrawSurface の作成は正常に終了しました 674: Direct3D 関連の初期化を行います 675: Direct3Dオブジェクトを取得します 680: Direct3Dオブジェクトを取得しました 680: HALデバイスを発見しました 684: 3Dデバイスを作成します... 3Dデバイスの作成に成功しました 689: テクスチャ最大幅:4096 最小幅:1 690: 描画制限: D_D3DPTEXTURECAPS_POW2 = 1 D_D3DPTEXTURECAPS_SQUAREONLY = 0 693: 最大テクスチャステージ数 = 4 最大テクスチャブレンド数 = 4 693: テクスチャピクセルフォーマット 697: 通常グラフィック用 697: BIT:16 RED:5 GREEN:6 BLUE:5 700: RED:00f800 GREEN:0007e0 BLUE:00001f 700: BIT:32 RED:8 GREEN:8 BLUE:8 704: RED:ff0000 GREEN:00ff00 BLUE:0000ff 704: アルファチャンネル付きグラフィック用 707: BIT:16 ALPHA:4 RED:4 GREEN:4 BLUE:4 707: ALPHA:0000f000 RED:00000f00 GREEN:000000f0 BLUE:0000000f 711: BIT:32 ALPHA:8 RED:8 GREEN:8 BLUE:8 711: ALPHA:ff000000 RED:00ff0000 GREEN:0000ff00 BLUE:000000ff 714: Direct3D 関連の初期化は正常に終了しました 715: グラフィック管理系の初期化を行います 718: 3Dグラフィック描画機能を使用します 737: フォントの初期化を行います 743: フォントの初期化は正常に終了しました 743: グラフィック管理系の初期化は正常に終了しました 778: サーフェス間転送には BltFast を使用します 778: BitBlt:15039μs BltFast:13439μs 782: スキャンラインの数:800 909: 1フレーム当たりの時間は 17 msecです 913: Tri00:17 msec 913: Tri01:16 msec 917: Tri02:16 msec 917: Tri03:17 msec 920: 画面モード変更処理は正常に終了しました 971: DirectDraw 関連の初期化は正常に終了しました 980: 文字コードバッファの初期化を行います... 完了しました 1358: グラフィックファイル DATA\image\Effect\エフェクト1.png がありません 1359: グラフィックファイル DATA\image\Effect\エフェクト2.png がありません 1365: グラフィックファイル DATA\image\Effect\エフェクト3.png がありません 1367: グラフィックファイル DATA\image\Effect\エフェクト4.png がありません 1372: グラフィックファイル DATA\image\Effect\エフェクト5.png がありません 1374: グラフィックファイル DATA\image\Effect\エフェクト6.png がありません 1379: グラフィックファイル DATA\image\Effect\エフェクト7.png がありません 2202: DirectDraw 関連の終了処理をおこないます 2209: フォントの初期化を行います 2211: フォントの初期化は正常に終了しました 2215: グラフィック管理系の終了処理は正常に終了しました 2216: Direct3D 関連の終了処理を行います 2220: 3Dデバイスの削除は正常に終了しました 2220: Direct3D 関連の終了処理は正常に終了しました 2224: メインサーフェスを破棄をします... 完了しました 2225: DirectDrawオブジェクトを解放します 2231: DirectDrawオブジェクトを解放しました 2232: DirectDraw 関連の終了処理は正常に終了しました 2235: DirectInput 関連の終了処理... 完了 2247: DirectSound の終了処理は正常に終了しました 2255: ウインドウを閉じようとしています 2270: ウインドウが破棄されようとしています 2275: ソフトを終了する準備が整いました 2275: 2279: Alloc memory dump 2280: Total size:0(0.000kb) Alloc num:0 2286: グラフィックスデバイスの名称を調べる方法を知らないので聞いてきます とりあえず小さなポリゴンに分割して表示されるようにしました あとZの値は一定以下、一定以上になると表示されなくなるようですが、更新の結果一定の幅が狭くなったようでポリゴンが画面から出る前に消えてしまうようになってしまいました・・
Re: 3Dポリゴンが表示されない ( No.7 )
名前:チルチル 日時:2009/06/14 00:13

う〜んどうすれば・・
Re: 3Dポリゴンが表示されない ( No.8 )
名前:b 日時:2009/06/14 01:03

意味のない書き込みをするのはやめましょう。 別の掲示板でも注意されたはずです。
Re: 3Dポリゴンが表示されない ( No.9 )
名前:管理人 日時:2009/06/14 05:34

グラフィックスデバイスの名称はわかりましたでしょうか? > 更新の結果一定の幅が狭くなったようでポリゴンが画面から出る前に消えてしまうようになってしまいました・・ 「一定の幅」とは表示範囲のことでしょうか? 未だに原因はわかりませんが、もしかしたら効果があるかもしれない変更をライブラリに加えてみましたので、 宜しければお試し下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) これでも駄目でしたら・・・ 宜しければチルチルさんが作成中のプロジェクトをフォルダごと圧縮して BQE00322(アットマーク)nifty.com (← (アットマーク)は @ に変換してください ) まで送っていただけないでしょうか? 実際に DrawPolygon3D にどのような値が渡されているのかを拝見すれば原因や解決方法が わかるかもしれませんので・・・
Re: 3Dポリゴンが表示されない ( No.10 )
名前:チルチル 日時:2009/06/14 15:04

「一定の幅」は近づきすぎたり遠くなりすぎたりすると表示されなくなる、でしょうかね・・ X,Yの値も一定以上になるとポリゴンに亀裂ができてしまいます・・ Zバッファも使うと表示されなくなります・・ プロジェクト送りましたが、かなり内容が痛いです・・ ショックを受けないでください・・
Re: 3Dポリゴンが表示されない ( No.11 )
名前:チルチル 日時:2009/06/14 15:23

なんかメールの添付限界ギリギリだったんですが届いたでしょうか?
Re: 3Dポリゴンが表示されない ( No.12 )
名前:チルチル 日時:2009/06/14 15:35

とりあえず変更した方で再構築すると表示がおかしくなったので、もう一回最新版のリンクをお願いします・・
Re: 3Dポリゴンが表示されない ( No.13 )
名前:管理人 日時:2009/06/14 17:57

メールは無事届きました 送って頂いたプロジェクトをこちらで実行したところ、私の環境でも正常に 描画されていませんでした、申し訳ありません 私の環境で正常に描画されるようにしたバージョンをアップしましたので、 宜しければお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe //VC用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe //BCC用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) > 「一定の幅」は近づきすぎたり遠くなりすぎたりすると表示されなくなる、でしょうかね・・ クリッピングが原因だと思われますが、私の環境では正常に描画されるようにした後は 該当すると思われる現象は確認できませんでした 今回の修正でこちらも改善されたかもしれません > X,Yの値も一定以上になるとポリゴンに亀裂ができてしまいます・・ こちらはわかりませんでした・・・ その現象が発生する状態のソースを頂ければ原因が判るかもしれません > Zバッファも使うと表示されなくなります・・ こちらは常時 SetWriteZBufferFlag(TRUE); の状態にしているのが原因です SetWriteZBufferFlag(TRUE); の設定になっている間は DrawPolygon3D 等の 3Dポリゴン描画関数以外の DrawGraph のような2D描画関数でもZバッファが 更新されます とりあえず DrawPolygon3D が使用されている部分を SetWriteZBufferFlag(TRUE); DrawPolygon が使用されている部分 SetWriteZBufferFlag(FALSE); という風に囲うことで何も描画されない状態は改善することが出来ると思います ただ、半透明の描画物の後に半透明の描画物より奥にあるものを描画すると Zバッファの効果で半透明の描画物に隠れてしまいますので、見た目的には ZバッファをOFFにした方が正常に見えます この現象を回避するにはまず不透明の描画物を描画し、その後半透明の要素を 持つ描画物を奥から順に描画する必要があります

Page: 1 | 2 |