三角形(ポリゴン)を描画したら、変に…?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
KEYONN_

三角形(ポリゴン)を描画したら、変に…?

#1

投稿記事 by KEYONN_ » 15年前

3Dエンジンを作ろうとしているTKOZです。
久しぶりです。
この掲示板にはお世話になってます。
ところで、とあるWebページを参考に三角形(ポリゴン)描画をしたら、
通常のDrawTriangle関数と違って、紫色で、妙に変形したポリゴンが描画されました。
一体何が原因なのか、よく分かりません。
本当は、青いフラットシェーディングで立方体が表示されるはずなのですが
うまくいきません。

今は、デバッグ用に、両方とも描画できるようなソースにしてあります。
どうすれば、三角形(ポリゴン)が上手く描画できるでしょうか?

Main.cppの中の
void DrawTriange(vertex2 num1,vertex2 num2,vertex2 num3,int Cr)
{
	DrawTriangle( (int)num1.x,(int)num1.y,(int)num2.x,(int)num2.y,
		(int)num3.x, (int)num3.y, Cr , TRUE ) ;
	vertex cc[3];
	cc[0].x=num1.x;cc[0].y=num1.y;
	cc[1].x=num2.x;cc[1].y=num2.y;
	cc[2].x=num3.x;cc[2].y=num3.y;
	DrawSankaku(cc,3,Cr);

}
DrawTriangle()が、前まで描画していた関数です。
そして、DrawSankaku()が新しく作った関数です。
環境は、WindowsXP Pro CPU Pentium4 2.67Ghz メモリ503MB HDD33GB
VisualC++6.0です。
ソースをアップします。

Justy

Re:三角形(ポリゴン)を描画したら、変に…?

#2

投稿記事 by Justy » 15年前


>妙に変形したポリゴンが描画されました

 GraphLock~DrawPoint周りの処理をみると、すべて shortで計算をしています。
 これは、初期化時に 16bitを指定しているからだとは思いますが、
たしかウインドウモードでの色深度の変更は(デスクトップの色深度に引きずられて)
有効ではなかったような気がします。
 
 試しにフルスクリーンで実行してみてください。
(正常な DrawTriangle()はコメントアウトした方がいいかも)


 もしそれでうまくいったのなら、位置や色がおかしい原因は 1pixel 4バイトで計算するところを
2バイトで行っていたから、となります。

 さて、その場合の解決方法は4つ。

1 フルスクリーンモード専用で作る。
2 画面の色深度が 16bitでないと正常に動作しない、という条件をつける。
3 起動したら強制的に画面全体を 16bitにしてしまう。
4 画面の色深度を見て、32bitなら unsigned intで、16bitなら unsigned shortですべてを
処理するようにする。

 ってところでしょうか。

KEYONN_

Re:三角形(ポリゴン)を描画したら、変に…?

#3

投稿記事 by KEYONN_ » 15年前

Justyさん、
ありがとうございます。
フルスクリーンで上手くいきました。
これからは、
フルスクリーン専用で作る事にします。

>解決ボタン忘れてました。^^;

KEYONN_

Re:三角形(ポリゴン)を描画したら、変に…?

#4

投稿記事 by KEYONN_ » 15年前

>>3 起動したら強制的に画面全体を 16bitにしてしまう。
>>4 画面の色深度を見て、32bitなら unsigned intで、16bitなら unsigned shortですべてを
処理するようにする。
やはり、ウィンドウモードで作った方が後々便利な気がするので、すみませんが、
具体的な処理方法を教えてください。

自分で調べてみたところ、WINAPIの画面の色深度は、GetDeviceCaps()で取得できそうなのですが、
よくやり方が分かりません。

Justy

Re:三角形(ポリゴン)を描画したら、変に…?

#5

投稿記事 by Justy » 15年前

 一番簡単なのは4で、DXライブラリの GetScreenState()を使って色深度を取得、
その値によって処理を分けてしまえばいいかと。

 3の方がいいのであれば、WinAPIの

ChangeDisplaySettings 関数
ttp://msdn.microsoft.com/ja-jp/library/cc428309.aspx



ChangeDisplaySettingsEx 関数
ttp://msdn.microsoft.com/ja-jp/library/cc428310.aspx

を使って変更することができます。

KEYONN_

Re:三角形(ポリゴン)を描画したら、変に…?

#6

投稿記事 by KEYONN_ » 15年前

Justyさん、ありがとうございます。
無事に実装することが出来ました。

閉鎖

“C言語何でも質問掲示板” へ戻る