プロが教えるわが家の防犯対策術!

C言語で透視投影の図形(3次元)を作成しました。
プログラムは下のような感じになりました。
static struct {int f; double x,y,z;}a[]
...(略)
for(j=0; a[j].f!=-999; j++){//-999が来るまで描画
 h=-a[j].x*sin(ay)/vp+a[j].z*cos(ay)/vp+n/vp+1;
 px=(a[j].x*cos(ay)+a[j].z*sin(ay)+1)/h;
 py=(a[j].y+m)/h;
  if(a[j].f==-1)//-1が先頭にあるなら
   pDC->MoveTo(px+200,-py+200);//描画の始点
  else//そうでないなら
   pDC->LineTo(px+200,-py+200);//線の終点
}
これに、わかっているx軸まわり・y軸まわりの回転変換マトリックスを掛け合わせた、統合変換マトリックスの式
x=x*cosθ-z*sinθ
y=x*sin^2θ+y*cosθ+z*sinθcosθ
z=x*sinθcosθ-y*sinθ+z*cos^2θ
を使用して図形を回転させたいのですが、プログラム中にはpDC->MoveTo(px+200,-py+200);のようにxとyしか出力がなく、z=をどう出力しようかと悩んでいます。また、回転を表示させるのに、
描画→回転させたx,y座標の算出→一度画面を白く塗りつぶす→描画
ということをfor文でやっていこうと思うのですが、画面がとてもちらついてしまいます。ちらつかない方法があれば教えてください。

A 回答 (1件)

3次元形状が透視変換によってどのように見えるかは、


視点位置、方向、投影面の式などから行列を作成し掛けることで求まります。
ビュー変換行列、射影変換行列等のキーワードで検索してみてください。

画面のちらつき解決にははメモリDCを使います。
メモリDC、描画等のキーワードで検索してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
考えられるキーワードで検索していましたがなかなか見つかりませんでしたので、上のキーワードを参考にして再度検索してみます。

お礼日時:2004/12/07 17:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!