10 2010 档案
摘要:c语言中,什么都是通过传值来实现的,c++继承了这一传统并将它作为默认方式。除非明确指定,函数的形参总是通过“实参的拷贝”来初始化的,函数的调用者得到的也是函数返回值的拷贝。正如我在本书的导言中所指出的,“通过值来传递一个对象”的具体含义是由这个对象的类的拷贝构造函数定义的。这使得传值成为一种非常昂贵的操作。例如,看下面这个(只是假想的)类的结构:代...
阅读全文
摘要:作者:死猫@indiegm.com 如果之前你有Unreal Mod的开发经验的话, 对UDK的目录结构应该不陌生. 如果这是你第一次接触Unreal引擎, 也不要担心, 阅读完这篇文章相信你开始对UDK有更多的了解. 毫无疑问Unreal引擎是复杂的, 但就目录结构来说, UDK的目录还是很简洁明了的. 这里我们以UDK-2009-11-BETA-2版本为例进行讲解, 这是UDK的第二个Beta...
阅读全文
摘要:本文主要讲的是《天龙八部》游戏中水面(TerrainLiquid)的具体实现,使用C++, Ogre1.6 。天龙的水面做的比较简单,虽然没有倒影,但动态纹理+深度图做出的效果还行,看着不是特别假。一般情况下,TerrainLiquid有一层动态纹理,有的还会有一层1D深度图纹理,深度图纹理用来控制不同深度水面的透明度。另外还会给出一个坐标,可以称之为种子坐标,通过这个坐标可以填充整个水面。总的来...
阅读全文
摘要:http://blog.csdn.net/bichenggui/category/536891.aspx(C++,stl) http://www.cgtextures.com/(纹理资源)http://www.cppblog.com/lai3d/category/2179.html(程序:图像)http://www.two-kings.de/tutorials/dxgraphics/(一些小而有用的点d3d程序)http://blog.csdn.net/zdl1016/category/296458.aspx(大量技术随笔)http://www.cnblogs.com/flying_bat/a
阅读全文
摘要:等待函数可使线程自愿进入等待状态,直到一个特定的内核对象变为已通知状态为止。这些等待函数中最常用的是WaitForSingleObject: DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds);当线程调用该函数时,第一个参数hObject标识一个能够支持被通知/未通知的内核对象。第二个参数dwMilliseconds.允许...
阅读全文
摘要:当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是必需...
阅读全文
摘要:list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。函数有以下三种声明:void splice ( iterator position, list<T,Allocator>& x ); // void splice ( iterator position, list<T,Allocator>& x, i...
阅读全文
摘要:Lua 提供了一个自动的内存管理。这就是说你不需要关心创建新对象的分配内存操作,也不需要在这些对象不再需要时的主动释放内存。 Lua 通过运行一个垃圾收集器来自动管理内存,以此一遍又一遍的回收死掉的对象(这是指 Lua 中不再访问的到的对象)占用的内存。 Lua 中所有对象都被自动管理,包括: table, userdata、 函数、线程、和字符串。 Lua 实现了一个增量标记清除的收集器。它用两...
阅读全文
摘要:条款45说明了如果没写赋值运算符的话,编译器就会为你生成一个,条款11则说明了为什么你会经常不喜欢编译器为你生成的这个赋值运算符,所以你会想能否有个两全其美的办法,让编译器生成一个缺省的赋值运算符,然后可以有选择地重写不喜欢的部分。这是不可能的!只要想对赋值过程的某一个部分进行控制,就必须负责做赋值过程中所有的事。实际编程中,这意味着写赋值运算符时,必须对对象的每一个数据成员赋值:代码Code h...
阅读全文
摘要:有时,一个类想跟踪它有多少个对象存在。一个简单的方法是创建一个静态类成员来统计对象的个数。这个成员被初始化为0,在构造函数里加1,析构函数里减1。(条款m26里说明了如何把这种方法封装起来以便很容易地添加到任何类中,“my article on counting objects”提供了对这个技术的另外一些改进)设想在一个军事应用程序里,有一个表示敌人目标的类:代码Code ...
阅读全文
摘要:顽固的pascal和ada程序员会经常想念那种可以任意设定数组下标上下限的功能,即,数组下标的范围可以设为10到20,不一定要是0到10。资深的c程序员会坚持一定要从0开始计数,但想个办法来满足那些还在用begin/end的人的这个要求也很容易,这只需要定义一个自己的array类模板:代码Code highlighting produced by Actipro CodeHighlighter (...
阅读全文
摘要:看这样一个模板,它生成的类使得一个名字和一个t类型的对象的指针关联起来。[代码](因为有指针成员的对象在进行拷贝和赋值操作时可能会引起指针混乱(见条款11),namedptr也必须实现这些函数(见条款2))在写namedptr构造函数时,必须将参数值传给相应的数据成员。有两种方法来实现。第一种方法是使用成员初始化列表:[代码]第二种方法是在构造函数体内赋值:[代码]两种方法有重大的不同。从纯实际应...
阅读全文
摘要:看下面一个表示string对象的类:// 一个很简单的string类代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--classstring{public: string(constchar*value); ~string();...//没有拷...
阅读全文
摘要:利用前面介绍的Perlin噪声,生成地形的程序,程序代码用opengl+glut编写:main.cpp[代码]misc.h[代码]camera.h[代码]
阅读全文
摘要:http://freespace.virgin.net/hugo.elias/models/m_perlin.htm 许多人在他们的程序中使用“随机数产生器”,以使得物体的运动行为更加自然,或者用来生成纹理。随机数产生器在一些情况下很有用,但是它们生成的结果和自然结果相比,往往显得比较粗糙和生硬。这篇文章介绍使用广泛的Perlin函数,它常用在模拟自然物体的地方,比如地形,...
阅读全文
摘要:当前这个里程碑, 并不会加入此效果, 那是下个里程碑的问题.但是我已经先做了, 可能还有一些细节问题需要好好修改下.效果图如下:海边沙滩浪花小岛周围的环形浪要实现此效果, 最关键的是海岸线模型的生成, 要生成海岸线模型, 首先就必须提取出海岸线来, 首先水面是一个平面, 他将地形切割, 切割的边缘就形成了海岸线, 那么其结果绝对不只是一条连续的边. 可能有多条不连续和多条封闭的边组成. 如果能成功...
阅读全文
摘要:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--//=============================================================================//Desc:纹理影射基础//======...
阅读全文
摘要:写了个测试程序,方便个人在使用中查询,不当之处请指出(以下结论均为三角形数为20000,一个批次中完成渲染)1 在三角形数量不超过20000时,DrawIndexedPrimitive和DrawIndexedPrimitiveUP效率没有明显差别, 前提是创建buffer时没有使用D3DUSAGE_DYNAMIC,否则DrawIndexedPrimitive的性能不如DrawIndexedPrim...
阅读全文
摘要:struct D3DPRESENT_PARAMETERS{ UINT BackBufferWidth; UINT BackBufferHeight; D3DFORMAT BackBufferFormat; UINT BackBufferCount; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; D3DSWAPEFFEC...
阅读全文
摘要:一 poolD3D RUTIME的内存类型,分为3种,VIDEO MEMORY(VM)、AGP MEMORY(AM)和SYSTEM MEMORY(SM),所有D3D资源都创建在这3种内存之中,在创建资源时,我们可以指定如下存储标志,D3DPOOL_DEFAULT、D3DPOOL_MANAGED、D3DPOOL_SYSTEMMEM和D3DPOOL_SCRATCH。VM就是位于显卡上的显存,CPU只能...
阅读全文
摘要:当"allocating vertex buffers_分配顶点缓存"时: 当使用 STATIC(这个是.net 情况,对于非.net版本dx是没有指定D3DUSAGE_DYNAMIC)标识分配顶点缓存时,这块缓存位于显存中。它的典型应用是只写一次并不被读回内存的情况。 只有当标志 D3DUSAGE_DYNAMIC被设置时 D3DUSAGE_WRITEONLY标志才有意义。 如果使用DYNAMIC...
阅读全文
摘要:1 MaxSimultaneousTextures 纹理同时叠加最大数目device->GetDeviceCaps( &Caps );int maxActiveTextures = Caps.MaxSimultaneousTextures;即在 DrawPrimitive 顶点之前,最多设置的纹理数量。如果你的机器显卡较差,这个数为2,就是刚刚好支持多纹理。如下代码所示如果MaxSi...
阅读全文
摘要:版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xiaoxiang.blog.51cto.com/88051/26928本文大部分内容翻译自Gil Gribb和Klaus Hartmann合写的《Fast Extraction of Viewing Frustum Planes from the World-View-...
阅读全文
摘要:作为一个3D程序员, 我用了OpenGL两年多, 最近在搞一个项目, 从OpenGL转到D3D, 虽然工程外在的框架都封装得不错, 但想完全地从OpenGL转换到D3D, 看起来还是有难度的, 花了我两个星期的时间, 我终于转换过来了。D3D与OpenGL的几点比较明显不同的地方:(一)、正交投影时:OpenGL以屏幕左上角为(0,0), 而D3D却以屏幕中心为(0,0)(二)、OpenGL使用右...
阅读全文
摘要:低手交流,高手勿入作者:BillHsu主页:http://www.graptor.com/GameRes发帖里的公式什么的可能不太整齐,在这里看可能效果好一点~http://hi.baidu.com/probill/blog/item/32111f1ccbc2cd8086d6b6f1.html剪裁平面(ClipPlane)在图形学领域有着重要的作用,比如水面模拟中,渲染折射纹理时,我们就必须将水面...
阅读全文
摘要:如有转载请注明:http://www.azure.com.cn/在游戏中,把部分的加载和合成工作,放到后台(多线程)中,是提高游戏体验,加快游戏速度的重要手段之一, 但线程的使用,却产生了很复杂的异步操作, 从此会造成空间上和时间上的,对资源,特别是独占资源的不可控制性, 一旦引入了多线程, 将大大提高了程序的出错概率和调试难度. 但是如果通过合理的设计, 有效的调度, 还是可以避免大部分的问题的...
阅读全文
摘要:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--Vector3Math::calculateTangentSpaceVector(constVector3&position1,constVector3&position2,const...
阅读全文
摘要:切线空间: 因为显卡一般是以三角形作为最小渲染单位的,我们假设三角形的三点为p1, p2, p3,设该三角形所对应的一个空间为(T,B,N), 其中T和B构成的平面就是三角形所在平面, 而T和B分别对应U和V方向,此空间的作用是让任何向量从tangent space变换到world space(实际上我们最终要求的是反过来的,先这样好作说明,最后求逆即可) 那么P2-P1的向量p必定在T及B所构成...
阅读全文
摘要:看下面这个例子: [代码]下面是调用例子: [代码]我们的本意是想输出1,可是结果却是输出0!不用惊奇,书中给出了答案:虚拟函数系动态绑定(dynamically bound),而缺省参数值却是静态绑定(statically )所以,<<Effective C++>>第38条告诉我们: 绝对不要重新定义继承而来的缺省参数。
阅读全文
摘要:文章来源:CAD世界网一般来说, 定位渲染通道瓶颈的方法就是改变渲染通道每个步骤的工作量, 如果吞吐量也改变了, 那个步骤就是瓶颈.。找到了瓶颈就要想办法消除瓶颈, 可以减少该步骤的工作量, 增加其他步骤的工作量。 一般在光栅化之前的瓶颈称作”transform bound”, 三角形设置处理后的瓶颈称作”fill bound”定位瓶颈的办法:...
阅读全文
摘要:一下是我的学习笔记: D3DXVec3project//将3D物理坐标点变到SURFACE的2D点 现在我来解释一下 1.3D物理坐标,看例子 声明 点 A( a,b,c); DEVICE->SETTRANSFORM( WORLD,MATRIX) DRAW (A) 此时A(a,b,c)为物理坐标 若MATRIX为单位矩阵那么A为世界坐标的点 什么叫SURFACE的2D点 是指每个程序中都有个...
阅读全文
摘要:简单总结一下D3D中的拾取问题,所谓拾取就是3D程序中当用户使用鼠标同3D世界内的物体进行交互的时候,如何能正确的实现从用户的鼠标到3D世界中的变换。 呵呵,如果要是推及到原理的话比较复杂,需要好好总结,先从简单的入手,D3D中提供了很多易用的API,使用这些API的话就可以绕过复杂的数学原理,所以呢,我们先来看实际应用中是怎样实现它的。 //首先获取世界、视角、投影矩阵 D3DXMATRI...
阅读全文
摘要:http://www.azure.com.cn/
阅读全文
摘要:世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。1、扎实的基础 数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常...
阅读全文
摘要:Intrinsic Functions (DirectX HLSL)The following table lists the intrinsic functions available in HLSL. Each function has a brief description, and a link to a reference page that has more detail about ...
阅读全文