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

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

?? lod.cpp

?? 用VC++與OPENGL研發的粒子系統的模擬程序
?? CPP
字號:
// Lod.cpp: implementation of the CLod class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyLOD.h"
#include "Lod.h"
#include "LandTex.h"
#include <math.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
extern int quadtree[];
extern int location[];
extern int lod_level;
extern CLandTex lt;
extern COLOUR *colour_map; 
extern int *y;
CLod::CLod()
{

}

CLod::~CLod()
{

}

void CLod::reset_quad_tree(void) 
{
	int i;
	
   for(i=0; i<(QUAD_MAP * QUAD_MAP); i++) 
   {
      quadtree[i] = UNKNOWN;
   }
}

void CLod::setup_quadtree(int x, int z, int width) 
{
   int width2;
   int v1[3];
	
   v1[0] = x;
   v1[2] = z;
	
   width2 = width / 2;
	
   if((width > 1) && DISTANCE(v1, location) < width * lod_level) 
   {
      quadtree[IX_QT(x, z)] = NODE_POINT;
      quadtree[IX_QT(x - width2, z - width2)] = EDGE_POINT;
      quadtree[IX_QT(x + width2, z - width2)] = EDGE_POINT;
      quadtree[IX_QT(x - width2, z + width2)] = EDGE_POINT;
      quadtree[IX_QT(x + width2, z + width2)] = EDGE_POINT;
		
      setup_quadtree(x - width2, z - width2, width2);
      setup_quadtree(x + width2, z - width2, width2);
      setup_quadtree(x - width2, z + width2, width2);
      setup_quadtree(x + width2, z + width2, width2);
   }
   else 
   {
      quadtree[IX_QT(x, z)] = EDGE_POINT;
   }
}

void CLod::draw(int x, int z, int width, int direction) 
{
	int width2;
	if(width > 1) 
	{
		if(width > 16) 
		{
			glBindTexture(GL_TEXTURE_2D, lt.texture_name[(int)((x) / 64)][(int)((z) / 64)]);
		}

		width2 = width / 2;
		if(quadtree[IX_QT(x, z)] == NODE_POINT) 
		{
			// NORTH
			if(quadtree[IX_QT(x - width2, z - width2)] == EDGE_POINT &&
				quadtree[IX_QT(x + width2, z - width2)] == EDGE_POINT) 
			{
				if(quadtree[IX_QT(x, z - width*2)] == NODE_POINT || (z-width)%MAP==0)
				{
					draw_point(x, z, width, NORTH_L);
					draw_point(x, z, width, NORTH_R);
				}
				else
				{
					draw_point(x, z, width, NORTH);
				}
			}
			else if(quadtree[IX_QT(x - width2, z - width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, NORTH_L);
			}
			else if(quadtree[IX_QT(x + width2, z - width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, NORTH_R);
			}
			// SOUTH
			if(quadtree[IX_QT(x - width2, z + width2)] == EDGE_POINT &&
				quadtree[IX_QT(x + width2, z + width2)] == EDGE_POINT) 
			{
				if(quadtree[IX_QT(x, z + width*2)] == NODE_POINT || (z+width)%MAP==0)
				{
					draw_point(x, z, width, SOUTH_L);
					draw_point(x, z, width, SOUTH_R);
				}
				else
				{
					draw_point(x, z, width, SOUTH);
				}
			}
			else if(quadtree[IX_QT(x - width2, z + width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, SOUTH_L);
			}
			else if(quadtree[IX_QT(x + width2, z + width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, SOUTH_R);
			}
			// EAST
			if(quadtree[IX_QT(x + width2, z - width2)] == EDGE_POINT &&
				quadtree[IX_QT(x + width2, z + width2)] == EDGE_POINT) 
			{
				
				if(quadtree[IX_QT(x + width*2, z)] == NODE_POINT || (x+width)%MAP==0) 
				{
					draw_point(x, z, width, EAST_T);
					draw_point(x, z, width, EAST_B);
				}
				else 
				{
					draw_point(x, z, width, EAST);
				}
			}
			else if(quadtree[IX_QT(x + width2, z - width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, EAST_T);
			}
			else if(quadtree[IX_QT(x + width2, z + width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, EAST_B);
			}
			
			// WEST
			if(quadtree[IX_QT(x - width2, z - width2)] == EDGE_POINT &&
				quadtree[IX_QT(x - width2, z + width2)] == EDGE_POINT) 
			{
				
				if(quadtree[IX_QT(x - width*2, z)] == NODE_POINT || (x-width)%MAP==0) 
				{
					draw_point(x, z, width, WEST_T);
					draw_point(x, z, width, WEST_B);
				}
				else 
				{
					draw_point(x, z, width, WEST);
				}
			}
			else if(quadtree[IX_QT(x - width2, z - width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, WEST_T);
			}
			else if(quadtree[IX_QT(x - width2, z + width2)] == EDGE_POINT) 
			{
				draw_point(x, z, width, WEST_B);
			}
						
		}
		else 
		{
			return;
		}
		
		draw(x - width2, z - width2, width2, NW);
		draw(x + width2, z - width2, width2, NE);
		draw(x - width2, z + width2, width2, SW);
		draw(x + width2, z + width2, width2, SE);
	}
}
// 紋理形式的三角形繪制函數
void CLod::triangle1(int x1, int z1, int x2, int z2, int x3, int z3) 
{
	glBegin(GL_TRIANGLES);
	glTexCoord2f(x1/(texScale), z1/(texScale));
	setColor(x1, z1);
	setVertex(x1, z1);
	
	glTexCoord2f(x2/(texScale), z2/(texScale));
	setColor(x2, z2);
	setVertex(x2, z2);
	
	glTexCoord2f(x3/(texScale), z3/(texScale));
	setColor(x3, z3);
	setVertex(x3, z3);
	glEnd();
}
// 線框形式的三角形繪制函數
void CLod::triangle2(int x1, int z1, int x2, int z2, int x3, int z3) 
{
	glBegin(GL_LINE_LOOP);
	setVertex(x1, z1);
	setVertex(x2, z2);
	setVertex(x3, z3);
	glEnd();
}

void CLod::draw_point(int x, int z, int width, int direction) 
{
	
	switch(direction) {
	case NORTH:
		if(m_bFlag)
			triangle1(x, z, x + width, z - width, x - width, z - width);
		else
			triangle2(x, z, x + width, z - width, x - width, z - width);
		return;
	case SOUTH:
		if(m_bFlag)
			triangle1(x, z, x - width, z + width, x + width, z + width);
		else
			triangle2(x, z, x - width, z + width, x + width, z + width);
		return;
	case EAST:
		if(m_bFlag)
			triangle1(x, z, x + width, z + width, x + width, z - width);
		else
			triangle2(x, z, x + width, z + width, x + width, z - width);
		return;
	case WEST:
		if(m_bFlag)
			triangle1(x, z, x - width, z - width, x - width, z + width);
		else
			triangle2(x, z, x - width, z - width, x - width, z + width);
		return; 
	case NORTH_L:
		if(m_bFlag)
			triangle1(x, z, x, z - width, x - width, z - width);
		else
			triangle2(x, z, x, z - width, x - width, z - width);
		return;
	case NORTH_R:
		if(m_bFlag)
			triangle1(x, z, x + width, z - width, x, z - width);
		else
			triangle2(x, z, x + width, z - width, x, z - width);
		return;
		
	case SOUTH_L:
		if(m_bFlag)
			triangle1(x, z, x - width, z + width, x, z + width);
		else
			triangle2(x, z, x - width, z + width, x, z + width);
		return;
	case SOUTH_R:
		if(m_bFlag)
			triangle1(x, z, x, z + width, x + width, z + width);
		else
			triangle2(x, z, x, z + width, x + width, z + width);
		return;
		
	case EAST_T:
		if(m_bFlag)
			triangle1(x, z, x + width, z, x + width, z - width);
		else
			triangle2(x, z, x + width, z, x + width, z - width);
		return;
	case EAST_B:
		if(m_bFlag)
			triangle1(x, z, x + width, z + width, x + width, z);
		else
			triangle2(x, z, x + width, z + width, x + width, z);
		return;
		
	case WEST_T:
		if(m_bFlag)
			triangle1(x, z, x - width, z - width, x - width, z);
		else
			triangle2(x, z, x - width, z - width, x - width, z);
		return;
	case WEST_B:
		if(m_bFlag)
			triangle1(x, z, x - width, z, x - width, z + width);
		else
			triangle2(x, z, x - width, z, x - width, z + width);
		return;
	default:
		break;
	};
}


void CLod::setColor(int x, int z) 
{
	glColor3ub(colour_map[IX(x, z)].r, colour_map[IX(x, z)].g, colour_map[IX(x, z)].b);
}

void CLod::setVertex(int x, int z) 
{
	glVertex3f((x << SHIFT), y[IX(x, z)] * 8, (z << SHIFT));
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三| 91精品国产综合久久香蕉的特点 | www.日韩大片| 久久久精品国产免大香伊 | 成人一区二区三区视频在线观看| 欧美日韩aaa| 亚洲精品中文在线影院| 粉嫩高潮美女一区二区三区| 久久婷婷国产综合国色天香| 天天射综合影视| 欧美日韩久久久久久| 亚洲午夜影视影院在线观看| 99re视频这里只有精品| 自拍av一区二区三区| 97久久精品人人做人人爽 | 欧美一级视频精品观看| 日日夜夜精品视频免费| 日韩欧美一级特黄在线播放| 国产69精品久久777的优势| 亚洲综合一二区| 久久精品亚洲精品国产欧美kt∨ | 天天综合网 天天综合色| 日韩丝袜情趣美女图片| 99视频一区二区| 捆绑紧缚一区二区三区视频| 一区二区三区在线观看动漫| 欧美精品一区二区三| 91官网在线观看| 国产成人亚洲综合a∨猫咪| 亚洲国产日日夜夜| 欧美高清在线一区二区| 久久新电视剧免费观看| 精品视频在线视频| 91性感美女视频| 懂色av一区二区在线播放| 免费观看成人av| 一区二区三区在线免费| 中文字幕亚洲区| 国产精品网曝门| 中文字幕精品综合| 韩国在线一区二区| 国产不卡高清在线观看视频| 99久久亚洲一区二区三区青草| 色综合天天综合在线视频| 欧美日韩精品一区二区天天拍小说| 欧美一卡2卡3卡4卡| 久久亚洲一区二区三区四区| 日韩免费福利电影在线观看| 欧美精品一区二区三区四区 | 日韩女优制服丝袜电影| 欧美精品自拍偷拍| 日韩免费成人网| 精品伦理精品一区| 久久久久国色av免费看影院| 国产精品色哟哟| 午夜精品久久久久久久久| 亚洲综合色自拍一区| 中文无字幕一区二区三区| ...中文天堂在线一区| 国产欧美综合色| 亚洲综合自拍偷拍| 六月婷婷色综合| 成人理论电影网| 在线观看91av| 亚洲人成影院在线观看| 亚洲一区二区三区中文字幕 | 精品一区二区免费| 91亚洲永久精品| 欧美色成人综合| 精品美女一区二区| 亚洲国产精品自拍| 国产在线视频一区二区| 日本高清不卡一区| 日韩午夜精品电影| 一区二区三区不卡视频| 狠狠色伊人亚洲综合成人| 色婷婷一区二区三区四区| 欧美一级在线免费| 一区二区久久久| 国产999精品久久| 欧美日韩在线亚洲一区蜜芽| 国产精品毛片久久久久久| 久久福利资源站| 日韩欧美黄色影院| 丝袜美腿亚洲一区| 欧美视频中文一区二区三区在线观看| 欧美精品一区二区久久久| 亚洲综合在线免费观看| 成人动漫一区二区在线| 欧美久久久久久蜜桃| 亚洲黄色免费网站| 欧美人体做爰大胆视频| 亚洲国产一区在线观看| 欧美人伦禁忌dvd放荡欲情| 日本 国产 欧美色综合| 日韩免费在线观看| 国产91丝袜在线观看| 国产精品理论在线观看| 在线亚洲精品福利网址导航| 日韩福利视频导航| 久久婷婷国产综合精品青草| 91国偷自产一区二区使用方法| 不卡的电影网站| 99热这里都是精品| 色婷婷综合久久久中文字幕| 精品一区二区在线看| 天天操天天色综合| 极品少妇xxxx偷拍精品少妇| 国产成人免费av在线| 国产一区二区视频在线播放| 色综合久久中文字幕综合网 | 日韩欧美综合在线| 免费人成黄页网站在线一区二区| 日韩一区二区中文字幕| 东方欧美亚洲色图在线| 精品一区在线看| 成人午夜免费av| 欧美日韩高清一区二区三区| 欧美乱妇一区二区三区不卡视频| 51精品视频一区二区三区| aaa国产一区| 精品国产伦一区二区三区观看体验 | 亚洲图片你懂的| 亚洲综合色区另类av| 国产成人综合在线播放| 99re66热这里只有精品3直播 | 青草国产精品久久久久久| 全国精品久久少妇| 99精品热视频| 久久综合色之久久综合| 日韩精品午夜视频| 在线观看免费一区| 日韩欧美综合一区| 亚洲精品视频在线观看网站| 九色porny丨国产精品| 欧美在线免费播放| 一级日本不卡的影视| 色综合天天视频在线观看| 日本一二三四高清不卡| 盗摄精品av一区二区三区| 9191久久久久久久久久久| 亚洲地区一二三色| 国产成人av网站| 国产日产欧美精品一区二区三区| 精品一二三四在线| 欧美电影影音先锋| 奇米色777欧美一区二区| 欧美一区二区三区日韩| 看国产成人h片视频| 日韩欧美中文一区| 精品一区二区三区视频| 久久在线免费观看| 成人免费视频国产在线观看| 欧美乱妇20p| 亚洲国产高清aⅴ视频| 99久久免费国产| 亚洲国产另类av| 日韩一区二区在线观看视频| 美国十次了思思久久精品导航| 日韩免费高清电影| 免费人成黄页网站在线一区二区 | 久久精品日韩一区二区三区| 日本三级韩国三级欧美三级| 精品少妇一区二区| 国产精品综合av一区二区国产馆| 精品国产制服丝袜高跟| 日韩专区欧美专区| 精品国产一区a| 色综合中文字幕国产 | 狠狠色丁香九九婷婷综合五月| 欧美电影免费观看高清完整版在线 | 久久av资源站| 亚洲激情图片一区| 欧美tickling挠脚心丨vk| 岛国一区二区在线观看| 国产精品美女久久久久aⅴ国产馆| 99这里只有精品| 久久国产尿小便嘘嘘| 精品久久久久久久久久久久久久久久久 | 日本不卡123| 欧美视频一区二区三区四区| 久久先锋影音av鲁色资源网| 亚洲福利电影网| 91免费国产在线观看| 久久久五月婷婷| 国产精品911| 精品国产污网站| 日本视频在线一区| 欧美日韩国产一二三| 亚洲曰韩产成在线| 日本精品裸体写真集在线观看| 国产精品久久午夜夜伦鲁鲁| 国产制服丝袜一区| www欧美成人18+| 国产成人av电影在线| 国产精品久久国产精麻豆99网站| 国产成人啪午夜精品网站男同| 中文字幕乱码亚洲精品一区| 粉嫩一区二区三区在线看| 久久久久9999亚洲精品|