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にした方が正常に見えます
この現象を回避するにはまず不透明の描画物を描画し、その後半透明の要素を
持つ描画物を奥から順に描画する必要があります
|