亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? texture.cpp

?? 射擊游戲?qū)嵗?。派生出游戲所需要得游戲?qū)嶓w
?? CPP
字號(hào):
#include "texture.h"

// LoadBitmapFile
// desc: Returns a pointer to the bitmap image of the bitmap specified
//       by filename. Also returns the bitmap header information.
//		 No support for 8-bit bitmaps.
unsigned char *CTexture::LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader)
{
	FILE *filePtr;							// the file pointer
	BITMAPFILEHEADER	bitmapFileHeader;		// bitmap file header
	unsigned char		*bitmapImage;			// bitmap image data
	int				imageIdx = 0;			// image index counter
	unsigned char		tempRGB;				// swap variable

	// open filename in "read binary" mode
	filePtr = fopen(filename, "rb");
	if (filePtr == NULL)
		return NULL;

	// read the bitmap file header
	fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
	
	// verify that this is a bitmap by checking for the universal bitmap id
	if (bitmapFileHeader.bfType != BITMAP_ID)
	{
		fclose(filePtr);
		return NULL;
	}

	// read the bitmap information header
	fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr);

	// move file pointer to beginning of bitmap data
	fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);

	// allocate enough memory for the bitmap image data
	bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage);

	// verify memory allocation
	if (!bitmapImage)
	{
		free(bitmapImage);
		fclose(filePtr);
		return NULL;
	}

	// read in the bitmap image data
	fread(bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr);

	// make sure bitmap image data was read
	if (bitmapImage == NULL)
	{
		fclose(filePtr);
		return NULL;
	}

	// swap the R and B values to get RGB since the bitmap color format is in BGR
	for (imageIdx = 0; imageIdx < (int)bitmapInfoHeader->biSizeImage; imageIdx+=3)
	{
		tempRGB = bitmapImage[imageIdx];
		bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
		bitmapImage[imageIdx + 2] = tempRGB;
	}

	// close the file and return the bitmap image data
	fclose(filePtr);
	return bitmapImage;
}

/*****************************************************************************
 LoadBitmapFileWithAlpha

 Loads a bitmap file normally, and then adds an alpha component to use for
 blending
*****************************************************************************/
unsigned char *CTexture::LoadBitmapFileWithAlpha(char *filename, BITMAPINFOHEADER *bitmapInfoHeader)
{
  unsigned char *bitmapImage = LoadBitmapFile(filename, bitmapInfoHeader);
  unsigned char *bitmapWithAlpha = (unsigned char *)malloc(bitmapInfoHeader->biSizeImage * 4 / 3);

  // loop through the bitmap data
  for (int src = 0, dst = 0; src < bitmapInfoHeader->biSizeImage; src +=3, dst +=4)
  {
    // if the pixel is black, set the alpha to 0. Otherwise, set it to 255.
    if (bitmapImage[src] == 0 && bitmapImage[src+1] == 0 && bitmapImage[src+2] == 0)
      bitmapWithAlpha[dst+3] = 0;
    else
      bitmapWithAlpha[dst+3] = 0xFF;

    // copy pixel data over
    bitmapWithAlpha[dst] = bitmapImage[src];
    bitmapWithAlpha[dst+1] = bitmapImage[src+1];
    bitmapWithAlpha[dst+2] = bitmapImage[src+2];
  }

  free(bitmapImage);

  return bitmapWithAlpha;
} // end LoadBitmapFileWithAlpha()

// LoadPCXFile()
// desc: loads a PCX file into memory
unsigned char *CTexture::LoadPCXFile(char *filename, PCXHEADER *pcxHeader)
{
     int idx = 0;                  // counter index
     int c;                             // used to retrieve a char from the file
     int i;                             // counter index
     int numRepeat;      
     FILE *filePtr;                // file handle
     int width;                         // pcx width
     int height;                        // pcx height
     unsigned char *pixelData;     // pcx image data
     unsigned char *paletteData;   // pcx palette data

     // open PCX file
     filePtr = fopen(filename, "rb");
     if (filePtr == NULL)
          return NULL;

     // retrieve first character; should be equal to 10
     c = getc(filePtr);
     if (c != 10)
     {
          fclose(filePtr);
          return NULL;
     }

     // retrieve next character; should be equal to 5
     c = getc(filePtr);
     if (c != 5)
     {
          fclose(filePtr);
          return NULL;
     }

     // reposition file pointer to beginning of file
     rewind(filePtr);

     // read 4 characters of data to skip
     fgetc(filePtr);
     fgetc(filePtr);
     fgetc(filePtr);
     fgetc(filePtr);

     // retrieve leftmost x value of PCX
     pcxHeader->xMin = fgetc(filePtr);       // loword
     pcxHeader->xMin |= fgetc(filePtr) << 8; // hiword

     // retrieve bottom-most y value of PCX
     pcxHeader->yMin = fgetc(filePtr);       // loword
     pcxHeader->yMin |= fgetc(filePtr) << 8; // hiword

     // retrieve rightmost x value of PCX
     pcxHeader->xMax = fgetc(filePtr);       // loword
     pcxHeader->xMax |= fgetc(filePtr) << 8; // hiword

     // retrieve topmost y value of PCX
     pcxHeader->yMax = fgetc(filePtr);       // loword
     pcxHeader->yMax |= fgetc(filePtr) << 8; // hiword

     // calculate the width and height of the PCX
     width = pcxHeader->xMax - pcxHeader->xMin + 1;
     height = pcxHeader->yMax - pcxHeader->yMin + 1;

     // allocate memory for PCX image data
     pixelData = (unsigned char*)malloc(width*height);

     // set file pointer to 128th byte of file, where the PCX image data starts
     fseek(filePtr, 128, SEEK_SET);
     
     // decode the pixel data and store
     while (idx < (width*height))
     {
          c = getc(filePtr);
          if (c > 0xbf)
          {
               numRepeat = 0x3f & c;
               c = getc(filePtr);

               for (i = 0; i < numRepeat; i++)
               {
                    pixelData[idx++] = c;
               }
          }
          else
               pixelData[idx++] = c;

          fflush(stdout);
     }

     // allocate memory for the PCX image palette
     paletteData = (unsigned char*)malloc(768);

     // palette is the last 769 bytes of the PCX file
     fseek(filePtr, -769, SEEK_END);

     // verify palette; first character should be 12
     c = getc(filePtr);
     if (c != 12)
     {
          fclose(filePtr);
          return NULL;
     }

     // read and store all of palette
     for (i = 0; i < 768; i++)
     {
          c = getc(filePtr);
          paletteData[i] = c;
     }

     // close file and store palette in header
     fclose(filePtr);
     pcxHeader->palette = paletteData;

     // return the pixel image data
     return pixelData;
}

// LoadPCXTexture()
// desc: loads a PCX image file as a texture
void CTexture::LoadPCXTexture(char *filename)
{
     PCXHEADER texInfo;            // header of texture
//     texture_t *thisTexture;       // the texture
     unsigned char *unscaledData;// used to calculate pcx
     int i;                             // index counter
     int j;                             // index counter
     int w;                         // width of texture
     int h;                        // height of texture

     // load the PCX file into the texture struct
     data = LoadPCXFile(filename, &texInfo);
     if (data == NULL)
     {
          free(data);
     //     return NULL;
     }

     // store the texture information
     palette = texInfo.palette;
     width = texInfo.xMax - texInfo.xMin + 1;
     height = texInfo.yMax - texInfo.yMin + 1;
     textureType = PCX;

	w = width;
     h = height;

     // allocate memory for the unscaled data
     unscaledData = (unsigned char*)malloc(w*h*4);

     // store the unscaled data via the palette
     for (j = 0; j < h; j++) 
     {
          for (i = 0; i < w; i++) 
          {
               unscaledData[4*(j*w+i)+0] = (unsigned char)palette[3*data[j*w+i]+0];
               unscaledData[4*(j*w+i)+1] = (unsigned char)palette[3*data[j*w+i]+1];
               unscaledData[4*(j*w+i)+2] = (unsigned char)palette[3*data[j*w+i]+2];
               unscaledData[4*(j*w+i)+3] = (unsigned char)255;
          }
     }

     // find width and height's nearest greater power of 2

     // find width's
     i = 0;
     while (w)
     {
          w /= 2;
          i++;
     }
     scaledHeight = (long)pow(2, i-1);

     // find height's
     i = 0;
     while (h)
     {
          h /= 2;
          i++;
     }
     scaledWidth = (long)pow(2, i-1);

     // clear the texture data
     if (data != NULL)
     {
          free(data);
          data = NULL;
     }

     // reallocate memory for the texture data
     data = (unsigned char*)malloc(scaledWidth*scaledHeight*4);
     
     // use the GL utility library to scale the texture to the unscaled dimensions
     gluScaleImage(GL_RGBA, this->width, this->height, GL_UNSIGNED_BYTE, unscaledData, scaledWidth, scaledHeight, GL_UNSIGNED_BYTE, data);

	free(unscaledData);
//     return thisTexture;

}

// LoadBMPTexture()
// desc: loads a texture of the BMP format
void CTexture::LoadBMPTexture(char *filename)
{
	BITMAPINFOHEADER texInfo;		// BMP header

	// store BMP data in texture
	data = LoadBitmapFileWithAlpha(filename, &texInfo);
	if (data == NULL)
	{
		free(data);
	}
	
	// store texture information
	width = texInfo.biWidth;
	height = texInfo.biHeight;
	palette = NULL;
	scaledHeight = 0;
	scaledWidth = 0;
	textureType = BMP;
}

// LoadTexture()
// desc: loads a texture given the filename
void CTexture::LoadTexture(char *filename)
{
	char *extStr;

	// get extension from filename
	extStr = strchr(filename, '.');
	extStr++;

	// set the texture type based on extension of filename
	if ((strcmpi(extStr, "BMP") == 0) || (strcmpi(extStr, "bmp") == 0))
		LoadBMPTexture(filename);
	else if ((strcmpi(extStr, "PCX") == 0) || (strcmpi(extStr, "pcx") == 0) )
		LoadPCXTexture(filename);
	
	else if ((strcmpi(extStr, "TGA") == 0) || (strcmpi(extStr, "tga") == 0) )
		LoadTGATexture(filename);
}

// LoadTGAFile()
// desc: loads a TGA file defined by filename
unsigned char *CTexture::LoadTGAFile(char *filename, TGAHEADER *tgaHeader)
{
	FILE *filePtr;
	unsigned char ucharBad;	// garbage data
	short int	sintBad;		// garbage data
	long	imageSize;		// size of TGA image
	int colorMode;			// 4 for RGBA, 3 for RGB
	long imageIdx;			// counter variable
	unsigned char colorSwap;	// swap variable
	unsigned char *imageData;	// the TGA data

	// open the TGA file
	filePtr = fopen(filename, "rb");
	if (!filePtr)
		return NULL;
	
	// read first two bytes of garbage
	fread(&ucharBad, sizeof(unsigned char), 1, filePtr);
	fread(&ucharBad, sizeof(unsigned char), 1, filePtr);

	// read in the image type
	fread(&tgaHeader->imageTypeCode, sizeof(unsigned char), 1, filePtr);

	// for our purposes, the image type should be either a 2 or a 3
	if ((tgaHeader->imageTypeCode != 2) && (tgaHeader->imageTypeCode != 3))
	{
		fclose(filePtr);
		return NULL;
	}

	// read 13 bytes of garbage data
	fread(&sintBad, sizeof(short int), 1, filePtr);
	fread(&sintBad, sizeof(short int), 1, filePtr);
	fread(&ucharBad, sizeof(unsigned char), 1, filePtr);
	fread(&sintBad, sizeof(short int), 1, filePtr);
	fread(&sintBad, sizeof(short int), 1, filePtr);

	// read image dimensions
	fread(&tgaHeader->imageWidth, sizeof(short int), 1, filePtr);
	fread(&tgaHeader->imageHeight, sizeof(short int), 1, filePtr);

	// read bit depth
	fread(&tgaHeader->bitCount, sizeof(unsigned char), 1, filePtr);

	// read garbage
	fread(&ucharBad, sizeof(unsigned char), 1, filePtr);

	// colormode -> 3 = BGR, 4 = BGRA
	colorMode = tgaHeader->bitCount / 8;
	imageSize = tgaHeader->imageWidth * tgaHeader->imageHeight * colorMode;

	// allocate memory for image data
	imageData = (unsigned char*)malloc(sizeof(unsigned char)*imageSize);

	// read image data
	fread(imageData, sizeof(unsigned char), imageSize, filePtr);

	// change BGR to RGB so OpenGL can use the data
	for (imageIdx = 0; imageIdx < imageSize; imageIdx += colorMode)
	{
		colorSwap = imageData[imageIdx];
		imageData[imageIdx] = imageData[imageIdx+2];
		imageData[imageIdx + 2] = colorSwap;
	}

	// close the file
	fclose(filePtr);

	return imageData;
}

// LoadTGATexture()
// desc: loads a TGA as a texture
void CTexture::LoadTGATexture(char *filename)
{
	TGAHEADER tga;		// BMP header

	// store BMP data in texture
	data = LoadTGAFile(filename, &tga);
	if (data == NULL)
	{
		free(data);
	}
	
	// store texture information
	width = tga.imageWidth;
	height = tga.imageHeight;
	palette = NULL;
	scaledHeight = 0;
	scaledWidth = 0;
	tgaImageCode = tga.imageTypeCode;
	bitDepth = tga.bitCount;
	textureType = TGA;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久www成人免费毛片麻豆| 亚洲电影第三页| 亚洲成人精品在线观看| 激情欧美一区二区三区在线观看| 99久久99久久精品国产片果冻| 日韩小视频在线观看专区| 国产精品不卡在线观看| 狠狠色丁香婷婷综合久久片| 欧美美女视频在线观看| 亚洲男女一区二区三区| 粉嫩在线一区二区三区视频| 日韩午夜激情av| 亚洲国产综合在线| 在线亚洲高清视频| 亚洲欧洲性图库| 成人精品一区二区三区四区| 欧美mv和日韩mv的网站| 日韩国产精品91| 欧美日韩一区二区在线观看| 尤物在线观看一区| 91伊人久久大香线蕉| 国产精品夫妻自拍| 99久久精品国产毛片| 国产精品久久久久久亚洲伦| 国产成人99久久亚洲综合精品| 精品少妇一区二区三区| 久久se这里有精品| 欧美一级片在线看| 日韩国产在线一| 在线不卡中文字幕| 人人爽香蕉精品| 日韩精品一区二区三区视频| 青草av.久久免费一区| 欧美一区二区在线免费观看| 日韩国产成人精品| 日韩欧美一二三| 国产资源精品在线观看| 国产网站一区二区| 成人综合婷婷国产精品久久蜜臀 | 日韩欧美国产一区在线观看| 首页综合国产亚洲丝袜| 这里只有精品免费| 久久99国产精品免费网站| 久久综合精品国产一区二区三区| 风间由美一区二区三区在线观看 | 亚洲综合色网站| 欧美午夜精品一区| 亚洲大片在线观看| 日韩色视频在线观看| 国产一区欧美一区| 国产精品女上位| 欧美性大战xxxxx久久久| 午夜精品一区二区三区免费视频 | 91视频一区二区| 亚洲综合色视频| 日韩欧美的一区二区| 国产盗摄女厕一区二区三区| 成人欧美一区二区三区视频网页| 欧美亚日韩国产aⅴ精品中极品| 七七婷婷婷婷精品国产| 国产亚洲欧美色| 欧美亚洲国产bt| 国产精品影音先锋| 亚洲乱码中文字幕综合| 日韩丝袜情趣美女图片| 国产xxx精品视频大全| 一二三四社区欧美黄| 日韩精品专区在线影院重磅| 波多野结衣91| 另类调教123区| 亚洲日本一区二区| 91精品国产福利在线观看| 懂色av一区二区夜夜嗨| 日韩国产欧美在线播放| 亚洲美女视频在线观看| 久久综合狠狠综合久久激情| 精品视频在线免费观看| 不卡的电视剧免费网站有什么| 日韩精品久久理论片| 中文字幕一区二区不卡| 欧美mv日韩mv国产网站app| 欧美伊人久久久久久久久影院| 国产精品一区二区91| 蜜桃视频在线观看一区| 亚洲男人天堂av| 中文字幕成人网| 日韩免费看网站| 欧美日韩成人综合在线一区二区| 国产不卡视频一区二区三区| 奇米色777欧美一区二区| 亚洲一区二区三区中文字幕| 中文字幕精品一区二区精品绿巨人 | 在线不卡a资源高清| 91丨九色丨蝌蚪富婆spa| 国产在线视视频有精品| 蜜桃久久久久久| 婷婷丁香久久五月婷婷| 一区二区成人在线视频| 中文字幕一区二区三区不卡在线 | 日本一区中文字幕| 亚洲国产精品一区二区www| 国产精品国产自产拍高清av| 国产视频一区在线观看| 精品久久五月天| 精品国产乱码久久久久久1区2区| 91精品国产色综合久久不卡蜜臀| 欧美揉bbbbb揉bbbbb| 色狠狠色噜噜噜综合网| 99热精品国产| 91小视频在线免费看| 91天堂素人约啪| 91片黄在线观看| 91久久精品一区二区三| 在线一区二区视频| 在线观看日韩国产| 欧美日韩国产影片| 日韩一区二区精品在线观看| 欧美一二三区精品| 精品少妇一区二区三区日产乱码 | 欧美不卡一区二区三区四区| 久久综合九色综合97婷婷女人| 久久久久九九视频| 国产精品毛片久久久久久久| 中文字幕日韩精品一区| 自拍偷拍亚洲欧美日韩| 亚洲综合丁香婷婷六月香| 一区二区免费在线播放| 性欧美大战久久久久久久久| 毛片基地黄久久久久久天堂| 国产精品一区二区三区四区| 丁香婷婷综合色啪| 91香蕉视频在线| 欧美日韩视频在线第一区 | 亚洲欧美日韩综合aⅴ视频| 亚洲资源在线观看| 人妖欧美一区二区| 成人在线综合网站| 欧美日韩视频一区二区| 欧美白人最猛性xxxxx69交| 中文字幕中文字幕一区二区 | 韩国精品一区二区| 豆国产96在线|亚洲| 精品视频在线看| 国产校园另类小说区| 亚洲女与黑人做爰| 日韩av电影一区| 99视频一区二区| 欧美一区二区免费观在线| 欧美高清在线精品一区| 亚洲大片免费看| 成人午夜电影小说| 欧美日韩视频在线一区二区| 久久久久9999亚洲精品| 一区二区三区成人在线视频| 免费精品视频在线| 色婷婷久久久久swag精品| 精品久久人人做人人爰| 亚洲免费成人av| 国产精品一二一区| 欧美日韩一区精品| 国产精品久久久久久久久动漫 | 亚欧色一区w666天堂| 大白屁股一区二区视频| 欧美一级午夜免费电影| 亚洲黄色性网站| 懂色一区二区三区免费观看 | 国产精品乡下勾搭老头1| 在线看日韩精品电影| 久久精品人人爽人人爽| 亚洲成人福利片| 色婷婷亚洲婷婷| 久久精品一区二区三区不卡牛牛| 亚洲国产精品久久艾草纯爱| 不卡一区二区在线| 精品久久久久久久久久久院品网| 一区二区三区在线观看国产| 国产91精品在线观看| 久久综合九色综合久久久精品综合| 亚洲一区二区av在线| 91在线免费视频观看| 久久久精品tv| 韩国女主播成人在线| 日韩午夜在线观看| 日本成人超碰在线观看| 欧美精品一级二级| 亚洲午夜激情网页| 色狠狠色狠狠综合| 亚洲精品乱码久久久久久| 成人av在线影院| 中文字幕第一页久久| 国产成人自拍网| 国产丝袜美腿一区二区三区| 国产美女主播视频一区| 欧美成人官网二区| 国产一区二区h| 久久久久久久综合色一本| 国产自产v一区二区三区c| 精品三级在线观看| 国产精品一区二区三区四区| 国产亚洲一区二区在线观看|