2 つの画像があります。どちらも 24 色の .bmp 32x32 ピクセルです。一方を OpenGL でロードすると機能し、もう一方を OpenGL でロードすると、黒と白の線だけが表示されます。
画像の1つを表示させないために、他に何か違う可能性はありますか?
これはコードでは機能しません:
これはコードで機能します:
情報サイズとファイルヘッダーサイズも確認しました。どちらの画像も、情報では 40、ファイル サイズでは 14 でした。画像の biWidth と BiHeight はどちらも 32x32 のままです。
これは、画像の草で六角形をテクスチャリングする方法を示しています
//GRASS
glTexImage2d(GL_TEXTURE_2D,Level,Colorcomps,sGrass,tGrass,Border,GL_RGB,GL_UNSIGNED_BYTE,grass);
glLoadName(1);
glBegin(GL_POLYGON);
for I := 0 to 6 do
begin
glTexCoord2f(COS(i/6.0*2*PI),SIN(i/6.0*2*pi));
glVertex3f((((COS(i/6.0*2*PI)/12)+offsetx)+0.2),((SIN(i/6.0*2*pi)/12)+offsety),-2);
end;
glEnd;
grass
はポインターであり、次のように入力されます。
grass := Readbitmap('Grass.bmp',sGrass,tGrass);
そして、どうすれば画像データを取得できますか(他の画像でも機能するので問題ありません。2つの画像を異なるものにする画像については別のことだと思います)?
Function TFCreateMap.ReadBitmap(const FilePath:String;var sWidth,tHeight:GLsizei):pointer;
const
szh=SizeOf(TBitmapFileHeader);
szi=SizeOf(TBitmapInfoHeader);
var
bmpfile: file;
bfh:TBitmapFileHeader;
bmi:TBitmapInfoHeader;
t:byte;
x,
fpos,
size: integer;
begin
assignfile(bmpfile,FilePath);
reset(bmpfile,1);
size := FileSize(bmpfile)-szh-szi;
blockread(bmpfile,bfh,szh);
if bfh.bfType<>$4D42 then
raise EinvalidGraphic.Create('Invalid Bitmap');
blockread(bmpfile,bmi,szi);
with bmi do
begin
sWidth := biWidth;
tHeight := biHeight;
end;
getmem(result,size);
blockread(bmpfile,result^,size);
for x := 0 to sWidth*tHeight-1 do
with TWrap(result^)[x] do
begin
t := r;
r := b;
b := t;
end;
end;