cp的小屋

not yet

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  27 随笔 :: 0 文章 :: 216 评论 :: 1 引用

我的评论

分配比重和限制是关键,象腰部、胸部比重就要低些,而且最大转角也要限制得小些,比如15度以内,头部可以给比较大的比重和更大的限制角,比如60度。目前还没有发现矩阵计算带来的问题,看起来都还比较自然。当然更多的问题会在大量使用中出现,到时再根据具体情况做调整。
@小小华
这一年来比以前忙了,多数成果都是为公司项目做的,不方便写出来。
自己的引擎和编辑器已经暂停开发了,专心做公司的引擎。
re: 没有贴图拉伸的陡峭悬崖 cproom 2008-06-04 09:42  
@包子西施
向XZ平面投影的时候:
    u = (P dot NX) * S
    v = (P dot NZ) * S
这是拿向下投影的一般情况举例,悬崖当然要向XY或者ZY平面投影,这样时Y就参与运算了。

另外这个比例因子取值比较宽松,它决定了贴图的平铺重复频率,重复频率高贴图效果精细,但容易看出重复。你可以在编辑器里放个拉杆控件,让场景编辑人员自己去调整这个缩放因子到他们满意的值。
re: 刚刚做的Bloom(伪HDR)效果 cproom 2008-05-29 09:05  
目前两套都在用,不过效果多了兼容固定管线越来越难,会逐渐抛弃固定管线。
re: 一种3D引擎的多线程设计方案 cproom 2007-12-13 11:16  
即便必须使用D3DCREATE_MULTITHREADED,同步点过多和经过仔细设计尽量减少同步点的情况效率应该还是有很大差异的。
re: 一种3D引擎的多线程设计方案 cproom 2007-11-26 21:43  
@LOGOLS
创建显存资源需要操作3d设备,还是需要与渲染线程做同步的,不过创建其它资源,如纯内存资源或者声音资源的工作是可以不放在同步区内的,这样可以缩短同步区的时间,增加并行性。
re: 一种3D引擎的多线程设计方案 cproom 2007-11-26 21:39  
@ArenAK
绘制上下文是一个很大的结构,包括了一次DrawPrimitive()调用需要设置的全部信息,包括vb、ib、顶点声明、贴图、shader、和shader参数等等
镜子会把和它垂直方向上的景物变成镜像,也就是翻转。人对着镜子时左右上下方向都没变,但前后方向翻转了,所以左右关系就变了。当把镜子放在人的侧面,这时前后上下方向都不变,但左右方向翻转了。把镜子放在脚下或者头顶,上下方向就会翻转。
@david
这个编辑器是我工作的一部分,代码是不能给的:)
向XZ平面投影的时候:
    u = (P dot NX) * S
    v = (P dot NZ) * S
其实投影后的结果就是x、z坐标乘以一个比例因子S,这样的uv值正是我们需要的,有什么问题吗?
@xwl
首先找到这一系列交点的起点,然后遍历除起点外其它的点,到起点距离最近的为下一点,再找剩下的点到第二点距离最近的点为第三点,循环下去就完成了对交点的排序。呵呵,你不会再问我如何找到起点吧!
圆刷子就更好办了,假设你圆刷子的半径是r,中心点的强度是k*r,k是一个系数,需调整确定。然后你找一个高斯分布的函数,把顶点到圆心的距离带入这个函数取得一个高斯分布的系数a(或者说概率),用K*r*a作为这个顶点上刷子的作用强度,每次mousemove消息都把这个顶点的高度加上刷子在这个顶点的强度。
代码细节我就不看了,根据你说的我想有两个方面的问题:

1.斜面刷子的形状是一个类似体育场的形状,两头是两个半圆,中间是一个矩形,中间的矩形可能被拉得很长。构造时先在地面上选取两个端点,再以这两个端点的连线作为中心线按照刷子的宽度构造刷子。由于这两个端点一般不在一个高度上,所以刷子形成一个斜面,刷子下的地面就是逐渐向这个斜面靠拢,高的降低,低的拉高。这个斜面就是地面的极限位置,也就是你说的“刷到一定高度就会被限制住”

2.要根据地面顶点在水平方向上到刷子中心线的距离决定对该顶点施加影响的强度,越靠近中心线越强,越靠近边沿越弱,这样刷出来的地形就过渡比较柔和了。
都差不多吧,我的笔记本电脑也是这样。而且高科技电子产品一年后出故障比较常见,我的柯达数码相机也是,不过是小毛病,凑合用。
看过一个电视节目,这种麦田怪圈大部分是假的,有专门制作麦田怪圈的团队,最常用的工具就是两根绳子提着一块木板,然后用脚踩木板将麦子压倒。
很多人提到alpha test。其实上面的截图都是使用alpha test方式绘制的,只是alpha test方式对贴图质量要求很高,如果边沿过渡没做好,要么有明显的硬边,好像锯齿一样,要么有镶边现象(就像截图中一样)。
水面效果是用了shader,ShaderX 1里就讲了实现方法。
re: GeoMipMap地形万能索引生成器 cproom 2007-06-16 09:39  
  想提高得快最好还是一边写demo一边看网上可以搜集到的各种引擎原码,还有就是经常浏览游戏编程网站的相关论坛和相关博客,www.gamedev.net推荐你去看看。
  优化方面首先要看Nvidia和Ati官方网站上关于优化的所有文档,然后就是论坛和博客,还要系统性的针对各种场景管理算法,比如BSP,Portal,八叉树等通过搜索引擎搜集相关文档和代码来学习。
光照很简单,两个全局的方向光,比较亮的是表示太阳的主光源,一个辅助光源,避免主光源的背面太暗,一个全局环境光。光照模型是固定管线硬件定点光照。
《COLLISION DETECTION IN INTERACTIVE 3D ENVIRONMENTS》这本书很好,一定要看看。学习各种物理引擎和碰撞检测引擎的接口设计。阅读各种开源物理引擎和碰撞检测引擎的代码。这些引擎有ODE、opcode、solid、physX等等。练习使用这些引擎做demo对碰撞检测积累感性认识。
绘制方面完全是在屏幕空间做的。先将太阳位置转换到屏幕空间p点,通过p点与屏幕中心o点连一条直线,将光晕贴图沿这条直线分布绘制到屏幕就行了。p点到o点的距离决定了光晕分布的长度,一般由p点开始超过o点延长一段距离,也就是说太阳越靠近屏幕边缘光晕分布越长,越靠近屏幕中心光晕分布越短。
re: 镜头眩光(lens flare),截图 cproom 2007-05-29 14:20  
这是在做地图编辑器是吗?

这个是地图编辑器,严格来说是个室内场景编辑器(加载建筑物模型,贴图、分配材质,划分区域,编辑入口,放置装饰小物件),编辑好的东西要拿到真正的地图编辑器或者地形编辑器中与室外区域结合,如果足够牛的话可以把室内外场景编辑做到一个编辑器里去。

我想知道, 真正的游戏是怎么把地图读进来, 然后还能结合游戏中的其他部分的?

这个问题太大了,从基础学起吧,慢慢就清楚了。
用MaxSDK7实现从max导出模型为自定义文件格式
VC++ 6.0,StlPort 4.6,DXSDK9,MaxSDK7,ToolkitPro MFC扩展,ODE,Opcode。
做游戏很多年了。慢慢积累吧,先弄明白一个成熟引擎,然后自己从底层写起,从游戏主循环到显示设备初始化,文件系统,材质系统、模型系统、特效系统...增加新功能时不要闭门造车,最好参考一下其它引擎和其他人的做法。逐渐积累自己的代码,不断改进和重构。你会发现结构越来越清晰,增加新功能越来越容易。
re: 发点去大唐芙蓉园的pp cproom 2007-05-08 13:46  
背景亮人暗的情况应该开闪光灯补光。
re: 一种3D游戏碰撞检测解决方案 cproom 2007-03-16 10:05  
可以啊,我也希望多些人一起讨论技术问题。
re: 室外地形的铺草系统 cproom 2007-01-29 10:39  
草是用alpha test的方法绘制,不需要按到摄像机距离排序,如果要得到更好的效果是需要按距离排序的,不过这将消耗很多cpu时间,大量减少可以绘制的草的数量
re: 刚刚做的Bloom(伪HDR)效果 cproom 2006-12-22 21:17  
呵呵,过奖了,这些效果在现在的游戏中基本已经普及了。模型是公司美术同事给我的。
这个编辑器是个人研究,公司没有使用。
re: 初学BSP,上一些测试数据 cproom 2006-12-08 10:55  
VC可以直接在代码中使用SSE指令集,VC7自动支持,VC6要通过安装最新Patch包来支持。其它开发工具我不了解。
re: 没有贴图拉伸的陡峭悬崖 cproom 2006-12-08 10:50  
模型和贴图资源有些是美术同事提供的,大部分是其它游戏破解的资源,象魔兽世界网上已经有很多开原工具可以解读它的资源,另外向Doom3、Farcry的资源基本是官方公开的,只需改一下资源包文件扩展名就可以用WinZip打开。另外很多网游的资源包也很容易自己破解,如Rose、傲世Online。但是一般贴图资源比较容易使用,模型资源就需要进一步破解它的格式,比较麻烦。
re: 初学BSP,上一些测试数据 cproom 2006-12-06 11:05  
看来你对bsp还不太了解,bsp已经很少用于渲染剔除了,更多的用于碰撞检测,以高度图为基础的室外地形更不可能用bsp做渲染剔除,碰撞检测也有基于高度图更好的算法。室外地形的渲染剔除首先是视锥剪裁,然后可以做pvs或者地平线剔除,还有一些复杂的动态遮挡剔除算法。
re: 初学BSP,上一些测试数据 cproom 2006-12-04 10:24  
做地形好像很少用BSP,做hlsl或者做地形都可以,哪个顺手,哪个前期积累得差不多了,可以比较快的实现就做哪个。
re: 初学BSP,上一些测试数据 cproom 2006-12-03 10:36  
指线段和BSP,球体和BSP,AABB和BSP,也就是说一次完整的碰撞检测
做编辑器首先要熟悉一套界面编程工具,然后要对编辑器的整体框架有个设计,比如对象生命期管理怎么做,对象怎么组织,对象属性怎么统一提取、显示和更改,还有Undo/Redo机制是怎样的。
确定地图文件格式首先要确定地图是一次性加载还是随着游戏进行逐渐加载,这个是对文件格式影响最大的因素。其次是要确定数据是存在一个大的文件中还是不通类型的数据单独存一个文件。另外文件的设计最好是有一些小的头部信息,保存少量统计数据,大部分数据采用数据块ID加具体数据的方式,数据块最好不要依赖特定的排列顺序,如果数据块中涉及一些偏移量,最好把这些偏移量保存为相对于某数据块的相对偏移而不是相对于文件的绝对偏移。
你的联系方式?
那个编辑器名字是EarthSculptor
re: 室外地形的铺草系统 cproom 2006-08-21 18:02  
一个Patch是16*16的网格,为了保证草的定位有足够的精度将之二分,变成32*32(这里四分为64*64或者更高也是可以的),分别用一个字节记录每棵草的种类和最靠近的格子节点的x、y坐标(整数值),一共是3个字节,为了四字节对齐增加一个空字节。打开场景时读取每棵草对应的格子节点坐标x和y,由于存盘时只保留了按格子计算的整数坐标,为了让草看起来不是按格子那么整齐的排列,在水平坐标x,y上加一个随机数偏移量,偏移量的绝对值大小在零到半个格子宽度之间,这样草会随机均匀分布在地形上了。虽然每次读取场景草的位置都是随机的,但随机范围仅在半个格子之内,所以总体布局并没有什么大的变化,如果采用四分网格或者八分网格,这个随机量会更小。
我是以摄像机在这个Patch上可能达到的最高位置在Patch的四个角计算遮挡关系的,由于在几个具体参数上都给了不少余量,所以虽然不是精确计算但最后基本没有发现有破绽的地方。摄像机是可以位于这个Patch上任何位置的,只不过要保证摄像机的高度不要超过预处理时设定的最大高度,否则就不要使用PVS信息
Locations of visitors to this page