博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
确保某值在区间内
阅读量:4514 次
发布时间:2019-06-08

本文共 1769 字,大约阅读时间需要 5 分钟。

在地形绘制的时候,把地形中每一个顶点的纹理位置在[0,64]的区间内递增,使得场景的纹理有移动的效果。

想起以前看过的一点小技巧,利用%操作符可以让值在固定区间内:

#include 
#include
#include
int main(){ int a = -3,b = 7; // [-3,7] int i =1; srand((unsigned)time(NULL)); while(i<=100){ printf("%d",rand()%(b-a + 1)+a); i%10==0?printf("\n"):printf(","); i++; } //printf("%d\n",(-2)%13); // (-2)%13 == -2 getchar(); return 0;}

上面的rand ()随机函数就是某个值的递变,例如 i++;

           int k = _translation;		              int i = 0;	                for(int z = startZ; z >= endZ; z -= _cellSpacing)	                {	            	int j = 0;	                	for(int x = startX; x <= endX; x += _cellSpacing)                { int index = i * _numVertsPerRow + j;		          v[index] = TerrainVertex(			      (float)x,			      (float)_heightmap[index],			      (float)z,			      (float)j * uCoordIncrementSize,			      (float)k * vCoordIncrementSize);    not i but k			      j++; 		      }		      i++;                     k = (k++)%64;	          }

  

   上面的_translation是下面的rollingDecrease控制递增:

void Terrain::rollingDecr(){	computeVertices();	_translation = (_translation++)%64;}

  纹理滚动:

 

 

 

 

还有一种确保某个值在固定区间的计数方法:

int i;    //不需要在i输入的时候控制i值的范围i = max( 0, min( 100 , i ) );    //[0,100]

  

处理完键盘的消息后,加上下面的函数,

使得Camera的x与z值不超出 _lefttop,_rightdown两点位置的X和Z值

void Camera::postionAdjust(){	_pos.x = max(_lefttop.x, min(_rightdown.x,_pos.x));			//_pos.y = max(_lefttop.y, min(_rightdown.y,_pos.y));	_pos.z = max(_lefttop.z, min(_rightdown.z,_pos.z));}

 然后接下来地形根据Camera的x和z值来获取高度数据,此时x,z值不会超出地形之外,

索引index  = i * numVertexsPerRow + j;的计算不会是数组下表超出范围,产生例如:"vector subscript out of range"内存错误

 

 

 

 原图:

 

转载于:https://www.cnblogs.com/Kelvinshere/archive/2013/03/17/2964808.html

你可能感兴趣的文章
解决mysql无法显示中文/MySQL中文乱码问号等问题
查看>>
CentOS 7.2 配置mysql5.7
查看>>
python输出转义字符
查看>>
java基础43 IO流技术(输入字节流/缓冲输入字节流)
查看>>
面向对象初识
查看>>
计算一个整数二进制中1的个数
查看>>
netdom join 错误:指定的域不存在,或无法联系。
查看>>
Android中Dialog的使用
查看>>
Android Activity接收Service发送的广播
查看>>
[Leetcode] Spiral Matrix | 把一个2D matrix用螺旋方式打印
查看>>
加速和监控国际网络
查看>>
【Flex】读取本地XML,然后XML数据转成JSON数据
查看>>
字符串循环右移-c语言
查看>>
解决从pl/sql查看oracle的number(19)类型数据为科学计数法的有关问题
查看>>
古训《增广贤文》
查看>>
职场的真相——七句话
查看>>
xcode命令行编译时:codesign命令,抛出“User interaction is not allowed.”异常 的处理...
查看>>
[转载]开机出现A disk read error occurred错误
查看>>
STM32 C++编程 002 GPIO类
查看>>
无线冲方案 MCU vs SoC
查看>>