3D背景で画像のつなぎ目が汚い

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

3D背景で画像のつなぎ目が汚い

#1

投稿記事 by HK » 15年前

こんにちは。たびたびお世話になっておりますHKといいます。
龍神録の3D背景に関する章を読んで一応理解できたので改造に着手しました。
龍神録の3D背景はディスプレイに関して垂直方向にしか移動しておらず
不自然(?)な感じだったので、地面に角度を持たせて色々いじったところ
本家の東方のような3D背景を再現できました。しかし、画像の位置がズレているのか、
画像と画像のつなぎ目に黒線が入ってしまってます。どう改善すればよいでしょう。

龍神録のサンプルを利用させてもらってます。
改造箇所は、Objectに新しく①角度Angle ②スクロール速度Speed
③④⑤画像を描画する位置の基準となる座標 GraphX,Y,Z という情報を持たせました。

初期化部分--------------------------------------


for(s=0; s<Ob->ObchindMax; s++){
    Ob->ObChild.x = GraphX;
  Ob->ObChild.y = GraphY + Ob->LargeY*2 * sin(Ob->Angle) * s;
  Ob->ObChild.z = GraphZ + Ob->LargeY*2 * cos(Ob->Angle) * s;
        for(i=0; i<6; i++){
    Ob->ObChild.Vertex.r = 
    Ob->ObChild.Vertex.g = 
    Ob->ObChild.Vertex.b = 
    Ob->ObChild.Vertex.a = 255;
       Ob->ObChild.Vertex.u = ou1 + ou2 * VtPm.u;
        Ob->ObChild.Vertex.v = ov1 + ov2 * VtPm.v;
        }
    }

・
・
・
---------------------------

計算部分------------------------
・
・
・
for(t=0; t<ObjectNum; t++){
  for(s=0; s<Object[t].ObchindMax; s++){
    Object[t].ObChild.z-=Object[t].Speed*cos(Object[t].Angle);
    Object[t].ObChild[s].y-=Object[t].Speed*sin(Object[t].Angle);
            for(i=0;i<6;i++){
                switch(Object[t].Type){
                    case 0://地面

         Object[t].ObChild[s].Vertex.pos.x = Object[t].ObChild[s].x + Object[t].LargeX * VtPm.x ;    
    Object[t].ObChild[s].Vertex[i].pos.y = Object[t].ObChild[s].y + Object[t].LargeY * sin( Object[t].Angle ) * VtPm[i].y ;
    Object[t].ObChild[s].Vertex[i].pos.z = Object[t].ObChild[s].z + Object[t].LargeY * cos( Object[t].Angle ) * VtPm[i].y ;
                        break;
                }
            }
        }
        if( Object[t].FromZ - Object[t].FadeFromZ <= 0 ){
            printfDx("Object[%d].Fromの設定がおかしい\n",t);
        }
        else if( Object[t].FadeToZ - Object[t].ToZ <= 0 ){
            printfDx("Object[%d].Toの設定がおかしい\n",t);
        }
        else{
            for(s=0; s<Object[t].ObchindMax; s++){
                //yが GraphY から画像1枚分小さい位置に来たら
                if(Object[t].ObChild[s].y < Object[t].GraphY - Object[t].LargeY*2 * sin(Object[t].Angle)){
   Object[t].ObChild[s].y = Object[t].GraphY + (Object[t].LargeY*2) * sin(Object[t].Angle) * (Object[t].ObchindMax-1);
   Object[t].ObChild[s].z = Object[t].GraphZ + (Object[t].LargeY*2) * cos(Object[t].Angle) * (Object[t].ObchindMax-1);
                }
       }



画像

HK

Re:3D背景で画像のつなぎ目が汚い

#2

投稿記事 by HK » 15年前

冷静に考えて、初期化の時と、近づきすぎたらZ方向奥に飛ばす処理の時に、
3ピクセルほど縁を重ねればいいんじゃないかと思って実践したところ、
改善されました。綺麗に。


でもなんで画像をピッタリ並べると隙間ができるんでしょう…


上で書き損じましたがVC++2008EEでやってます。 画像

ookami

Re:3D背景で画像のつなぎ目が汚い

#3

投稿記事 by ookami » 15年前

こんばんは。Object[t].ObChild.Vertex.pos.zのところで (zなのに、) cosの係数がYになっているので一瞬戸惑いましたが、理解しました。

HKさんの前の質問↓を探したら、プ、プロい...
http://www.play21.jp/board/formz.cgi?ac ... &rln=51671

ということで、並みのケアレスミスなんぞではないと思うので、もうDXライブラリの仕様なのではないかと。確認として、固定値で「画像をピッタリ並べ」ようとしても、やはり線が出てしまうか、あとは元画像のサイズによって結果が変わらないか、くらいですかね。

HK

Re:3D背景で画像のつなぎ目が汚い

#4

投稿記事 by HK » 15年前

返信ありがとうございます!

何度か試したところ、やはり画像の端っこは少し重ねたほうが綺麗になるっぽいです。
んー

Justy

Re:3D背景で画像のつなぎ目が汚い

#5

投稿記事 by Justy » 15年前

>やはり画像の端っこは少し重ねたほうが綺麗になるっぽいです
 普通はそんなことはないはず、なんですけどね。
 
 黒線というのは、添付のキャプチャの自機の下に入っている黒ラインですか?
 うーん、まず確認する項目としては
 
・ テクスチャサイズが 2のべき乗かどうか
・ IniObjに渡している ImgX1 / ImgY1 / ImgX2 / ImgY2 / ImgSizeの値は合っているかどうか

ってところでしょうか。

ookami

Re:3D背景で画像のつなぎ目が汚い

#6

投稿記事 by ookami » 15年前

自分の記事を読み返してみたら「プロならケアレスミスしない」みたいな超理論を展開してしまってました。自分の首を絞めないうちに取り消します。すみませんでした。

あらためて添付を見てみると、x方向にはピッタリくっついてますね?

したら、y,zの初期値に問題がある可能性はないですか?

閉鎖

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