顶点属性与顶点格式

一个RHW就让我晕了半天,终于查到资料了:

·顶点属性与顶点格式

顶点可谓是3D世界中的基本元素。在计算机所能描绘的3D世界中,任何物体都是由多边形构成的,可以是三边形,也可以是四边形等。由于三边形,即三角形所具有的特殊性质决定其在3D世界中得到广泛的使用。构成三角形需要三个点,这些点的性质就是这章所要讲的内容。

       也许你已经知道顶点的结构定义,你可能会奇怪为什么D3D会知道我们“随便”定义的那些结构呢?其实那些顶点的定义可不是那么随便的哦。下面列举在Direct3D中,顶点所具有的所有属性。

       (1)位置:顶点的位置,可以分别指定x,y,x三个值,也可以使用D3DXVECTOR3结构来定义。

       (2)RHW:齐次坐标W的倒数。如果顶点为变换顶点的话,就要有这个值。设置这个值意味着你所定义的顶点将不需要Direct3D的辅助(不能作变换、旋转、放大缩小、光照等),要求你自己对顶点数据进行处理。至于W是什么,W和XYZ一样,只是一个四元组的一部分。RHW的英文是Reciprocal of the Homogenous W,即1/W,它是为了处理矩阵的工作变得容易一些(呼,线性代数的东东快都忘了,要恶补一下才行)。一般设RHW的值为1.0。

       (3)混合加权:用于矩阵混合。高级应用,这里不讲了(其实我不会,^_^)

       (4)顶点法线:学过高等数学就应该知道法线是什么吧?在这里是指经过顶点且和由顶点引出的边相垂直的线,即和三角形那个面垂直。用三个分量来描述它的方向,这个属性用于光照计算。

       (5)顶点大小:设定顶点的大小,这样顶点就可以不用只占一个像素了。

       (6)漫反射色:即光线照射到物体上产生反射的着色。理解这个比较麻烦,因为3D光照和真实光照没什么关系,不能像理解真实光照那样去理解3D光照。

       (7)镜面反射色:它可以让一个3D物体的表面看起来很光滑。

       (8)纹理坐标:如果想要在那些用多边形组成的物体上面贴上纹理,就要使用纹理坐标。由于纹理都是二维的,所以用两个值就可以表示纹理上面某一点的位置。在纹理坐标中,只能在0.0到1.0之间取值。例如(0.0 , 0.0)表示纹理的左上角,(1.0 , 1.0)表示纹理的右下角。

       好了,请记住上面属性的顺序。我们定义一个顶点结构的时候,不一定要包括全部的属性,但是一定要按照上面的顺序来定义。例如:

       struct MYVERTEX

{

              D3DXVECTOR3 position;

              float rhw;

              D3DCOLOR color;

       }

       上面定义了一个有漫反射色的变换顶点。

       定义完了顶点的结构后,我们就要告诉D3D我们定义的是什么格式。为了方便,我们通常会用#define来定义一个叫做描述“灵活顶点格式”(FVF:Flexible Vertex Format)的宏。例如:#define MYFVF D3DFVF_XYZ | D3DFVF_NORMAL。根据之前定义的顶点属性结构体,我们要定义相对应的宏。假如顶点结构中有位置属性,那么就要使用D3DFVF_XYZ;如果是变换顶点的话,就要使用D3DFVF_XYZRHW;如果使用了漫反射色属性的话,就要使用D3DFVF_DIFFUSE。这些值是可以组合使用的,像上面那样用“|”符号作为连结符。定义完灵活顶点格式后,使用IDirect3DDevice9::SetVertexShader函数来告诉D3D我们所定义的顶点格式,例如:g_pD3DDevice->SetVertexShader( MYFVF );  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nebula Graph是一个分布式的图数据库,下面是一些常见的操作: 1. 插入顶点 Nebula Graph支持使用INSERT语句插入顶点。以下是一个示例: ```sql INSERT VERTEX player(name, age) VALUES 100:(Tom, 18) ``` 其中,`player`是顶点的标签,`name`和`age`是属性名称,`100`是顶点ID,`(Tom, 18)`是属性值。INSERT语句还支持批量插入多个顶点。 2. 插入边 Nebula Graph支持使用INSERT语句插入边。以下是一个示例: ```sql INSERT EDGE like(likeness) VALUES 100 -> 200:(80.0) ``` 其中,`like`是边的类型,`likeness`是边的属性名称,`100`和`200`是起点和终点的顶点ID,`(80.0)`是边的属性值。INSERT语句还支持批量插入多条边。 3. 查询顶点 Nebula Graph支持使用MATCH语句查询顶点。以下是一个示例: ```sql MATCH (v:player) WHERE v.name == "Tom" RETURN v ``` 其中,`player`是顶点的标签,`name`是属性名称,`Tom`是属性值。MATCH语句还支持多个条件的组合查询,以及对查询结果进行排序、分页等操作。 4. 查询边 Nebula Graph支持使用MATCH语句查询边。以下是一个示例: ```sql MATCH (v1)-[e:like]->(v2) WHERE v1.name == "Tom" RETURN e ``` 其中,`like`是边的类型,`Tom`是起点顶点属性值。MATCH语句还支持多个条件的组合查询,以及对查询结果进行排序、分页等操作。 5. 插入顶点属性 Nebula Graph支持使用UPDATE语句插入顶点属性。以下是一个示例: ```sql UPDATE 100 SET age = 20 ``` 其中,`100`是顶点ID,`age`是属性名称,`20`是属性值。UPDATE语句还支持批量更新多个顶点属性。 6. 插入边属性 Nebula Graph支持使用UPDATE语句插入边属性。以下是一个示例: ```sql UPDATE like BETWEEN 100 -> 200 SET likeness = 90.0 ``` 其中,`like`是边的类型,`100`和`200`是起点和终点的顶点ID,`likeness`是属性名称,`90.0`是属性值。UPDATE语句还支持批量更新多条边的属性

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值