| Bill's profile这里是我博客的备份PhotosBlogLists | Help |
|
|
September 13 准备换博客了已经很久没有来这个博客里面灌了。msn space现在改得太难看了,速度还超慢。所以我打算以后用blogger的博客了。billconan.blogspot.com这里。 最近在家里憋着写建模程序,快要写好了,但是似乎耐性已经到了极限,一天一天变得越来越呆,脑子都懒得转。这次程序是大换血,已经写了两个月,改用c++和opengl实现了。界面用的wxwidget,我不喜欢。感觉现在的程序很不稳定,每次出问题都会慌 贴些截图: 我的新博客,有时间来看看: ![]() February 05 iCrythere seems to be some changes with msn space, and someone just told me that the iSmile doesn't. sorry for that, it must have something to do with the edit area. unfortunately i don't have time to study the code recently. so, is there any one can help to figure the changes out? December 21 Convert map files of half-life2
December 03 写了个Space的欢乐表情插件iSmileiSmile, the emotion icon plugin for MSN Space! 刚才写了一个没水准的script叫做MSN Space欢乐表情插件, 可以比较方便地添加表情, 下载地址: 读取Nvidia Demo中的模型
November 05 11月5日阴又是很长时间没有贴东西了。前些天好不容易闲下来打算接着写我的那个cedar,但是又遇到一些不爽的技术问题,所以还在停工状态。
很早就听说directx渲染物体的时候做了什么优化,也就是说最好把一个物体作为一个整体来渲染,这样的效率会高。至于其中的原理我记忆的不很准确,似乎是它可以把一个物体放到显存中,如果你的场景物体多了,就会频繁地把数据从内存往显存里面复制,这样会使得性能大大下降。前两天作了个测试,如果一个面一个面地渲染,仅仅60个面的时候画面就开始卡了,我的显卡是6600gt的。
先前Johnny-Aya-Baiken就和我说过,directx渲染一个单独面的效率很差,和渲染一个整的物体差不多,现在看来确实是这样。
directx的这个特性给cedar带来不少困难。因为cedar的数据结构和directx的不同,但又要用directx的数据结构来进行渲染,这样的话从我自己的数据结构生成directx的indexbuffer这个过程是个很大的难题。当然我已经实现了。只不过这个过程比较耗时,所以不可能在每次模型变化的时候都重新生成一遍indexbuffer。所以我想更加艺术一点的设计应该是把整个模型分成很多小的部分,这样的话更有利于控制,比如说cedar数据结构中的一个面(face)对应一个独立的indexbuffer。但是偏偏directx渲染多个indexbuffer的能力又这么差。难怪很多的建模工具都是用opengl作图形引擎的。当然也有用directx,比如3Dmax,不知道它是怎么做到的。另外没试过softimage,不知道用的是哪种。
所以眼下只能考虑如何在我自己数据结构发生变化的时候只去修改相应indexbuffer中发生变化的部分。但是这也是个难题,因为indexbuffer就是个破数组,增加数据容易但是删除可就费劲了,更何况数组删除数据是很耗时间的。我倒是也有个歪着儿来解决这个,就是把删除的数组中的数据表示成0,0,0,很显然一个三角面如果都由第0号点组成的话它将不会被渲染出来,这样看上去就相当于删除了一个面,然后我再把这个删除位置的数组下标记录一下,下次如果新增加面的话,先把留下的这个窟窿补上。哎!要是真这么编可就费劲了。
另一个烦人的问题就是如何实现原来设想的undo和redo,想想不难,但是数据太多了,到底什么是应该被记录的什么不是应该被记录的数据一直想不好。如果搞个大包围,排列组合这些东西实在是太可怕了。如果一切从简的话,性能又大打折扣了。想不好:(
October 17 设计模式和软件工程的困惑一直对设计模式和软件工程的东西没什么兴趣,总觉得这些东西太虚。我感觉设计软件的时候如果技术问题不明朗,类设计也就会不明朗。因为模块划分之类的东西是服务于具体的技术问题的,技术问题搞不清楚的情况下要如何设计呢。可是技术问题又是很贴近实际的。比如说理论上很行的通的算法真正实现之后很可能速度上达不到要求,这样的话不光是要改变技术,相应的设计也要改。所以要怎么设计才能够预先把所有的事情都规划好了再进行具体的代码编写呢?这是我一直想不通的问题。
我觉得软件设计是很自然的东西,用现成的理论限制起来是不是有些太教条了。记得数据结构课程设计的时候,我的程序将界面和内核的部分划分开来,老师问我有没有看过设计模式。我没有。我觉得这种规划应该是很自然的,犯不着去依照什么书上的理论。曾经还看过一个程序员讲自己学习设计模式很长时间得到的最大收获就是这种界面和数据分离的设计。
说白了,我感觉设计很多时候要服务具体的技术问题,但是设计的时候往往又解决不了技术问题。有考研的哥们问我读研是学软件工程好还是嵌入式系统好。我说要我选肯定是后者。他问为啥,我说嵌入式系统至少是一门实业,软件工程这个东西太虚了。好的软件要有好的设计但同时也要有好的技术。纯有设计不行,除非是开发数据库系统----千头万绪但是技术问题很简单。我感觉好软件还是要虚实结合,就好比很少有经济学家是大款一样,纯搞经济太虚了,空手套白狼。据我所知大款基本上都是搞实业的,什么卖快餐、家具、软件、猪饲料、开超市等等。
今天突然想起写这些东西是因为最近在考虑怎么实现cedar的redo和undo功能,我最初的设想是先搞个命令行,然后记录每一条命令,redo的时候直接逆运算这些命令。但是我感觉有些东西没有逆运算。比如说焊接的操作,涉及到将很多点的平均值计算。但是已知平均值是无法逆推原来点的情况的。听说设计模式里有一种命令模式好像涉及到了redo和undo,看了半天,其实也就和我的命令行思想差不多,至于具体问题似乎还是无能为力。
我知道写这些话会被别人笑,不过想不通就是想不通。所以先写在这里,哪天想通了再回头进行自我批判吧。恕我无知! July 29 Cedar的性能和灯光的进一步改进今天回来本来是要处理灯光的,gamedev上的人说我的顶点法线计算的不对。的确,我先前就是很潦草地给每个点一个法向量。改正后光照就正常了。在编法向量的时候,我发现每添加一个面都进行一次三角划分,这个本来是为建模的时候考虑的,但是载入文件的时候只用一次就行了,难怪以前模型一大性能就会出问题。现在真是太好了,大模型读取也没问题,甚至速度比silo还快呢!另外就是解决了内存消耗过大的问题,先前读取一个比较复杂的模型内存占用能达到288兆,现在一个非常复杂的模型也不过消耗33兆,同一个模型在silo中调用费了39兆内存。现在想起来,其实有时候内存耗太多不一定是数据存储的问题,其实现在的改进数据结构比以前的占用内存要大。但是以前的算法有问题,产生了内存leak的问题。其实已经不是第一次遇到了。
性能的问题算是基本上解决了,这是现在的效果:
Cedar 性能改进今天稍微改进了一下cedar的性能 现在已经可以读取复杂度高一点的模型文件了 但是仍然有限制 试了一个很大的文件还是在漫长等待之后出现了异常
不过现在的性能算是基本可以忍受了 再想想还有没有改进的余地
现在场景的灯光处理得比较差 应该先学习一下灯光的东西
July 03 Cedar小进展今天把Cedar的数据结构按照最初的设想写了个大概, 已经可以从外部读取sia文件了, 基本上实现了以前用trueVision3D写的那个版本的所有功能了. 只可惜现在的性能还有问题, 对场景的复杂度还有限制. 估计还是内存消耗太大了. 不知道怎么回事. 真是头疼的事啊. 打算先在这个的基础上实现了细分算法, 性能的问题之后再考虑.
June 11 Cedar Summer
雪松的夏天 上面是昨天设计的logo 借用了一下本博客的背景图案 June 05 开始设计gre连连看![]() 今天开始着手设计那个gre单词连连看游戏了 时间不多 完全是作为调剂 其实我觉得gre单词不适合做成连连看 因为连连看游戏要求每一局只有少量的花色 但是面积比较大 而理想的单词游戏最好一组出现的单词量大一点 这些问题等写出来再说了 今天先搞的界面和logo的设计 借着gta圣安的上市 我特意把界面设计成gta的风格 gre和gta很像不是吗 呵呵名字暂且定为 GRE Sucks 这是logo
这是主界面 其他的陆续补上
May 29 扁红球教程之一决定拿它写程序之前先研究一下文档 目前觉得有点简单 好像没有必要翻译似的 以后还是直接贴英文的吧 GameData.cs Before writing any code, I want to point out the Sprite and SpriteManager class. The Sprite class is the most important class in the FRB Engine. Sprites can be created through the new keyword, but this will only create a Sprite in memory. The engine will not know about the Sprite and won’t manage and draw it. Therefore, when you create a new Sprite, it should be done through the SpriteManager. Object myObject; Creating a Sprite Our GameData class automatically has a SpriteManager instance named sprMan. Therefore, we can use this instance to create Sprites. To create a Sprite, first declare a Sprite above our Initialize() method. Second, instantiate the Sprite through the SpriteManager using the redball.bmp image. Add the bold code so your file looks as follows: Let’s analyze what we are doing here. The first bold line simply creates the myFirstSprite variable. At this time, there is no Sprite in memory, and there are no Sprites that the SpriteManager is keeping track of. We merely have an “empty” variable that we can use to store a reference to a Sprite. In this and any other examples, code additions and modifications will be in bold. May 27 MSN Space进阶技巧-添加计数器和MSN在线状态指示器计数器和MSN在线状态指示器是两个比较实用的工具,通过前者你可以了解自己空间的受欢迎程度,而后者又为来访者提供了你目前的在线信息,方便好友与你及时联系。为日志加入这两项功能的前提是你必须已经安装了HTML语法扩展编辑工具,也就是你的IE浏览器工具栏里已经拥有了“Edit It”按钮。如何获取此项功能,我已经在教程的你一章作了详细介绍,这里不再赘述。 先说说添加计数器。如果只是在日志中显示来访总数,那么申请一个简单的计数器即可,提供这种服务的网站很多,你在搜索引擎中键入“Free Web Counter”会查找到很多结果,这里我个人推荐http://www.amazingcounters.com/。这个网站提供350多种计数器,款式繁杂,花色多样,绝对满足你的需要。申请时需要注册,但过程很简单,一般只需要提供少量的个人信息即可。注册成功后你就可以选择心仪的计数器了,然后再输入你个人网站的信息,你将获得一段在线生成的HTML页面的代码。某些网站还会提供给你简单的在线编辑功能,让你进一步对计数器的外观作简单的修改,以更好的适合你的需要。将获取的代码拷贝,然后转到你需要插入计数器的MSN Space日志,点击“Edit It”按钮,进入HTML语法编辑状态,将刚才获取的代码粘贴到空白处,再退出HTML编辑状态,在日志文本处理模式下调整计数器的位置。由于MSN Space空间没有提供置顶功能,因此你必须经常调整计数器的位置,将它始终放置在首页的日志中(最好是第一篇日志)。方便起见,你可以将计数器的源代码拷贝到文本文件中,以后调整时将它简单粘贴过来就可以了。 如果你想获得有关你的空间流量的具体信息,诸如单位时间内的访问量,来访者停留时间,来访者IP及所在国家等等众多专业统计结果,上述网站就不能满足你的需要了。推荐你到这个网站申请此项服务:http://www.statcounter.com/,它提供了极其强大且稳定可靠的统计功能,几乎面面俱到(至少对于我们这个水平是足够了),而且众多信息均以图形或表格的方式予以呈现,直观明了(Tucow五星推荐)。所有这些服务均为免费,除非你的月访问量超过20万。唯一的缺点就是提供的计数器样式过于简单,可供选择的余地也不大。。它的申请过程很简单,成功后会先让你选择计数器样式(你可以进行简单的定值),然后设定某些参数,诸如通过Cookie功能将你自己的登陆排除在统计数字之外等,之后你可以在Install Code页面获取HTML代码,需要注意的是,它会为不同类型的页面生成不同的代码,因此你要在“Statcounter Code Option”里选择“Html Only Code”,通过这个命令生成的代码才可用于MSN Space,获取代码后的操作就和上面已降解的方式一样了。由于是海外的服务商,所以页面信息全部是英文,这对于不谙E文的朋友可能有些麻烦。 申请MSN在线状态指示器也很简单,到下面这个网站http://snind.gotdns.com:8080/ 在“Messenger”下拉菜单里选择MSN,当然如果你有Yahoo,或AOL等提供的及时通讯工具,也可以为其申请相应的指示器。输入你的MSN Messenger用户名,网站很快会为你生成一段代码,这段代码显示的是一个图标,通过其颜色的变化来显示你的Messenger的不同状态,直接将此代码按上述方法添加到日志中就可以了。有两个问题需要注意:该状态指示不会实时更新,它显示的状态是访问者登陆你的空间时你的在线状态,如果你在此期间上线或离线,指示器不会实时同步做出反应,除非刷新页面才会看出变化。另外显示的状态和真实状态可能会有稍许延迟,但不严重。还有一种情况也可能会发生,就是服务商的Server关机,那么指示器就无法正确显示任何状态了。 MSN Space进阶技巧-如何添加视频我要我的日志有声有色,不少在MSN Space安家的朋友都有这个想法。毕竟“声情并茂”的页面会吸引不少关注。上一章里我们了解了如何加入背景音乐,接下来我们看看怎样在日志中放入视频片断。 MSN Space进阶技巧-如何添加背景音乐如何在自己MSN Space的日志中加入音频和视频是目前许多朋友关注的问题,毕竟拥有声光效果的页面即能娱人也能悦己。记得刚入Space的时候,一方面为它的简单实用而折服,另一方面又为它提供的少得可怜的个性化设置而烦恼,初期只是简单地写写字,上传些照片,后来学会了贴图都觉得兴奋不已。看看其他Blog空间五彩缤纷的样子,真的是羡慕不已。Space留给我们的发挥空间就真的如此有限吗?事实当然并非如此,无论微软是有意还是无意,她仍然在这里给了我们展示个性的可能,只是这种可能要靠大家自己去发现。好了,废话少说,进入正题! 先介绍如何添加音频,也就是为我们的日志加入背景音乐。目前Space上比较流行的做法是利用MS Frontpage,这对于手头没有该款网页编辑软件的朋友当然不是一个好消息。通过分析其语法格式,我发现了更为简便的办法,不需动用上述软件即可实现音频的加入。考虑到有些朋友对第一种方式可能也会感兴趣,因此一并将两种方法介绍如下: 1. MS Frontpage方式 首先在网上搜索你需要的音乐,这里推荐使用WMA格式的文件,因为它体积相对较小,因此会获得比较快的载入速度。你需要获取该文件的确切链接地址,格式形如: http://www.xxx.com/xxx.wma ,某些在线播放的音乐不会直接显示链接地址,如何获取之,请通过Google等搜索引擎查询相关技巧。当然最满意的是你自己拥有主页空间,这样你就可以把心仪的歌曲上传到那里,而且不用担心以后会出现因为链接失效而造成Space背景音乐无法载入的情况。有了链接地址后,运行MS Frontpage,新建一个文件,然后在页面中插入图片,图片建议越小越好。然后用鼠标右键单击该图片,选择“图片属性”,在弹出的对话框中选择“视频”选项,将刚刚获取的音频文件的链接粘贴到“视频源”一栏,然后设置“重复”选项中的“循环次数”,这里依你自己的喜好加以选择。“开始”选项中的设置不用管它,留空即可,最后点击“确定”。Frontpage会用一段时间获取你的视频源,时间长短依据你的音频文件的大小。这时你会发现原来插入的图片缩成了一个小图标,用鼠标右键单击它,然后点击“复制”。回到你的Space空间,新建一篇日志,或打开你想添加背景音乐的日志,将光标移至空白处,然后用 IE浏览器“编辑”菜单里的“粘贴”命令或CTRL+V快捷键,将你刚才复制的内容粘贴于此。正常的话,你不会看到任何粘贴的内容,再稍等一些时间,无须打开日志预览,你就可以听到背景音乐了。剩下的事,当然就是发布你的大作了。 2. Loadmemory简单语法方式 通过上述方法插入背景音乐,总的来说并不繁琐,但对于没有MS Frontpage以及对MS系列产品过敏的朋友该怎么解决这个问题呢。通过分析上述操作的源代码及语法格式,我发现了更为简便的方法,只需插入一个极简单的语法句子,就可快速实现背景音乐的加入。请大家记住下面这个语法: <P><IMG height=0 loop=infinite dynsrc=音频文件链接地址 width=0 border=0></P> 此段语法中唯一需要你更改的就是Loop,它控制循环播放的次数,当为infinite时是无限循环,为0时是不循环,其他循环次数只需键入相应数字即可。 在你的日志编辑页面,首先点击前文提到的“Edit It”按钮,进入HTML语法编辑模式,然后勾选Use HTML to Create Your Page,在空白处插入上述语法就可以了。由于需要载入时间,因此当你点击日志预览的时候,可能需要等待一会才能听到音乐。 MSN Space进阶技巧-立体彩色边框拥有了背景色彩的日志显得生动活泼了许多,那么如何让她更具特色呢?在这一章里我将向大家讲述如何定制具有立体效果的背景样式。 我们先从为日志文字添加带有色彩的边框说起,因为其涉及到的CSS边框属性语法是以后制作立体效果边框的基础形式。请记住下面这段语法: <div STYLE=\"border-style:solid;border-width:5pt; border-color:red\">日志文字</div> 它会在你的文字外围生成一个红色边框,border-width控制边框的粗细,border-color调整边框的颜色,这里你仍然何以使用前文提到的形式如#xxxxxx的颜色数值,而border-style则控制边框的效果,当使用“solid”则为单一颜色的线形简单边框。 接下来我们再将上述语法扩展一下,就可以获得具有立体效果的彩色边框。那么从何下手呢?其实就是在border-style后面使用不同的语法描述: Solid 简单线形边框 Double 简单双线边框 Groove 沟线立体效果边框 Ridge 脊线立体效果边框 Inset 嵌入线立体效果边框 Outset 浮出线立体效果边框 你可以在MSN Space日志中尝试一下上面不同的语法,然后在预览中观看效果。 通过定制边框的方法再将上一教程添加色彩的语法嵌套其中,你就可以创造出具有立体效果的彩色日志背景。 例如:<div STYLE=\"border-style:outset;border-width:2pt; border-color: red\"> <div style=\"width:100%;height:100%;background-color:#ffff00;\">日志文字 </div></div> 使用上述语法将会为你呈现一个黄底色红边框的浮出线效果背景,其实上述语法还有其他形式的简化写法,这里不再赘述,只采用上述较直接易理解形式。 对于背景边框的四个边你也可以按自己的需要进行调整,以左边框为例,你可以使用下述语法: Border-left-style:solid (double, groove, ridge, inset, outset)定制边框样式 Border-left-color: #xxxxxx定制边框颜色 Border-left-width: xpt 定制边框粗细 其他三个边框只要分别使用Right, Top, Bottom就可以了。将下面的语法放到你的日志中预览一下,看一看是什么效果: <div style= \"border-top-style:outset;border-right-style:outset;border-left-style:outset; border-bottom-style:outset;background-color:#cc3366\"> 你可以按照自己的想法随意调整四个边框的式样,以便创造与众不同的效果,记住一点,不同的属性描述之间用 ; 隔开。另外,你可能会注意到,当你设置完边框返回到日志文本编辑模式,在键入文字过程中如果使用回车键,就会又出现一个边框,从而影响文字的连贯性,这是因为HTML语法中不支持硬回车。要解决这个问题,必须返回到HTML编辑模式,在需要回车的地方键入<br>,需要几次回车就键入几个 <br>,然后再返回到文本编辑模式,你就会发现边框背景内已经为你加入了回车后的效果。 |
|
|