渲染的几个基本概念

渲染主要概念就是用一张2D图片来表现3D世界。

即首先描述出一个3D场景, 然后用用2D的图片来表现它。下面是渲染的几个基本概念

1.Model(模型)

    用三角形组成的格式物体

2.Vertex(点)

    点构成三角形。因为在D3D中, 一个点除了要描述其位置之外还要描述其他的信息,

所以单纯地用数学意义上的点来描述是不够的。如颜色:

struct  colorVertex
{
          float x, y, z;
         DWRD color
}

#define      FVF_COLOR(D3DFVF_XYZ | D3DFCF_DIFFUSE)

 

    当然,查看D3DFVF能得到所有关于点的格式的定义。

3. (Triangles)三角形

   三角形是3D所有物体的基础。画一个复杂图形就是画a list of 三角形。

4.Indices

    {BC4223FE-E8B8-4367-A4A3-F2B352B4BAFE}

    如上图所示, 点V0和V2, 被两个三角形共用了,我们是否需要6个点来描述2个三角形呢?

当然不必, 这用如下方法解决。

声明两个数组: Vertex 和 Index, 一个保持,所有的点,一个保存组成一个三角形所需点的索引。如:

Vertex vertexList[4] = {v0, v1,v2, v3}
WORD indexList[6] = {0,1,2 // triangle0
                      0,2,3}//triangle1

 

 

4. Camera(摄像机)

    摄像机指定一个3D场景哪一部分输出。

5.Overview of rendering

    Local Space--->World Space--->View Spance--->Backface Culling--->Lightting

-->Clipping--->Projection--->Viewport Space--->Rasterization

在D3D中, 我们使用IDirect3DDevice->SetTransform 函数来进行转换。

6.Local Space

    物体本身的坐标系, 必然一个球体, 圆心的Local Space 可以认为是(0,0,0)

7. World Space

    世界坐标系,还是上面的球, 其圆心在世界坐标系中可能是(100,0,1).

	D3DXMATRIX	cubeWorldMatrix;
	//在世界坐标系的物体位置
	D3DXMatrixTranslation(&cubeWorldMatrix, -3.0f, 2.0f, 6.0f);
	
	D3DXMATRIX	sphereWorldMatrix;
	//在世界坐标系的物体位置
	D3DXMatrixTranslation(&sphereWorldMatrix, 5.0f, 0.0f, 6.0f);

	//开始放于世界坐标系中
	Device->SetTransform(D3DTS_WORLD, &cubeWorldMatrix);
	DrawCube();// draw the cube

	Device->SetTransform(D3DTS_WORLD, &sphereWorldMatrix);
	DrawSpere();

 

8. View Space

    这个主要对摄像机的。

    在世界坐标系中, 摄像机是位于世界原点相对位置的。但是如果这样的话, 投影或者其他操作

是非常困难和低效的。所以我们把摄像机至于世界坐标系的原点,并把摄像头Z方向向下放置。这样

以来世界坐标系的所有物体就必须有一个相对于摄像机的转换,这个过程就叫做“View Space transform”

	D3DXVECTOR3	position(5.0f, 3.0f, -10.0f);//摄像机的原点
	D3DXVECTOR3	targetPoint(0.0f,0.0f,0.0f);//瞄向哪里
	D3DXVECTOR3	worldUp(.0f, 1.0f, .0f);//哪个方向是"上"

	D3DXMATRIX camera;
	D3DXMatrixLookAtLH(&camera, position, &targetPoint,&worldUp);
	Device->SetTransform(D3DTS_VIEW, &camera);

 

9. Backface culling

    我们永远也看不见一个物体的背面,所以就有了”Backface culling”。

10. Lighting

    灯光在世界坐标系中定义,但是会转换为摄像机坐标系来应用。灯光的主要目的就是为了

给场景更符合现实的表现。

11. Clipping

    裁剪在摄像机镜头之外的部分-->这个过程叫”Clipping”.

有三种形式的裁剪:

(1) Completely inside

(2) Completely outside

(3) Partially inside

12. Projection

    用N-1维来表示N维德过程叫做Prijection.当然这里我们可以狭义地认为用2D来表现3D。

13. Viewport Transform

    所谓视口转换就是把一块View的坐标映射到Client上。(很不严谨的描述,但是就是这个意思)

14. Rasterization

    光栅化过程需要非常集密的计算,通常需要显卡来做这事情。等光栅处理完毕以后,

显示器才能显示。

posted @ 2010-08-21 14:09  sld666666  阅读(714)  评论(0编辑  收藏  举报