DX9绘制虚线抗锯齿线-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(13)

DX9绘制虚线抗锯齿线 划线扩展

绘制划线的实际效果图如下:
DX9划虚线抗锯齿线 划线扩展
新建一个Form1,代码如下:

Private Sub Form_Load()

'新手注意:游戏编程中,
'通常将窗体的 BorderStyle 设置为“Fixed single”即不允许改变窗体大小
'通常将窗体的 MinButton 设置为“True”即允许最小化
'通常将窗体的 MaxButton 设置为“False”即禁止最大化

  '初始化引擎并设置引擎初始化窗体和引擎分辨率,但最好是电脑常用的分辨率比如 640,480 、 800,600 、 1024,768 、 1366,768
CWVBDX9Initialization Me, 800, 600, CW_Windowed
'初始化引擎(目标窗体,横向分辨率,纵向分辨率,窗口模式/全屏模式)
    
    Do While CWGameRun = True         '进入游戏循环
    
    If CWD3DDevice9.TestCooperativeLevel = 0 And Me.WindowState <> 1 Then  '检测是否可以渲染(设备正常并且窗体未最小化时渲染)
    CWBeginScene    '准备好绘制场景
    
    '关于颜色:可以使用BAS模块中已经设置好的常用颜色,也可用CWColorARGB函数自行转换,A分量为不透明度,RGB分量对应的颜色请参考RGB颜色表
    '关于颜色权重:颜色权重越高,该点的颜色在渐变过程中所占的区域就越大
    
    '画线(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,颜色)
    CWDrawLine 80, 50, 150, 50, CWRed
    
    '画线2(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,颜色[,抗锯齿,样式,线宽,缩放])
    CWDrawLine2 80, 75, 150, 75, CWRed                          ' 与原版对比
    CWDrawLine2 80, 100, 150, 100, CWRed, , , 2!                ' 粗线
    CWDrawLine2 80, 125, 150, 125, CWRed, True                  ' 抗锯齿线
    CWDrawLine2 80, 150, 150, 150, CWRed, , CWLP_Dash           ' 虚线 ___ '
    CWDrawLine2 80, 175, 150, 175, CWRed, , CWLP_Dot            ' 虚线 _ '
    CWDrawLine2 80, 200, 150, 200, CWRed, , CWLP_DashDot        ' 虚线 ___ _ '
    CWDrawLine2 80, 225, 150, 225, CWRed, , CWLP_DashDotDot     ' 虚线 _ ___ _ '
    CWDrawLine2 80, 250, 150, 250, CWRed, , CWLP_Minus          ' 虚线 __ '
    CWDrawLine2 80, 275, 150, 275, CWRed, , CWLP_DashMinus      ' 虚线 ___ __ '
    CWDrawLine2 80, 300, 150, 300, CWRed, , CWLP_MinusDot       ' 虚线 __ _ '
    CWDrawLine2 80, 325, 150, 325, CWRed, , CWLP_MinusDotDot    ' 虚线 _ __ _ '
    CWDrawLine2 80, 350, 150, 350, CWRed, , CWLP_Point          ' 虚线. . . ’
    CWDrawLine2 80, 375, 150, 375, CWRed, , CWLP_InvPoint       ' 虚线 . . .’
    CWDrawLine2 80, 400, 150, 400, CWRed, , CWLP_DotPointPoint  ' 虚线 . _ .’
    
    '抗锯齿对比
    CWDrawLine 200, 50, 350, 100, CWGreen               ' 原版画线
    CWDrawLine2 200, 75, 350, 125, CWGreen, False       ' 新版画线(有锯齿)
    CWDrawLine2 200, 100, 350, 150, CWGreen, True       ' 新版画线(抗锯齿)
    CWDrawLine2 200, 125, 350, 175, CWGreen, False, , 2!    ' 新版画线(加粗、有锯齿)
    CWDrawLine2 200, 150, 350, 200, CWGreen, True, , 2!     ' 新版画线(加粗、抗锯齿)
    CWDrawLine2 200, 175, 350, 225, CWGreen, False, , 5!    ' 新版画线(更粗、有锯齿)
    CWDrawLine2 200, 200, 350, 250, CWGreen, True, , 5!     ' 新版画线(更粗、抗锯齿)
    CWDrawLine2 200, 225, 350, 275, CWGreen, False, CWLP_DashDot, 2!        ' 新版画线(有锯齿、虚线、加粗、拉长)
    CWDrawLine2 200, 250, 350, 300, CWGreen, True, CWLP_DashDot, 2!         ' 新版画线(抗锯齿、虚线、加粗、拉长)
    CWDrawLine2 200, 275, 350, 325, CWGreen, False, CWLP_DashDot, 2!, 2!    ' 新版画线(有锯齿、虚线、加粗、拉长)
    CWDrawLine2 200, 300, 350, 350, CWGreen, True, CWLP_DashDot, 2!, 2!     ' 新版画线(抗锯齿、虚线、加粗、拉长)
    
    '画渐变色线(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,起点颜色权重,重点颜色权重,起点颜色,终点颜色)
    CWDrawLineEx 400, 50, 550, 50, 1, 2.5, CWRed, CWBlue
    
    '画多段线(坐标数组,颜色[,抗锯齿,样式,线宽,缩放])
    Dim pts(0 To 5) As D3DXVECTOR2
    MakeStar pts, 100, 500, 200
    CWDrawLine2Ex pts, CWBlue
    MakeStar pts, 100, 500, 400
    CWDrawLine2Ex pts, CWBlue, True, CWLP_Dot, 2!, 2!
    
    CWPresentScene   '呈现绘制的场景

'*******************************以下为固定写法,不要轻易改动***********************************
    Else                 '当不满足渲染条件时
        CWResetDevice       '修复设备
    End If

    Loop

        CWVBDX9Destory     '销毁CoolWind引擎
    End '退出
'*******************************以上为固定写法,不要轻易改动***********************************


End Sub
'画星星
Private Sub MakeStar(pts() As D3DXVECTOR2, ByVal R!, ByVal X!, ByVal Y!)
    Dim I&, L&, Ang!: L = UBound(pts) - LBound(pts)
    For I = LBound(pts) To UBound(pts)
      With pts(I)
        Ang = I * 4! * Pi / L
        .X = X + R * Sin(Ang)
        .Y = Y - R * Cos(Ang)
      End With
    Next
    
End Sub

BAS模块还是VBDX9BAS.bas

**ID3DXLine接口介绍:ID3DXLine接口使用纹理三角形实现线条绘制。ID3DXLine接口继承自IUnknown接口。
在VB6中调用如下:

Public CWLine As D3DXLine
D3DXCreateLine CWD3DDevice9, CWLine

ID3DXLine还具有以下类型的成员:
ID3DXLine成员名单

1,ID3DXLine::Begin:准备用于绘制线的设备。
c++调用如下:

HRESULT Begin();

vb6调用如下:

CWLine.Begin

2,ID3DXLine::Draw:在屏幕空间中绘制线条。输入以数组的形式,定义线条上的点(D3DXVECTOR2(描述包含运算符重载和类型强制转换的双分量向量。))。
C++调用原型:

typedef struct D3DXVECTOR2 {
  FLOAT x;
  FLOAT y;
} D3DXVECTOR2, *LPD3DXVECTOR2;

自爱VB6中定义:

Type D3DXVECTOR2
x as single
y as single
End type

3,ID3DXLine::End:将设备状态还原为调用ID3DXLine::Begin时的状态。
C++调用:

HRESULT End();

在VB6中调用如下:

CWLine.End

4,ID3DXLine::SetAntialias:切换线条抗锯齿。
C++调用:

HRESULT SetAntialias(
  [in] BOOL bAntiAlias
);

参数说明:bAntiAlias:切换反锯齿的打开和关闭。TRUE打开反锯齿,FALSE关闭反锯齿。

在VB6中调用:

      Optional ByVal Antialias As Boolean
        CWLine.SetAntialias Antialias

5,ID3DXLine::SetPattern:将点画图案应用于线。
C++调用:

HRESULT SetPattern(
  [in] DWORD dwPattern 
);

参数说明:dwPattern,描述点画图案:1是不透明的,0是透明的。

在VB6中调用:

Optional ByVal  Pattern AS  Boolean
CWLine.SetPattern Pattern

6,ID3DXLine::SetWidth:指定线条的粗细。
C++调用:

HRESULT SetWidth(
  [in] FLOAT fWidth
);

参数说明:fWidth,描述线条宽度。
在VB6中调用:

Optional ByVal Width As Single = 1!
CWLine.SetWidth Width

7,ID3DXLine::SetPatternScale:沿线方向拉伸点画图案。
C++调用:

HRESULT SetPatternScale(
  [in] FLOAT fPatternScale
);

参数说明:fPatternScale,缝合图案缩放值。1.0f是默认值,表示无缩放。小于1.0f的值会缩小图案,大于1.0的值会拉伸图案。
在VB6中调用:

Optional ByVal PatternScale As Single = 1!
 CWLine.SetPatternScale PatternScale

8,ID3DXLine::OnLostDevice:使用此方法释放对视频内存资源的所有引用并删除所有状态块。每当设备丢失或重置设备之前,应调用此方法。
c++调用:

HRESULT OnLostDevice();

在vb6中调用:

CWLine.OnLostDevice

9,ID3DXLine::OnResetDevice:使用此方法重新获取资源并保存初始状态。
C++调用:

HRESULT OnResetDevice();

在VB6中调用:

 CWLine.OnResetDevice
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gosub60

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值