Main Page Class Hierarchy Compound List File List Compound Members File Members

Texture.cc

Go to the documentation of this file.
00001 /*
00002 File: Texture.cc
00003 
00004 Function: 
00005 
00006 Author: Andrew Willmott
00007 
00008 Notes: 
00009 */
00010 
00011 #include "gcl/Texture.h"
00012 #include "gcl/Geometry.h"
00013 
00014  Texture::Texture(const Texture &tex)
00015 {
00016 flags = tex.flags;
00017 textureFile = tex.textureFile;
00018 image = tex.image;
00019 }
00020 
00021  Int Texture::Load(StrConst str)
00022 {
00023 Bool bad = true;
00024 
00025 textureFile.SetPath(SubstituteEnvVars(str));
00026 image = new RGBAImage;
00027 
00028 if (image->Load(textureFile) != 0)
00029 _Warning(
00030 "Bad texture: not found");
00031 else if (image->Width() <= 0 || !IsPowerOfTwo(image->Width()))
00032 _Warning(
00033 "Bad texture: width is not a positive power of 2");
00034 else if (image->Height() <= 0 || !IsPowerOfTwo(image->Height()))
00035 _Warning(
00036 "Bad texture: height is not a positive power of 2");
00037 else
00038 bad = false;
00039 
00040 if (bad)
00041 // dummy up a texture
00042 {
00043 Int i;
00044 image->SetSize(16, 16);
00045 image->Clear(cWhite);
00046 for (i = 0; i < 8; i++)
00047 {
00048 image->SetPixel(i, i, cRed);
00049 image->SetPixel(i, 15 - i, cRed);
00050 image->SetPixel(15 - i, i, cRed);
00051 image->SetPixel(15 - i, 15 - i, cRed);
00052 }
00053 }
00054 
00055 flags = 0;
00056 
00057 return(0);
00058 }
00059 
00060 #ifdef NEW
00061 Colour Texture::Sample(Coord c)
00062 {
00063 return(image->GetPixel(c[0] * (image->Width() - 1) + 0.5,
00064 c[1] * (image->Height() - 1) + 0.5));
00065 }
00066 #endif
00067 
00068 
00069  Colour Texture::FilterBox(const Coord &bl, const Coord &ur)
00070 {
00071 Int x, y, rx[2], ry[2];
00072 Colour clrSum;
00073 
00074 cout << "filter: " << bl << ' ' << ur << endl;
00075 rx[0] = Int(image->Width() * bl[0] + 0.5);
00076 rx[1] = Int(image->Width() * ur[0] + 0.5);
00077 ry[0] = Int(image->Height() * bl[1] + 0.5);
00078 ry[1] = Int(image->Height() * ur[1] + 0.5);
00079 
00080 if (rx[0] > rx[1])
00081 Swap(rx[0], rx[1]);
00082 if (ry[0] > ry[1])
00083 Swap(ry[0], ry[1]);
00084 
00085 cout << "rx[0] " << rx[0] << endl;
00086 cout << "rx[1] " << rx[1] << endl;
00087 cout << "ry[0] " << ry[0] << endl;
00088 cout << "ry[1] " << ry[1] << endl;
00089 
00090 clrSum = vl_0;
00091 
00092 for (y = ry[0]; y < ry[1]; y++)
00093 for (x = rx[0]; x < rx[1]; x++)
00094 clrSum += image->GetPixel(x, y);
00095 
00096 clrSum /= (ry[1] - ry[0]) * (rx[1] - rx[0]);
00097 
00098 return(clrSum);
00099 }

Generated at Sat Aug 5 00:17:04 2000 for Graphics Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000

AltStyle によって変換されたページ (->オリジナル) /