zoukankan      html  css  js  c++  java
  • 渲染的几个基本概念

    渲染主要概念就是用一张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

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

    显示器才能显示。

  • 相关阅读:
    JSP中自动刷新
    JSP点击计数器
    JSP页面重定向
    JSP处理日期
    Mybatis Generator生成数据库自带的中文注释
    GMT与Etc/GMT地区信息的时区转换
    《Redis入门指南》第2版 读书笔记
    ConcurrentHashMap
    应用服务器性能优化 之 消息队列(MQ:Message Queue)
    TabLayout让Fragment在ViewPager中的滑动切换更优雅
  • 原文地址:https://www.cnblogs.com/sld666666/p/1805310.html
Copyright © 2011-2022 走看看