返回引用的函数值作为赋值表达式的左值
[ 2005-11-28 22:06:07 | 作者: Admin ]
给一个程序的例子:
#include <iostream.h>
int &put(int n);
int vals[10];
int error=-1;
void main()
{
put(0)=10; //以put(0)函数值作为左值,等价于vals[0]=10;
put(9)=20; //以put(9)函数值作为左值,等价于vals[9]=10;
cout<<vals[0];
cout<<vals[9];
}
int &put(int n)
{ if (n>=0 && n<=9 ) return vals[n];
else { cout<<”subscript error”; return error; }
}
int &put(int n);
int vals[10];
int error=-1;
void main()
{
put(0)=10; //以put(0)函数值作为左值,等价于vals[0]=10;
put(9)=20; //以put(9)函数值作为左值,等价于vals[9]=10;
cout<<vals[0];
cout<<vals[9];
}
int &put(int n)
{ if (n>=0 && n<=9 ) return vals[n];
else { cout<<”subscript error”; return error; }
}
一个引用中值得注意的问题
[ 2005-11-28 21:57:48 | 作者: Admin ]
假设有如下函数声明:
那么下面的表达式将是非法的:
引用型参数应该在能被定义为const的情况下,尽量定义为const 。
string foo( );
void bar(string & s);
void bar(string & s);
那么下面的表达式将是非法的:
bar(foo( ));
bar("hello world");
原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。bar("hello world");
引用型参数应该在能被定义为const的情况下,尽量定义为const 。
Function Object & Function Object Adapters
[ 2005-11-27 18:04:13 | 作者: Admin ]
标准的程序库中,事先定义了一组 function object, function object 实现了本来可以以独立函数加以定义的事物, 这样做主要是为了效率, 因为他将call变成了inline.
原来的函数是:
用function object替换后为
这两段程序都是同样的功能, 升序排列.
而Function ...
阅读全文...
原来的函数是:
bool less_than(int v1, int v2)
{
return v1<v2 ? true:false;
}
vector<int>::iterator i = sort(v.begin(), v.end(), less_than);
{
return v1<v2 ? true:false;
}
vector<int>::iterator i = sort(v.begin(), v.end(), less_than);
用function object替换后为
vector<int>::iterator i = sort(v.begin(), v.end(), less<int>() );
这两段程序都是同样的功能, 升序排列.
而Function ...
阅读全文...
C++中得到基本数据类型的取值范围
[ 2005-11-26 16:15:05 | 作者: Admin ]
欲知道某个类别的最大值和最小值, 可查询标准程序库中 numeric_limit class.
#include<limits>
int max_int = numeric_limit<int>::max();
double min_dbl = numeric_limit<double>::min();
int max_int = numeric_limit<int>::max();
double min_dbl = numeric_limit<double>::min();
Detail Map Demo Using CG
[ 2005-11-24 20:12:06 | 作者: Admin ]
在原来的 LOD Terrain 的基础上, 在Pixel Shader中将一张草地的纹理,和一张雪地的纹理混合, 产生了细节纹理(Detail Map)的效果,以模拟在一定海拔高度的山峰上,出现冰雪覆盖的效果.
由于使用了Shader Language, 在某些不可编程的固定流水线显卡上可能无法运行.建议使用NV FX系列以上的显卡,观看演示.
演示截图:
程序运行需要cg.dll 和 cgGL.dll 动态连接库的支持,
如果没有,请在这里下载, 并拷贝到你的system32目录下面去:
[url]http://...
阅读全文...
由于使用了Shader Language, 在某些不可编程的固定流水线显卡上可能无法运行.建议使用NV FX系列以上的显卡,观看演示.
演示截图:
程序运行需要cg.dll 和 cgGL.dll 动态连接库的支持,
如果没有,请在这里下载, 并拷贝到你的system32目录下面去:
[url]http://...
阅读全文...
LOD Terrain Demo
[ 2005-11-19 17:24:16 | 作者: Admin ]
演示截图:
剔除了97.43%的顶点
剔除了97.24%的顶点
LOD (Level Of Detail) 层次细节, 是解决硬件性能不够发达的技术产物, 可以说它是用种过渡技术, 也就是说当硬件发展的一定阶段, LOD技术也许就会走向末端. 但现阶段,LOD还是解决渲染速度瓶颈问题的最有效的技术手段之一.
在我的DEMO中, 我使用了perlin noise来程序生成高度信息, 整个生成的高度图的大小为1025X1025, 按DEMO中的比例尺来换算,大约是4X4 平方公里的面积. 顶点总数大约为105万.
可以想象,如果不进行任何形式的优化, 完全 brute-force (全部一次渲染), ...
阅读全文...
剔除了97.43%的顶点
剔除了97.24%的顶点
LOD (Level Of Detail) 层次细节, 是解决硬件性能不够发达的技术产物, 可以说它是用种过渡技术, 也就是说当硬件发展的一定阶段, LOD技术也许就会走向末端. 但现阶段,LOD还是解决渲染速度瓶颈问题的最有效的技术手段之一.
在我的DEMO中, 我使用了perlin noise来程序生成高度信息, 整个生成的高度图的大小为1025X1025, 按DEMO中的比例尺来换算,大约是4X4 平方公里的面积. 顶点总数大约为105万.
可以想象,如果不进行任何形式的优化, 完全 brute-force (全部一次渲染), ...
阅读全文...
Frustum Culling 核心代码
[ 2005-11-18 17:27:47 | 作者: Admin ]
首先计算6个裁减面的方程系数
阅读全文...
//-----------------------------------------------------------------------------
// Name: calculateFrustumPlanes()
// Desc:
//-----------------------------------------------------------------------------
void calculateFrustumPlanes( void )
{
float p[16]; // projection matrix
float mv[16]; // model-view matrix
float mvp[16];
...// Name: calculateFrustumPlanes()
// Desc:
//-----------------------------------------------------------------------------
void calculateFrustumPlanes( void )
{
float p[16]; // projection matrix
float mv[16]; // model-view matrix
float mvp[16];
阅读全文...
不规则的地形生成(Fractal Terrain Generation)
[ 2005-11-17 13:56:39 | 作者: Admin ]
现在的虚拟现实程序,很多都用到了地形, 但外部地形数据量过啊, 十分消耗储存空间, 这样一来,如果能在程序中用算法来预先生成地形数据,这样一来就可以不用在你的DEMO里面带着一个庞大的地形数据文件了.
我在这里介绍一种不规则的地形生成方法, 算法都很简单, 很实用!
Fault Formation
此方法大致分两个过程
我们重复多次这样处理同一个高度数据, 就可以产生沟壑丛生,且尖利的地形.
...
阅读全文...
我在这里介绍一种不规则的地形生成方法, 算法都很简单, 很实用!
Fault Formation
此方法大致分两个过程
- 1.生成原始地形
- 2.腐蚀地形生成平滑的地势
我们重复多次这样处理同一个高度数据, 就可以产生沟壑丛生,且尖利的地形.
...
阅读全文...
MD5 的 C++实现方法
[ 2005-11-15 11:26:46 | 作者: Admin ]
珍藏的电子书籍大公开,陆续更新中!
[ 2005-11-10 01:42:56 | 作者: Admin ]
本人用eMule苦战了几天几夜,终于把VeryCD上面关于"游戏开发"和"图形学"方面的电子书籍全部收入囊中,后又发现www.eop.cn提供的免费的网络空间,可以提供页面下载功能,于是决心将这些宝贝全部放到网上, 将他们陆续公布于众, 造福人类!!
如果下载有什么疑问,请跟贴!
下载密码为:azureproduct
NVIDIA GPU Programming Guide
...
阅读全文...
如果下载有什么疑问,请跟贴!
下载密码为:azureproduct
NVIDIA GPU Programming Guide
Introduction
This guide will help you to get the highest
This guide will help you to get the highest
阅读全文...

















