游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2760|回复: 3

DirectDraw画线

[复制链接]

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
发表于 2006-5-21 12:03:00 | 显示全部楼层 |阅读模式
都知道DirectDraw是不封装几何图形绘制的,只有自己写,但我参考着那个什么Bresenham算法写的画线锯齿太严重了,有没有什么好的代码可以参考

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20737
发表于 2006-5-22 09:23:00 | 显示全部楼层

Re: DirectDraw画线



  1. // -------------------------------------------------------
  2. // Name: DrawLine()
  3. // Describe: 绘线(基于Buffer)
  4. // -------------------------------------------------------
  5. HRESULT CDisplay::DrawLine( LP_BITMAPX pBitmap, int nBeginX, int nBeginY, int nEndX, int nEndY, PIXEL Color )
  6. {
  7. #if _DEBUG
  8.         ASSERT(pBitmap);
  9.         ASSERT(pBitmap->GetBuffer());
  10. #endif

  11.         register int t;
  12.         int distance;
  13.         int x = 0, y = 0, delta_x, delta_y, incx, incy;
  14.         delta_x = nEndX-nBeginX;
  15.         delta_y = nEndY-nBeginY;
  16.         if(delta_x > 0)
  17.                 incx = 1;
  18.         else if(delta_x == 0)
  19.                 incx = 0;
  20.         else
  21.         {
  22.                 delta_x = -delta_x;
  23.                 incx = -1;
  24.         }
  25.         if(delta_y > 0)
  26.                 incy = 1;
  27.         else if(delta_y == 0)
  28.                 incy = 0;
  29.         else
  30.         {
  31.                 delta_y = -delta_y;
  32.                 incy = -1;
  33.         }
  34.         if(delta_x > delta_y)
  35.                 distance = delta_x; /* **** */
  36.         else
  37.                 distance = delta_y;
  38.         for(t=0; t<distance+2; t++)
  39.         {
  40. //                pBitmap->m_pBuffer[nBeginX + nBeginY * pBitmap->m_nPitchWidth] = Color;
  41.                 DrawPixel(pBitmap, nBeginX, nBeginY, Color);
  42.                 x += delta_x;
  43.                 y += delta_y;
  44.                 if(x > distance)
  45.                 {
  46.                         x -= distance;
  47.                         nBeginX += incx;
  48.                 }
  49.                 if(y > distance)
  50.                 {
  51.                         y -= distance;
  52.                         nBeginY += incy;
  53.                 }
  54.         }
  55.         return S_OK;
  56. }


复制代码

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20737
发表于 2006-5-22 09:24:00 | 显示全部楼层

Re:DirectDraw画线

以前的一段代码,锯齿肯定是有的,除非你做个边缘柔化。

10

主题

95

帖子

95

积分

注册会员

Rank: 2

积分
95
QQ
 楼主| 发表于 2006-5-24 23:00:00 | 显示全部楼层

Re:DirectDraw画线

啊,居然站长亲自回复了
惭愧的是,我参考的正是这段代码,不过把它糅入了自己的引擎而已,原来圣剑2就是站长写的阿(金点是成都的吧,站长难道也是成都人?),我写DDraw得很多细节都是参考的圣剑2,但我在这个引擎里面没有看到subtive blending 不知道游戏里面房子的影子是怎么弄的
我在站上找到了一篇关于wu像素的介绍,我觉得可以解决这个问题了,只是不知道速度会怎么样
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-24 14:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表