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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? terrain.cpp

?? 一個簡單的游戲設計...好好玩的
?? CPP
字號:
#include <windows.h>
#include <gl/Gl.h>
#include <gl/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "define.h"
#include "bmpLoader.h"
#include "terrain.h"

Terrain::Terrain(void)
{
	TerrainImage.data = NULL;
	TextureLoaded = false;
	WorldHeight = 0;
	WorldLength = 0;
	WorldWidth = 0;
	MaxColor = 0;
	MinColor = 0;
	V = NULL;
}

Terrain::~Terrain(void)
{
	if (TextureLoaded) glDeleteTextures (1,&TerrainTextureImage);
	if (V) {
		delete [] V;
		glDeleteLists(TerrainList,1);
	}
}

bool Terrain::LoadTerrainHeight(char *filename) 
{
	if(ImageLoad(filename, &TerrainImage)) {
		
		V = new Point[TerrainImage.sizeX * TerrainImage.sizeY];

		for(unsigned int i = 0 ; i < TerrainImage.sizeX * TerrainImage.sizeY ; i++) {
			unsigned int Temp = (unsigned int) TerrainImage.data[3 * i] << 16 | (unsigned int) TerrainImage.data[3 * i + 1] << 8 | (unsigned int) TerrainImage.data[3 * i + 2];
			if ( Temp > MaxColor ) MaxColor = Temp;
			if ( Temp < MinColor ) MinColor = Temp;
		}

		WorldWidth = TerrainImage.sizeX;
		WorldLength = TerrainImage.sizeY;
		WorldHeight = WorldHeight ? WorldHeight : 15;

		for(unsigned int i = 0 ; i < TerrainImage.sizeX; i++) {
			for(unsigned int j = 0 ; j < TerrainImage.sizeY; j++) {
				unsigned int Temp = (unsigned int) TerrainImage.data[3 * (i * TerrainImage.sizeY + j)] << 16 | (unsigned int) TerrainImage.data[3 * (i * TerrainImage.sizeY + j) + 1] << 8 | (unsigned int) TerrainImage.data[3 * (i * TerrainImage.sizeY + j) + 2];
				 V[i * TerrainImage.sizeX + j].P[0] = (float) -WorldWidth / 2.0f + i * (float) WorldWidth / (float) TerrainImage.sizeX;
				 V[i * TerrainImage.sizeX + j].P[1] = (float) WorldHeight / (float) ( MaxColor - MinColor ) * (float) ( Temp - MinColor );
				 V[i * TerrainImage.sizeX + j].P[2] = (float) -WorldLength / 2.0f + j * (float) WorldLength / (float) TerrainImage.sizeY;
			}
		}

		free(TerrainImage.data);

		TerrainList = glGenLists(1);

		GLfloat vN[3];
		float deltaTexX = 1.0f / (float) TerrainImage.sizeX,
			  deltaTexY = 1.0f / (float) TerrainImage.sizeY; 

		glNewList(TerrainList,GL_COMPILE);
			glBegin(GL_QUADS);
			for(unsigned int i = 0 ; i < TerrainImage.sizeX - 1; i++)
				for(unsigned int j = 0 ; j < TerrainImage.sizeY - 1; j++) {

					GetNormalVector(V[( i + 1 ) * WorldWidth + j].P,
						            V[i * WorldWidth + j].P,
									V[i * WorldWidth + ( j + 1 )].P,
									vN);

					glTexCoord2f( i * deltaTexX , j * deltaTexY );
					glNormal3fv(vN);
					glVertex3fv(V[i * WorldWidth + j].P);

					glTexCoord2f( ( i + 1 ) * deltaTexX , j * deltaTexY );
					//glNormal3fv(vN);
					glVertex3fv(V[( i + 1 ) * WorldWidth + j].P);

					glTexCoord2f( ( i + 1 ) * deltaTexX,( j + 1 ) * deltaTexY);
					//glNormal3fv(vN);
					glVertex3fv(V[( i + 1 ) * WorldWidth + ( j + 1 )].P);

					glTexCoord2f( i * deltaTexX , ( j + 1 ) * deltaTexY);
					//glNormal3fv(vN);
					glVertex3fv(V[i * WorldWidth + ( j + 1 )].P);
				}
			glEnd();
		glEndList();

		return true;
	}

	return false;
}

void Terrain::LoadTerrainTexture(char *filename) 
{
	Image iTemp;

	glEnable(GL_TEXTURE_2D);
	glGenTextures(1,&TerrainTextureImage);
	glBindTexture(GL_TEXTURE_2D,TerrainTextureImage);
	ImageLoad(filename, &iTemp);
	gluBuild2DMipmaps(GL_TEXTURE_2D,3,iTemp.sizeX,iTemp.sizeY,GL_RGB,GL_UNSIGNED_BYTE,iTemp.data);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	free(iTemp.data); 
	
	TextureLoaded = true;

	glDisable(GL_TEXTURE_2D);

}

void Terrain::Draw()
{
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, TerrainTextureImage);
	glCallList(TerrainList);	
	glDisable(GL_TEXTURE_2D);
}

int Terrain::GetWorldLength()
{ 
	return WorldLength;
}

int Terrain::GetWorldWidth()
{ 
	return WorldWidth;
}

int Terrain::GetWorldHeight()
{
	return WorldHeight;
}

void Terrain::GetNormalVector(const GLfloat *v1,
							  const GLfloat *v2,
							  const GLfloat *v3,
									GLfloat *vN)
{

  	vN[0] = (v2[1] - v1[1]) * (v3[2] - v1[2]) - (v2[2] - v1[2]) * (v3[1] - v1[1]);
	vN[1] = (v2[2] - v1[2]) * (v3[0] - v1[0]) - (v2[0] - v1[0]) * (v3[2] - v1[2]);
	vN[2] = (v2[0] - v1[0]) * (v3[1] - v1[1]) - (v2[1] - v1[1]) * (v3[0] - v1[0]);
	
	GLfloat fLength = 1.0f / (GLfloat) sqrt(vN[0] * vN[0] + vN[1] * vN[1] + vN[2] * vN[2]);

	vN[0] *= fLength;
	vN[1] *= fLength;
	vN[2] *= fLength;

}

float Terrain::GetPositionHeight(float x,float z) 
{
	int X = WorldWidth / 2 + x , Z = WorldLength / 2 + z;
	int n = X * WorldWidth + Z;
	return V[n].P[1]; 
}

void Terrain::SetWorldHeight(int Height)
{
	WorldHeight = Height;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆专区一区二区三区四区五区| 久久久天堂av| 成人免费视频caoporn| 狠狠色丁香婷婷综合| 肉肉av福利一精品导航| 丝袜国产日韩另类美女| 亚洲精品成人少妇| 国产精品久久久久久久久晋中| 亚洲精品在线免费播放| 精品国产伦一区二区三区观看体验 | 一区二区三区在线免费播放| 亚洲成人激情av| 一区二区三区资源| 亚洲国产日日夜夜| 蜜桃传媒麻豆第一区在线观看| 蜜臀久久久99精品久久久久久| 久草这里只有精品视频| 国产 日韩 欧美大片| 99久久精品免费精品国产| 一道本成人在线| 欧美一区二区三区小说| 国产欧美日韩视频在线观看| 欧美一区二区免费| 欧美mv日韩mv国产| 国产精品女同一区二区三区| 国产精品传媒入口麻豆| 亚洲影院免费观看| 奇米亚洲午夜久久精品| 成人免费视频caoporn| 欧美在线影院一区二区| 欧美tickling挠脚心丨vk| 国产精品久久久久永久免费观看 | 欧美日韩成人一区二区| 精品国产一区二区精华| 国产精品久久久久久户外露出| 欧美情侣在线播放| 国产日本亚洲高清| 午夜精品影院在线观看| 久久国产福利国产秒拍| 91福利视频久久久久| 日韩免费高清av| 亚洲精品自拍动漫在线| 成人sese在线| 制服丝袜激情欧洲亚洲| 亚洲色图欧美偷拍| 精品一区二区日韩| 欧美美女喷水视频| 国产精品久久久一区麻豆最新章节| 日韩精品午夜视频| 色综合欧美在线视频区| 精品欧美乱码久久久久久1区2区 | 色婷婷激情综合| 久久久久久久久99精品| 日韩高清不卡在线| 欧美成人性战久久| 国产精品天天摸av网| 日韩黄色免费电影| 在线精品视频一区二区三四| 国产三级精品三级在线专区| 日韩影院免费视频| 欧美亚洲愉拍一区二区| 日韩理论片中文av| 国产99一区视频免费| 日韩精品一区二区在线| 亚洲成在人线免费| 在线观看视频一区二区欧美日韩| 日本一区二区动态图| 国产伦理精品不卡| 久久亚区不卡日本| 精品在线一区二区| 欧美精品一区二区三区在线播放| 日韩中文字幕一区二区三区| 欧美精品一区二区蜜臀亚洲| 一区二区成人在线观看| 91视视频在线直接观看在线看网页在线看 | 日韩精品免费专区| 欧美日韩国产免费| 婷婷六月综合网| 欧美日韩精品福利| 偷拍亚洲欧洲综合| 日韩一级片在线播放| 蜜桃传媒麻豆第一区在线观看| 7777精品伊人久久久大香线蕉的 | 在线这里只有精品| 艳妇臀荡乳欲伦亚洲一区| 日本高清无吗v一区| 亚洲一区二区三区中文字幕| 欧美羞羞免费网站| 欧美96一区二区免费视频| 日韩欧美自拍偷拍| 大美女一区二区三区| 亚洲天堂福利av| 在线成人av网站| 国产一区二区不卡在线| 国产精品欧美久久久久无广告 | 国产调教视频一区| 激情丁香综合五月| 国产精品你懂的| 欧美日韩一区二区三区四区 | 盗摄精品av一区二区三区| 亚洲人一二三区| 欧美一区二区三区电影| 高清在线成人网| 亚洲综合在线观看视频| 日韩一区二区三区视频在线| 国产精品99久久久久久久女警| 亚洲码国产岛国毛片在线| 欧美一级黄色片| www.色综合.com| 青青草国产成人av片免费| 国产精品色呦呦| 51午夜精品国产| 成人av在线影院| 91首页免费视频| 日本中文字幕一区二区视频 | 性做久久久久久久久| 精品国产一区二区三区久久影院| 99久久精品国产精品久久| 日本sm残虐另类| 亚洲欧美偷拍卡通变态| 久久综合九色综合欧美98| 欧美在线免费观看亚洲| 国产91富婆露脸刺激对白| 日韩精品亚洲一区| 亚洲精品高清视频在线观看| 久久久91精品国产一区二区三区| av成人动漫在线观看| 国产亚洲精品7777| 色视频成人在线观看免| 国产在线精品一区在线观看麻豆| 不卡视频免费播放| 毛片av中文字幕一区二区| 亚洲免费看黄网站| 国产精品无遮挡| 精品av久久707| 日韩一卡二卡三卡四卡| 欧美调教femdomvk| 99精品国产91久久久久久| 国产美女在线观看一区| 日本va欧美va精品发布| 性做久久久久久| 亚洲永久免费av| 亚洲一区二区三区影院| 亚洲欧美一区二区三区极速播放| 欧美高清在线一区二区| 久久久精品日韩欧美| 日韩女优毛片在线| 欧美一级艳片视频免费观看| 欧美精品一二三区| 欧美精品少妇一区二区三区| 欧美日韩在线电影| 欧美日韩国产经典色站一区二区三区| 色欧美日韩亚洲| 欧美中文字幕一区二区三区 | 日本一二三不卡| 欧美成人精品1314www| 666欧美在线视频| 欧美日韩一区二区欧美激情| 欧美在线一二三| 国产欧美精品在线观看| 欧美电视剧免费全集观看| 精品国产乱码久久久久久免费 | 成人免费在线观看入口| 日韩理论电影院| 一区二区三区美女| 亚洲一区二区偷拍精品| 午夜精品久久久| 精品一区二区三区在线播放 | 99视频一区二区| 91国在线观看| 在线电影一区二区三区| 日韩视频在线观看一区二区| 精品国产免费视频| 欧美极品xxx| 亚洲最新在线观看| 麻豆一区二区在线| 成人免费黄色大片| 日本精品一级二级| 欧美成人a∨高清免费观看| 欧美激情一区二区三区| 一区二区三区中文在线| 久久精品国产99| 99re这里只有精品6| 欧美日本国产视频| 日本一区二区在线不卡| 亚洲国产欧美在线人成| 国产精品一级在线| 欧美亚洲一区三区| 国产偷国产偷精品高清尤物| 曰韩精品一区二区| 国产一区二区三区四区在线观看| 91麻豆6部合集magnet| 日韩精品一区二区三区蜜臀 | 成人亚洲一区二区一| 91在线观看下载| 日韩精品专区在线| 亚洲欧美日韩在线| 国产一区二区三区久久悠悠色av| 色婷婷亚洲综合| 午夜视黄欧洲亚洲|