游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7904|回复: 11

怎样在d3d中画点和线?

[复制链接]

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-4-16 17:44:00 | 显示全部楼层 |阅读模式
点和线是在3d空间中定义的。不用hdc。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-4-16 18:07:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

inst::i3d::CBackBufferSurf : virtual public inst:ISurf

virtual void inst::i3d::CBackBufferSurf:rawLine,SetPixel

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-4-16 18:55:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

有这个函数吗?
另外头像orz一下。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-4-16 21:02:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

D3DPT_POINTLIST //画点
D3DPT_LINELIST //画线

if(BackBuffer是当前RenderTarget) //可以不用gdi
{
    device->SetStreamSource(0,VB,0,SIZE);
    device->DrawPrimitive(D3DPT_LINELIST,0,1); //划线
}
画点原理一样。
我才实现了ISurf::Blt方法,昨晚忙了RTTI,估计今天或明天要把DrawLine等实现出来

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2008-4-16 21:20:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

哦,还有,深度的问题,你是要实现在3D空间中的点和线(如地形上),
还是2D空间(如UI中)的点和线呢?

在3D空间还涉及到坐标变换的问题。

我的ISurf是用来处理2D的,在d3d实现中,我用XYZRHW,还把深度设为0。
可以修改,不过是静态变量(全局的)。

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2008-4-17 07:40:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

路过顺便打听一下,D3D能改变画线粗细吗?

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-4-17 07:50:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

初步确定是id3dxline,应该可以改变宽度的,有setwidth的接口。

// In the header.  
  
ID3DXLine *line;  
  
// In the cpp.  
  
OnCreateDevice()  
  
{  
  
D3DXCreateLine( d3dDevice, &line );  
  
line->SetWidth( 10 );  
  
line->SetPattern( 0xffffffff );  
  
}  
  
OnRestoreDevice()  
  
{  
  
line->OnResetDevice();  
  
}  
  
OnRender()  
  
{  
  
if( line )  
  
{  
  
D3DXVECTOR2 points[2];  
  
points[0] = D3DXVECTOR2( 0.0f, 50.0f );  
  
points[1] = D3DXVECTOR2( 400.0f, 50.0f );  
  
line->Draw( points, 2, 0xffffffff );  
  
}  
  
}  
  
OnDeviceLost()  
  
{  
  
line->OnLostDevice();  
  
}  
  
OnDeleteDevice()  
  
{  
  
line->Release();  
  
}  

  
line->OnResetDevice();  
  
}  
  
OnRender()  
  
{  
  
if( line )  
  
{  
  
D3DXVECTOR2 points[2];  
  
points[0] = D3DXVECTOR2( 0.0f, 50.0f );  
  
points[1] = D3DXVECTOR2( 400.0f, 50.0f );  
  
line->Draw( points, 2, 0xffffffff );  
  
}  
  
}  
  
OnDeviceLost()  
  
{  
  
line->OnLostDevice();  
  
}  
  
OnDeleteDevice()  
  
{  
  
line->Release();  
  
}  

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-4-17 09:12:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

错了,这个是2D的,不顶用

54

主题

2916

帖子

3765

积分

论坛元老

Rank: 8Rank: 8

积分
3765
QQ
发表于 2008-4-17 12:18:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

http://msdn.microsoft.com/archiv ... /ID3DXLine/Draw.asp
的确,2D的不太顶用,不过还是感谢LS的回答。
要是能象OpenGL里的“glLineWidth(wire_size);”函数就好了。

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-4-17 13:44:00 | 显示全部楼层

Re:怎样在d3d中画点和线?

目前只能用三角形近似表示,不过书上说了有表示线的图元,就是没讲。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 19:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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