ポリゴンでのグラフィックの表示について質問させていただきます。
ゲームの背景に立体背景を使いたいと思い、DrawPolygon3Dの三角形ポリゴンを使用して描画を行っています。
同じ画像の敷き詰めに成功しスクロールにも成功しているのですが、なぜか画像がモノクロで表示されてしまいます。
画像のフェードインとフェードアウトには成功しているのでアルファ成分は反映されているのだと思います。
描画部分のソースコードは以下の通りです。
#include "../resource/dxlib/DxLib.h"
#include <stdio.h>
#include <math.h>
#include "../header/stage3.h"
#define PI 3.141592
#define STT_MAX 21
#define STT_NUM_MAX 20
typedef struct{
float x,y;
float u,v;
}stp_t;
stp_t stp[6]={{-1,1,0,0},{1,1,1,0},{-1,-1,0,1},{1,-1,1,1},{-1,-1,0,1},{1,1,1,0}};
typedef struct{
float x,y,z;
VERTEX3D sttcs[6];
}sttc_t;
typedef struct{
int Img;
int Imgsi;
int Imgx1;
int Imgy1;
int Imgx2;
int Imgy2;
int Type;
int sidlo;
float six,siy;
float grx,gry;
float fromz,toz;
float fadfromz,fadtoz;
float zhaba;
int sttmax;
int resetf;
sttc_t srtc[STT_MAX];
}stt_t;
int sttnum;
stt_t stt[STT_NUM_MAX];
void st3ini(){
if(stinif==0){
stt[0].Img=LoadGraph("../東方海恩塔/resource/graph/stageback/stage3/water.png");
stt[0].Imgsi=256;
stt[0].Imgx1=0;
stt[0].Imgx2=256;
stt[0].Imgy1=0;
stt[0].Imgy2=256;
stt[0].six=100;
stt[0].siy=100;
stt[0].fromz=1500;
stt[0].fadfromz=1000;
stt[0].fadtoz=-450;
stt[0].toz=-500;
stt[0].zhaba=stt[0].siy;
stt[0].Type=1;
stt[0].sidlo=5;
stt[0].resetf=0;
sttnum++;
stinif=1;
for(int i=0;i<20;i++){
float ou1 = (float)stt[i].Imgx1 / stt[i].Imgsi, ou2 = (float)(stt[i].Imgx2 -stt[i].Imgx1) / stt[i].Imgsi;
float ov1 = (float)stt[i].Imgy1 / stt[i].Imgsi, ov2 = (float)(stt[i].Imgy2 -stt[i].Imgy1) / stt[i].Imgsi;
switch(stt[i].Type){
case 0:
break;
case 1:
for(int t=0;stt[i].fromz+stt[i].zhaba-t*stt[i].zhaba>stt[i].toz;t++){
for(int s=0;s<stt[i].sidlo;s++){
stt[i].srtc[stt[i].sidlo*t+s].x=stt[i].six*s;
stt[i].srtc[stt[i].sidlo*t+s].y=0/*stt[i].fromz+stt[i].siy-t*stt[i].siy*/;
stt[i].srtc[stt[i].sidlo*t+s].z=stt[i].fromz+stt[i].zhaba-stt[i].zhaba*t;
for(int l=0;l<6;l++){
stt[i].srtc[stt[i].sidlo*t+s].sttcs[l].u=ou1+ou2*stp[l].u;
stt[i].srtc[stt[i].sidlo*t+s].sttcs[l].v=ov1+ov2*stp[l].v;
stt[i].srtc[stt[i].sidlo*t+s].sttcs[l].dif=GetColorU8(255,255,255,255);
}
}
}
break;
}
}
}
}
void stback(){
for(int t=0;t<sttnum;t++){
for(int s=0;stt[t].fromz+stt[t].zhaba-s*stt[t].zhaba>stt[t].toz;s++){
for(int l=0;l<stt[t].sidlo;l++){
stt[t].srtc[stt[t].sidlo*s+l].z-=20;
for(int i=0;i<6;i++){
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].pos.x=stt[t].srtc[stt[t].sidlo*s+l].x+stt[t].six/2*stp[i].x+50;
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].pos.y=stt[t].srtc[stt[t].sidlo*s+l].y/*+stwat.siy*stp[i].y*/;
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].pos.z=stt[t].srtc[stt[t].sidlo*s+l].z+stt[t].zhaba/2*stp[i].y;
}
}
}
for(int s=0;stt[t].fromz+stt[t].zhaba-s*stt[t].zhaba>stt[t].toz;s++){
for(int l=0;l<stt[t].sidlo;l++){
for(int i=0;i<6;i++){
backwatcz=stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].pos.z;
if(backwatcz<stt[t].toz){
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].dif=GetColorU8(255,255,255,0);
}
else if(stt[t].toz<backwatcz && backwatcz<=stt[t].fadtoz){
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].dif=GetColorU8(255,255,255,(unsigned char)(255.0f/(stt[t].fadtoz-stt[t].toz)*(backwatcz-stt[t].toz)));
}
else if(stt[t].fadtoz<backwatcz && backwatcz<=stt[t].fadfromz){
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].dif=GetColorU8(255,255,255,255);
}
else if(stt[t].fadfromz<backwatcz && backwatcz<=stt[t].fromz){
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].dif=GetColorU8(255,255,255,(unsigned char)(255.0f/(stt[t].fromz-stt[t].fadfromz)*(stt[t].fromz-backwatcz)));
}
else if(backwatcz<stt[t].fromz){
stt[t].srtc[stt[t].sidlo*s+l].sttcs[i].dif=GetColorU8(255,255,255,0);
}
}
if(stt[t].srtc[stt[t].sidlo*s+l].z<stt[t].toz-stt[t].zhaba*0.5f){
float sub=(stt[t].toz-stt[t].zhaba*0.5f)-stt[t].srtc[stt[t].sidlo*s+l].z;
stt[t].srtc[stt[t].sidlo*s+l].z=stt[t].fromz+stt[t].zhaba*0.5f-sub;
}
if(stt[t].srtc[stt[t].sidlo*s+l].z>stt[t].fromz+stt[t].zhaba*0.5f){
float sub=stt[t].srtc[stt[t].sidlo*s+l].z-(stt[t].fromz+stt[t].zhaba*0.5f);
stt[t].srtc[stt[t].sidlo*s+l].z=stt[t].toz-stt[t].zhaba*0.5f+sub;
}
}
}
}
SetDrawMode( DX_DRAWMODE_BILINEAR );
for(int t=0;t<sttnum;t++){
for(int s=0;stt[t].fromz+stt[t].zhaba-s*stt[t].zhaba>stt[t].toz;s++){
for(int l=0;l<stt[t].sidlo;l++){
DrawPolygon3D(stt[t].srtc[stt[t].sidlo*s+l].sttcs,2,stt[t].Img,TRUE);
}
}
}
VERTEX3D Vertex[ 6 ] ;
Vertex[ 0 ].pos = VGet( 100.0f, 100.0f, 0.0f ) ;
Vertex[ 0 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 0 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 0 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 0 ].u = 0.0f ;
Vertex[ 0 ].v = 0.0f ;
Vertex[ 0 ].su = 0.0f ;
Vertex[ 0 ].sv = 0.0f ;
Vertex[ 1 ].pos = VGet( 200.0f, 100.0f, 0.0f ) ;
Vertex[ 1 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 1 ].dif = GetColorU8( 255, 255,255,255 ) ;
Vertex[ 1 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 1 ].u = 1.0f ;
Vertex[ 1 ].v = 0.0f ;
Vertex[ 1 ].su = 0.0f ;
Vertex[ 1 ].sv = 0.0f ;
Vertex[ 2 ].pos = VGet( 100.0f, 200.0f, 0.0f ) ;
Vertex[ 2 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 2 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 2 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 2 ].u = 0.0f ;
Vertex[ 2 ].v = 1.0f ;
Vertex[ 2 ].su = 0.0f ;
Vertex[ 2 ].sv = 0.0f ;
Vertex[ 3 ].pos = VGet( 100.0f, 200.0f, 0.0f ) ;
Vertex[ 3 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 3 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 3 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 3 ].u = 0.0f ;
Vertex[ 3 ].v = 1.0f ;
Vertex[ 3 ].su = 0.0f ;
Vertex[ 3 ].sv = 0.0f ;
Vertex[ 4 ].pos = VGet( 200.0f, 100.0f, 0.0f ) ;
Vertex[ 4 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 4 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 4 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 4 ].u = 1.0f ;
Vertex[ 4 ].v = 0.0f ;
Vertex[ 4 ].su = 0.0f ;
Vertex[ 4 ].sv = 0.0f ;
Vertex[ 5 ].pos = VGet( 200.0f, 200.0f, 0.0f ) ;
Vertex[ 5 ].norm = VGet( 0.0f, 0.0f, -1.0f ) ;
Vertex[ 5 ].dif = GetColorU8( 255,255,255,255 ) ;
Vertex[ 5 ].spc = GetColorU8( 0, 0, 0, 0 ) ;
Vertex[ 5 ].u = 1.0f ;
Vertex[ 5 ].v = 1.0f ;
Vertex[ 5 ].su = 0.0f ;
Vertex[ 5 ].sv = 0.0f ;
DrawPolygon3D(Vertex,2,stt[0].Img,TRUE);
DrawFormatString(400,240,GetColor(1,1,1),"[0] %.d %.d %.d %.d",stt[0].srtc[0].sttcs[0].dif.r,stt[0].srtc[0].sttcs[0].dif.b,stt[0].srtc[0].sttcs[0].dif.g,stt[0].srtc[0].sttcs[0].dif.a);
DrawFormatString(400,270,GetColor(1,1,1),"[1] %.d %.d %.d %.d",stt[0].srtc[0].sttcs[1].dif.r,stt[0].srtc[0].sttcs[1].dif.b,stt[0].srtc[0].sttcs[1].dif.g,stt[0].srtc[0].sttcs[1].dif.a);
DrawFormatString(400,300,GetColor(1,1,1),"[2] %.d %.d %.d %.d",stt[0].srtc[0].sttcs[2].dif.r,stt[0].srtc[0].sttcs[2].dif.b,stt[0].srtc[0].sttcs[2].dif.g,stt[0].srtc[0].sttcs[2].dif.a);
DrawFormatString(400,330,GetColor(1,1,1),"[3] %.d %.d %.d %.d",stt[0].srtc[0].sttcs[3].dif.r,stt[0].srtc[0].sttcs[3].dif.b,stt[0].srtc[0].sttcs[3].dif.g,stt[0].srtc[0].sttcs[3].dif.a);
DrawFormatString(400,360,GetColor(1,1,1),"[4] %.d %.d %.d %.d",stt[0].srtc[0].sttcs[4].dif.r,stt[0].srtc[0].sttcs[4].dif.b,stt[0].srtc[0].sttcs[4].dif.g,stt[0].srtc[0].sttcs[4].dif.a);
DrawFormatString(400,390,GetColor(1,1,1),"[5] %.d %.d %.d %.d",stt[0].srtc[0].sttcs[5].dif.r,stt[0].srtc[0].sttcs[5].dif.b,stt[0].srtc[0].sttcs[5].dif.g,stt[0].srtc[0].sttcs[5].dif.a);
}
ソースコードの間違いなどのご指摘お願いします。