三国志11吧 关注:324,939贴子:11,233,569

回复:【无聊常更新贴】自制三国游戏的流程

取消只看楼主收藏回复

前面说了【像素图】每个点有三个属性R、G、B
其实还可以有一个属性叫做【alpha】就是透明值
透明值也是一个0~255范围的数,表示这个点的颜色透明度


81楼2011-11-25 19:09
回复
    但是我们使用的图片格式.bmp不支持这第四个值
    于是要手动添加~~~
    这就遇到了一个问题,怎么判定哪个点是透明的?
    所以只有制定透明色,比如制定黑色,是透明色……
    那么在整个图片里,黑色的地方的透明值都是0
    于是,在绘制的时候,就可以设置一下,过滤掉某些透明值不足的点……
    比如说过滤掉所有值不大于0的点,那么这个图片里所有黑色都被屏蔽了


    82楼2011-11-25 19:12
    回复
      2026-08-10 07:40:05
      广告
      不感兴趣
      开通SVIP免广告
      还有一种方法……叫做【模板图】
      ……这个【模板图】很特殊,他每个点只有一个值,有或无
      ……在读取一个图片时,也要连带读取他配套的模板图,因为模板图里标记了哪些点是透明的,所以模板图的大小和原图是一样的…………这样很麻烦,所以我只制定透明色不用模板


      83楼2011-11-25 19:14
      回复
        上个例子
        这张图片,曹操的背景设成了黑色……那就是指定的透明色



        85楼2011-11-25 19:23
        回复

          按原来的方式绘制的话,就是这个样子,有黑色的部分覆盖在背景上【背景图片:苍天航路】


          86楼2011-11-25 19:25
          回复
            改用绘制透明图片的方法绘制
            那么黑色的部分就被过滤掉了~~~~~



            87楼2011-11-25 19:27
            回复
              这就是透明图片的绘制原理……
              如果不能绘制透明图片的话,那么就没办法制作画面精美的2D游戏
              而在3D应用中,透明纹理也是很重要的,比如表现树木
              用很多多边形模拟一棵树十分消耗资源,可以用一个一直朝向玩家的平面,上面绘制上树木,把周围无用的部分过滤掉……让后面的景色透过来,这样就很真实而且几乎不消耗资源~~~~~


              88楼2011-11-25 19:29
              回复
                ……开始说显示文字……又要有很长的铺垫~~~


                89楼2011-11-25 19:34
                回复
                  2026-08-10 07:34:05
                  广告
                  不感兴趣
                  开通SVIP免广告
                  其实字符在电脑中的储存形式和图片很像,也分为【点阵字体】和【矢量字体】
                  ……点阵字体就是一个矩阵,比如24x24 32x32其中每个点储存有无笔画覆盖
                  ……矢量字体,和矢量图的原理一样,用点线面这样的元素记录一个文字的形象……我觉得矢量字体很适宜描述汉字,但是不能体现个个字体的变化(如隶书楷书)……
                  在我使用的图形库中,没有对矢量的任何支持,所有只能用点阵字体,就像绘图一样绘制一个个的汉字


                  91楼2011-11-25 19:37
                  回复
                    ……好吧,定和三弟一同保卫北疆!!


                    93楼2011-11-25 19:38
                    回复
                      MS没啥事……我继续吧……


                      95楼2011-11-25 19:46
                      回复
                        虽说图形库只支持点阵字体(其实什么字体都不支持,只是能用点阵的方法显示字体)
                        但是……windows平台的矢量字体是他的一个优势……于是乎windows也提供了在openGL上使用矢量字体的接口函数……(Microsoft不能埋没了自己的优点)~~~~~
                        不过……不过……


                        96楼2011-11-25 19:48
                        回复
                          不过……很悲剧的是,好像只支持显示英文……这个,对我们就不公平了…………
                          其实这也是有原因的,因为这种发法是吧所有的英文字符存起来,用的时候直接绘制…………英文字符一共才几个?加上标点也就几十个,而我们华文……
                          洋洋数万字啊,都存起来这个资源消耗,是很不现实的,即使把常用的一两千存起来也很大了……所以矢量字体在中文上估计是被禁锢了


                          98楼2011-11-25 19:50
                          回复
                            ……于是去找别的方法……
                            大部分都有共同的思想,就是把中文字符当做一个位图绘制出来……
                            要显示哪个中文,就临时从中文库当中把那个字的【字模】提取出来,然后栅格化,之后绘制…………
                            这个其实对时间的消耗是很严重的……如果绘制的字很多的话,会严重减缓【帧率】!…………


                            99楼2011-11-25 19:53
                            回复
                              2026-08-10 07:28:05
                              广告
                              不感兴趣
                              开通SVIP免广告
                              这里说一下【帧率】
                              帧率,就是一定时间内重绘的次数……一般用1秒内重绘的次数衡量……简称fps
                              20+fps就达到了所谓的流畅速度……
                              60fps就大约是人眼能分辨的速率了……大部分游戏都设置了帧率封顶60fps,因为再高已经看不出来明显的变化了……
                              帧率的大小决定于绘制一次场景要干的事情的多少


                              100楼2011-11-25 19:56
                              回复