08 2006 档案

摘要:5、 三角形扇形列表最后一种三角形列表显示是扇形排列的三角形列表。这种排列方式,有一个特别的地方,就是所有三角形共享一个顶点,这样特别适合构成曲面的地方,比如球体和圆形的东西。下面看看这个例子显示的图:通过上面这个图,可以看到4个三角形共享一个顶点,这个顶点是红颜色的,其它不同的顶点不同的颜色。下面来看看程序是怎么样实现它的显示的:HRESULT hr;// 创建顶点缓冲区。if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 2*3 * sizeof(VT_CAIPRIMITIVE), 0, VT_CAIPRIMITIVE::dwFVF, 阅读全文
posted @ 2006-08-27 21:39 ajuanabc 阅读(134) 评论(0) 推荐(0) 编辑
摘要:4、 三角形带列表三角形显示的方式总共分为三种,前面已经学习最多的是三角形列表,现在再来看看三角形带列表是什么样的,这样有什么优点呢?这里显示图形如下:上面的图形可以看出,只有6个顶点就可以显示4个三角形,而采用三角形列表的方式,只能显示两个三角形。因此采用这种方式就会大大提高渲染效率,减少占用内存空间,减少占用系统带宽。具体的程序如下:HRESULT hr;// 创建顶点缓冲区。if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 2*3 * sizeof(VT_CAIPRIMITIVE), 0, VT_CAIPRIMITIVE::dwF 阅读全文
posted @ 2006-08-24 22:58 ajuanabc 阅读(165) 评论(0) 推荐(0) 编辑
摘要:3、 线带列表在D3D里还提供线带列表显示,这种显示方式是把所有直线顺着顶点连接显示出来。如下图所示:采用线带列表显示的方式,可以减少顶点占用内存空间,提高显示效率。下面这段代码就是显示6个顶点的直线。m_nLineStripCount = 3;HRESULT hr;// 创建顶点缓冲区。if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( m_nLineStripCount*2 * sizeof(VT_CAIPRIMITIVE), 0, VT_CAIPRIMITIVE::dwFVF, D3DPOOL_MANAGED, &pVB, 阅读全文
posted @ 2006-08-23 22:52 ajuanabc 阅读(145) 评论(0) 推荐(0) 编辑
摘要:2、 线列表D3D还提供直线的显示,由于很多自然现现象需要它来显示。比如大雨,就需要使用直线来模拟出来。如下图所示:这里显示三条红、绿、蓝的直线。它的代码如下:pVertices[0].vPosition = D3DXVECTOR3( -2.0f, 0.0f,0.0f ); pVertices[0].crDiffuse = D3DCOLOR_COLORVALUE( 1.0, 0.0, 0.0, 1.0 );pVertices[1].vPosition = D3DXVECTOR3( 2.0f, 0.0f,0.0f ); pVertices[1].crDiffuse = D3DCOLOR_COLO 阅读全文
posted @ 2006-08-22 00:12 ajuanabc 阅读(128) 评论(0) 推荐(0) 编辑
摘要:2.10.1基本图形显示在D3D里只有几种基本图形可以显示的,它们分别是:点列表、线列表、线带列表、三角形列表、三角形带列表、三角形扇形列表。其它任何的图形,都可以由这向这几种基本图形组合出来。上面已经介绍了三角形显示了,所以这里就不再具体地说明它了。1、 点列表点列表主要显示为一个个像素点的集合,每个点都是单独显示,分离的。点列表作用是用来显示点元素,或者显示点线的。如下图所示:上面这个图就是使用点列表来显示一条正弦曲线。其实它们都是由分理的点组成,每个点可显示为不同的颜色。现在就看看怎么样用代码显示这条正弦曲线的。HRESULT hr;// 创建顶点缓冲区。if( FAILED( hr = 阅读全文
posted @ 2006-08-21 00:28 ajuanabc 阅读(140) 评论(0) 推荐(0) 编辑
摘要:<%@language=vbscript codepage=936 %><!--#include file="Conn.asp"--><%sql = "select * from smallclass order by smallclassid asc"set rs = conn.execute(sql)%><script language = "JavaScript">var onecount;onecount=0;subcat = new Array(); <% count = 阅读全文
posted @ 2006-08-20 10:40 ajuanabc 阅读(199) 评论(0) 推荐(0) 编辑
摘要:1、 使用索引缓冲区什么是索引缓冲区呢?其实索引缓冲区,就像指针一样的工具。顶点缓冲区里保存的是真实的顶点,而索引缓冲区只记录顶点缓冲区的顶点编号。比如顶点缓冲区里有4个顶点,而这4个顶点就可以构成两个三角形来显示。如果直接使用顶点缓冲区的话,就需要写6个顶点。这样就可以使用索引缓冲区,指明第一个三角形是由顶点编号1、2、3构成一个三角形,而第二个三角形就是1、3、4组成。现在把上面的立方体改为使用索引缓冲区,先创建8个顶点,如下:pVertices[0].vPosition = D3DXVECTOR3( -1.0f,-1.0f,-1.0f );pVertices[1].vPosition = 阅读全文
posted @ 2006-08-17 23:16 ajuanabc 阅读(121) 评论(0) 推荐(0) 编辑
摘要:2.10.1索引缓冲区上面已经学习了最简单的三角形显示,了解了整个3D物体的显示流程,下面来学习一个复杂一点的物体显示,使用12个三角形构造成的正方体显示。并且通过个例子学会使用索引缓冲区,提高图形绘制的速度和效率。1、 使用三角形构造立方体由前面可知,任何复杂的物体,都是由三角形组成的。现在就用12三角形构造一个正方体。先创建12点个顶点的缓冲区,然后再往里填写合适的数据,然后显示它出来。下面来仔细分析这段代码:在函数HRESULT CCAICube::Init(IDirect3DDevice9* pd3dDevice)里,先创建12顶点数据。const int nVTCount = 6*2 阅读全文
posted @ 2006-08-16 22:18 ajuanabc 阅读(148) 评论(0) 推荐(0) 编辑
摘要:1、 渲染物体经过前面这么多步骤,做足了准备工作,就可以渲染物体,显示三维空间的图像了。这时心情要兴奋起来,就看到自己辛苦的果实了。仔细地看一下前面的代码,创建的缓冲区还没有设置给D3D设备。下面就来做这方面的工作:// 渲染顶点缓冲区的内容。m_pd3dDevice->SetStreamSource( 0, m_pVB, 0, sizeof(VT_CAITRIANGLE) );m_pd3dDevice->SetFVF( VT_CAITRIANGLE::dwFVF );m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 阅读全文
posted @ 2006-08-14 23:53 ajuanabc 阅读(132) 评论(0) 推荐(0) 编辑
摘要:<!--FLASH样式本例可以设置TOP的数字,从而可以动态控制图象的数量--><!--#include file="inc/conn.asp"--><%Set rs=Server.CreateObject("ADODB.Recordset")sql="select top 5 * from product where elite=true order by updatetime desc"rs.open sql,conn,1,1%><DIV style="DISPLAY: none 阅读全文
posted @ 2006-08-14 17:53 ajuanabc 阅读(124) 评论(0) 推荐(0) 编辑
摘要:1、 投影变换矩阵投影变换矩阵是做什么的呢?这个更容易理解了。大家都应看过照片吧,那大家又想过照片是怎么样表现原来的物体呢?看到远处的山是小的,近处的人是大的。并且只有在一定的范围内的物体才照得清楚,其它的就不见了。在D3D里就需要把三维的物体空间投影到二维的屏幕空间显示,这就需要投影了。本来人眼看现实的物体时,总是经过投影变换的,把三维的物体通通变换成二维东西,这样就在人眼上看见东西就是三维的了。现在这个投影变换就是模拟人眼的作用,沿着光线的方向,那些能看见,那些不能看见。那些是近的,那些是远的。通过这样的计算,就会生成二维的图像,跟人眼看到真实的世界是相同的。如下图所示:在D3D里通过设置 阅读全文
posted @ 2006-08-13 00:03 ajuanabc 阅读(167) 评论(0) 推荐(0) 编辑
摘要:1、 视图变换矩阵视图变换矩阵是做什么用的呢?为什么需要视图变换矩阵呢?其实这个问题很好回答和理解的。在3D世界里,所有东西都是跟现实中的实物一样的,当用人的眼睛去观看现实中的实物时,总是从某一方向去观察的,这样就看到实物组成的图像。就像你拿着照相去照相是一样的,首先要调好焦距,对准物体。在D3D里也需要调好焦距,对准物体,否则什么也看不到。因此在D3D里,就需要设置好视图变换矩阵。也就是相机的位置和焦距。在视图变换矩阵里,是使用两个点来表达相机位置和焦距,如下图所示:在D3D里使用向量来表示相机位置,如下:D3DXVECTOR3 vFromPt = D3DXVECTOR3( 0.0f, 0. 阅读全文
posted @ 2006-08-11 23:58 ajuanabc 阅读(171) 评论(0) 推荐(0) 编辑
摘要:1、 世界坐标变换矩阵在设置顶点缓冲区之后,就需要设置物体的世界坐标变换矩阵。从解析几何里可以知道,无论二维还是三维的图像都可以通过齐次坐标来变换的。目前在三维里的变换,采用的矩阵是4×4的矩阵来实现变换处理。在D3D里定义D3DXMATRIX类型,使用它来表达一个矩阵,并且定义一系列的函数可以实现矩阵的运算。它的定义如下:typedef struct _D3DMATRIX { union { struct { float _11, _12, _13, _14; float _21, _22, _23, _24; float _31, _32, _33, _34; float _41 阅读全文
posted @ 2006-08-11 00:15 ajuanabc 阅读(141) 评论(0) 推荐(0) 编辑
摘要:1、 顶点缓冲区顶点的数据是怎么样保存在内存里的呢?由于渲染需要,就要把顶点保存在内存缓冲区里。最简单的方法就是使用D3D提供的顶点缓冲区,即是使用IDirect3DVertexBuffer9接口的顶点缓冲区管理,它是通过D3D的设备来创建。这个接口实现顶点的资源管理,使用起来非常方便,由于它管理内存分配,这样就省了内存管理。下面就是通过IDirect3DDevice9::CreateVertexBuffer函数来创建一个顶点缓冲区:HRESULT hr;// 创建顶点缓冲区。if( FAILED( hr = m_pd3dDevice->CreateVertexBuffer( 3*2*s 阅读全文
posted @ 2006-08-09 13:14 ajuanabc 阅读(136) 评论(0) 推荐(0) 编辑
摘要:21 使用Direct3D2.11.1最简单三角形显示前面已经学习了顶点、平面以及平面的法向量。接着下面就带你进入奇幻的3D世界,由你去创造这个美好的3D世界。任何美好的事物都是简单的东西组成的,所以也需要从最简单的物体构造开始。这里主要显示一个三角形,其它关于窗口和初始化D3D的设备都已经由MM3D引擎做好了,目前只要设置顶点、世界坐标变换矩阵、观察变换矩阵、投影变换矩阵,然后渲染这个三角形,就可以显示屏幕里了。最终显示效果如下图:1、 顶点格式顶点格式是可变的,是灵活的。由前面可知,顶点肯定是有三个值的,就是三个坐标轴的值。下面先来看看最简单的顶点格式,它定义如下://定义顶点缓冲区里用到 阅读全文
posted @ 2006-08-08 13:16 ajuanabc 阅读(137) 评论(0) 推荐(0) 编辑
摘要:<!--#include file="inc/conn.asp"--><%Set rs=Server.CreateObject("ADODB.Recordset")sql="select top 5 * from product order by updatetime desc"rs.open sql,conn,1,1%><DIV id=oTransContainer style="FILTER: progid:DXImageTransform.Microsoft.Wipe(GradientSi 阅读全文
posted @ 2006-08-08 11:02 ajuanabc 阅读(149) 评论(0) 推荐(0) 编辑
摘要:2.10.1平面的表示3D空间里的物体都是实体的,主要由平面组成。比如正方体,就有6个平面。在D3D里组成三维物体的基本平面是三角形,无论是多么复杂的物体,都是有三角形组成的。并且D3D里支持显示最小的图形也是三角形,它是没有点和直线显示的。因此,要显示正方体,就需要把每个平面分成两个三角形,才能显示。如下图所示:为什么选择三角形作为D3D里最小的平面呢?由于三个点组成的平面,肯定是共面的,是平坦的,并且显示效率是最高的。如果选择其它多边形的话,就存在点不共面的情况,这样变得非常复杂,所以目前显示卡也是针对三角形进行优化显示的。要在D3D里显示物体,就是显示很多的三角形,让这些三角形连接起来, 阅读全文
posted @ 2006-08-06 00:42 ajuanabc 阅读(136) 评论(0) 推荐(0) 编辑
摘要:2.10.1坐标系在D3D里使用的坐标系是左手坐标系,就是当你看屏幕时,左手边是X轴的负方向,右手边是X轴的正方向。屏幕下边是Y轴的负方向,屏幕上边是Y轴的正方向。远离屏幕是Z轴的负方向,指向屏幕里面是Z轴的正方向。坐标系还有右手坐标系,还有其它各种各样的坐标系。如果需要从其它坐标里的图形显示在D3D里,就需要进行转换。2.10.2点在三维空间里表示物体位置,就需要用坐标来表示。由上面的坐标系可知,任何一点,都可以用三个坐标轴的值来表示。比如表示零点,就是O(0,0,0)。只要给出三个坐标轴的值,就可以知道这个点在什么位置了。从坐标系里,就知道我们定义的坐标轴是有方向的。那么在坐标系里的点,是 阅读全文
posted @ 2006-08-04 13:13 ajuanabc 阅读(172) 评论(0) 推荐(0) 编辑