`
daojin
  • 浏览: 690292 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

继续啊

 
阅读更多
int CScape::RenderPatch( int i )
{
	int FacesRendered = 0;
	static unsigned short Indices[INDICES_LOD_HIGH];

	ScapePatch* Patch = &m_Patches[i];
	unsigned short* IndexPtr;

	glVertexPointer( 3, GL_FLOAT, sizeof(ScapeVertex), m_Buffer->GetPointer() + (PATCH_VERTS * i * sizeof(ScapeVertex)) );

	int CurIndices;
	//unsigned short* IndexPtr;
	if( Patch->LoD == SCAPE_LOD_HIGH )
	{
		CurIndices = INDICES_LOD_HIGH;
		IndexPtr = m_Indices[0];
	}
	else if( Patch->LoD == SCAPE_LOD_MED )
	{
		CurIndices = INDICES_LOD_MED;
		IndexPtr = m_Indices[1];
	}
	else if( Patch->LoD == SCAPE_LOD_LOW )
	{
		CurIndices = INDICES_LOD_LOW;
		IndexPtr = m_Indices[2];
	}
	else if( Patch->LoD == SCAPE_LOD_XTRALOW )
	{
		CurIndices = INDICES_LOD_XTRALOW;
		IndexPtr = m_Indices[3];
	}
	else if( Patch->LoD == SCAPE_LOD_MIN )
	{
		CurIndices = INDICES_LOD_MIN;
		IndexPtr = m_Indices[4];
	}

	memcpy( Indices, IndexPtr, CurIndices * sizeof(unsigned short) );
	//GenIndices( Patch->LoD, Indices );

	ScapePatch* Other;

	//ok, now to work out some adjacency LoD issues
	//If an adjacent patch is at a lower LoD, shift indices around
	//to avoid cracks in the landscape.

	if( i >= m_HeightPatches )
	{
		Other = &m_Patches[i-m_HeightPatches];
		if( Other->LoD > Patch->LoD )
		{
			//the patch to the left is at a lower LoD
			//we need to reduce our left detail level
			for( int n = 0; n < CurIndices; ++n )
			{
				if( (Indices[n] < (PATCH_SIZE+1)) && (Indices[n] % Other->LoD) != 0 )
				{
					Indices[n] -= Indices[n] % Other->LoD;
				}
			}
		}
	}

	if( i <= m_NumPatches - m_HeightPatches )
	{
		Other = &m_Patches[i+m_HeightPatches];
		if( Other->LoD > Patch->LoD )
		{
			//Patch to the right is at a lower LoD
			//reduce right edge detail
			for( int n = 0; n < CurIndices; ++n )
			{
				if( (Indices[n] > ((PATCH_SIZE+1)*PATCH_SIZE) ) && (Indices[n] % Other->LoD) != 0 )
				{
					Indices[n] -= Indices[n] % Other->LoD;
				}
			}
		}
	}

	if( i % m_HeightPatches )
	{
		Other = &m_Patches[i-1];
		if( Other->LoD > Patch->LoD )
		{
			//the patch to the top is at a lower LoD
			//we need to reduce our top detail level
			for( int n = 0; n < CurIndices; ++n )
			{
				if( (Indices[n] % (PATCH_SIZE+1) == 0) && (Indices[n] % (Other->LoD * (PATCH_SIZE+1))) != 0)
				{
					Indices[n] -= (PATCH_SIZE+1) * Indices[n] % (Other->LoD * (PATCH_SIZE+1));
				}
			}
		}
	}

	if( (i + 1) % m_HeightPatches )
	{
		Other = &m_Patches[i+1];
		if( Other->LoD > Patch->LoD )
		{
			//the patch to the bottom is at a lower LoD
			//we need to reduce our bottom detail level
			for( int n = 0; n < CurIndices; ++n )
			{
				if( ((Indices[n] + 1) % (PATCH_SIZE+1) == 0) && (Indices[n] % (Other->LoD * (PATCH_SIZE+1))) != 0)
				{
					Indices[n] -= (PATCH_SIZE+1) * Indices[n] % (Other->LoD * (PATCH_SIZE+1));
				}
			}
		}
	}


	glDrawElements( GL_TRIANGLES, CurIndices, GL_UNSIGNED_SHORT, Indices );
	FacesRendered = CurIndices / 3;

	return FacesRendered;
}
分享到:
评论

相关推荐

    继续教育通用挂机软件

    【标题】"继续教育通用挂机软件"是一个专为全国中小学及幼儿园教师设计的软件工具,主要用于2011年的继续教育培训。这个挂机软件的主要功能是帮助用户自动完成一些培训过程中的重复性操作,例如点击鼠标等,从而节省...

    继续教育挂机软件

    继续教育挂机软件是一种专为网络课程培训设计的辅助工具,它主要的功能是自动计时并能在后台最小化运行,方便用户在参加继续教育培训时,无需长时间保持对电脑的专注,能够进行其他工作或者活动。这类软件的出现,极...

    继续教育挂机软件 免费自动挂机

    【标题】:“继续教育挂机软件 免费自动挂机” 这个标题提到的是一个特定类型的软件,即“继续教育挂机软件”,它具备免费和自动挂机的功能。继续教育通常是指针对已经离开正规学校,但在职业生涯中需要更新知识或...

    教师继续教育学习小助手

    【教师继续教育学习小助手】 在当今信息化社会,教师的继续教育已经成为提升教育教学质量、适应教育发展需求的重要途径。"教师继续教育学习小助手"是一款专为教师设计的软件工具,旨在帮助教师更加高效地进行在线...

    2013年全国中小学教师继续教育挂机软件

    【标题】"2013年全国中小学教师继续教育挂机软件" 提供的是一个针对2013年度我国中小学教师进行继续教育培训的自动化工具。这个软件的主要目标是帮助教师们在计算机上进行便捷的学习和考核,从而节省时间和提高学习...

    继续教育挂机软件最新版

    【继续教育挂机软件最新版】是一款专为教师设计的自动化学习工具,旨在帮助初中小学教师以及有需要的高中教师轻松完成继续教育的学习任务。这款软件以其操作简单、安全性高和功能实用的特点受到用户的好评。它具备...

    继续教育视频双开专用浏览器(360安全浏览器)

    "继续教育视频双开专用浏览器(360安全浏览器)" 这个标题提到了一个特别设计的浏览器,它主要用于继续教育场景,尤其是观看学习视频时。"继续教育"指的是针对在职人员或成年人进行的进一步学习和技能提升活动。...

    Java 进度条的使用 有暂停 和 继续

    ### Java 进度条的使用:包含暂停与继续功能 在Java编程中,进度条(`JProgressBar`)是Swing组件中一个非常实用的工具,它可以用来显示任务的完成情况,为用户提供直观的任务进度反馈。本文将详细介绍如何在Java...

    2011继续教育挂机自动学习助手(免费通用版)V3.6

    标题 "2011继续教育挂机自动学习助手(免费通用版)V3.6" 涉及的核心知识点主要集中在自动化的在线学习工具上,它专为全国范围内的教师和教育工作者设计,用于处理各类继续教育和骨干教师培训的需求。这款软件的主要...

    学校继续教育证明

    根据提供的文件信息,我们可以从中提炼出与“学校继续教育证明”相关的知识点,主要涉及继续教育的概念、继续教育证明的意义及用途、以及此类证明文件的基本结构等。 ### 继续教育的概念 继续教育是指在完成一定...

    专业技术人员继续教育挂机软件

    【标题】"专业技术人员继续教育挂机软件"指的是专为从事专业技术工作的人员设计的一款自动学习软件,它能够帮助用户在不需手动操作的情况下完成继续教育的相关课程和学习任务。这样的软件通常适用于那些工作繁忙,...

    全国中小学教师继续教育挂机软件2011V2.2 免费版.exe

    全国中小学教师继续教育挂机软件2011V2.2 免费版.exe 2011/2012全国中小学教师继续教育挂机软件是一款教育网教师网友挂机辅助软件使用方法:打开软件,出现登陆--&gt;输入用户密码--&gt;选择课程--&gt;点击软件右上...

    T7广东省专业技术人员继续教育网辅助 v1.2.zip

    T7广东省专业技术人员继续教育网辅助,本软件为共享软件,免费试用3小时,试用期间可以自动处理各种弹出框、回答问题、自动跳转到下一课程和自动做一个课程作业等。 T7广东省专业技术人员继续教育网辅助功能说明: ...

    C#winform 全局错误捕捉 可以让错误跳过去继续执行住程序

    本文将深入探讨如何实现C# WinForm的全局错误捕捉,并解释如何在发生错误时允许程序继续执行。 首先,我们需要理解在C#中处理异常的基本概念。异常是在程序执行过程中发生的错误,当出现异常时,会触发一个异常对象...

    教师继续教育学习专用浏览器3.4 免费版

    教师继续教育学习专用浏览器适应于全国中小学教师参加远程继续教育、岗位提高培训、国培计划等网上培训学习使用。这些培训都要求参加的教师学满一定学时,并且学习一段时间后(一般是10-20分钟)停止计时,等待用户...

    四川省中小学教育继续教育网远程学习挂机助手v2013-01-1【有验证码版】

    参加过四川省中小学教师继续教育网远程培训学习的教师都知道:在学习完十至二十分钟之后必须点击“更新学习时间”按钮才会计时,有的还要输入验证码才能更新学习时间。这样每隔十几分钟点一次很是烦人,所以本人编写...

    教师继续教育挂机软件

    教师继续教育挂机软件是一款教师继续教育学习辅助软件,是为了解决教师在继续教育课程学习过程当中,每隔20分钟需要点击一次按钮提交学时的问题。如果要学完考核要求的课时,必须长时间对着电脑,这样对我们老师的...

    2021年内蒙古专业技术人员继续教育自动点击

    2021年内蒙古专业技术人员继续教育自动点击

    继续教育综合管理平台建设方案共26页.pptx

    继续教育综合管理平台建设方案共26页.pptx

    解决Android锁屏无法继续定位问题

    解决Android锁屏无法继续定位的问题,我在启动定位的时候提示了一个通知,通知的主要功能就是告诉启动了定位。锁屏后通知不会提示!!!在启动定位了之后,往本地写了一个txt文件, txt文件显示的是 “时间、经纬度...

Global site tag (gtag.js) - Google Analytics