Shading

原创 2006年05月28日 23:24:00

There are two shading modes that are presently used: flat shading and Gouraud shading.

Like many things in Direct3D, the shading mode is controlled through the Direct3D state machine.

// set flat shading
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);

// set Gouraud shading
Device->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
bool Setup()
{
     // create vertex buffer
     Device->CreateVertexBuffer(
          3 * sizeof(ColorVertex),
          D3DUSAGE WRITEONLY,
          ColorVertex::FVF,
          D3DPOOL MANAGED,
          &Triangle,
          0);

     // fill the buffers with the triangle data
     ColorVertex* v;
     Triangle->Lock(0, 0, (void**)&v, 0);

     v[0] = ColorVertex(-1.0f, 0.0f, 2.0f, D3DCOLOR XRGB(255,   0,
                                                         0));
     v[1] = ColorVertex( 0.0f, 1.0f, 2.0f, D3DCOLOR XRGB(  0, 255,
                                                         0));
     v[2] = ColorVertex( 1.0f, 0.0f, 2.0f, D3DCOLOR XRGB(  0,   0,
                                                         255));

     Triangle->Unlock();

     // set projection matrix
     D3DXMATRIX proj;
     D3DXMatrixPerspectiveFovLH(
          &proj,
          D3DX PI * 0.5f, // 90 - degree
          (float)Width / (float)Height,
          1.0f,
          1000.0f);
     Device->SetTransform(D3DTS PROJECTION, &proj);

     // set the render states
     Device->SetRenderState(D3DRS LIGHTING, false);

     return true;
}

Then, the Display function draws Triangle twice in two different positions and with different shade modes. The position of each triangle is controlled with the world matrix—World.

bool Display(float timeDelta)
{
     if( Device )
     {
         Device->Clear(0, 0, D3DCLEAR TARGET | D3DCLEAR ZBUFFER,
                       0xffffffff, 1.0f, 0);
         Device->BeginScene();

         Device->SetFVF(ColorVertex::FVF);
         Device->SetStreamSource(0, Triangle, 0, sizeof(ColorVertex));
         // draw the triangle to the left with flat shading
         D3DXMatrixTranslation(&World, -1.25f, 0.0f, 0.0f);
         Device->SetTransform(D3DTS WORLD, &World);

         Device->SetRenderState(D3DRS SHADEMODE, D3DSHADE FLAT);
         Device->DrawPrimitive(D3DPT TRIANGLELIST, 0, 1);

         // draw the triangle to the right with gouraud shading
         D3DXMatrixTranslation(&World, 1.25f, 0.0f, 0.0f);
         Device->SetTransform(D3DTS WORLD, &World);

         Device->SetRenderState(D3DRS SHADEMODE, D3DSHADE GOURAUD);
         Device->DrawPrimitive(D3DPT TRIANGLELIST, 0, 1);

         Device->EndScene();
         Device->Present(0, 0, 0, 0);
     }
     return true;
}
flat 和 GOURAUD 两种方式到是好理解,主要是我想看看,他程序的结构,是在setup把vertex的模型写好
,然后在display(){Device->BeginScene();}里面渲染。

相关文章推荐

【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)

终于到了Diffuse Shading一章的最后一篇了!回忆一下,在上一篇中,一共学习了两种改善漫反射光照的方法:一种是完全根据感性认识,使用Half Lembert方法改变了光照值区间,使得物体颜色...

基于Shading Model(对光照变化一定不变性)的运动目标检测算法

本文介绍一种基于光照模型(Shading Model)的运动目标检测算法。算法通过对光照模型的分析,得到基于两帧图像灰度比率的区域关系,计算两帧图像间区域内的灰度比率方差的均值来判断是否存在变化,也即...

Phong shading(补色渲染)

Phong着色法(Phong shading),是三维电脑图像的绘图技巧之一,结合了多边形物体表面反射光的亮度,并以特定位置的表面法线作为像素参考值,以插值方式来估计其他位置像素的色值。   这个方...

unity3d Realistic eye shading 真实的眼睛渲染

眼睛的shader,对眼球分虹膜巩膜,角膜三层编写shader进行渲染,效果真实可信...
  • wolf96
  • wolf96
  • 2015年03月24日 07:34
  • 4204

Deferred Shading介绍

在本文我将展示如何在XNA中使用deferred rendering。首先让我们理解什么是deferred shading,然后学习这个技术的几个步骤,从创建Geometry Buffer一直到管理材...

[gdc07]Rendering Architecture and Real-time Procedural Shading & Texturing Techniques

att
  • ccanan
  • ccanan
  • 2011年04月13日 21:35
  • 1763

matlab之prod() rem() true() flipdim()函数\shading

B = prod(A) 将A矩阵不同维的元素的乘积返回到矩阵B。 如果A是向量,prod(A)返回A向量的乘积。 如果A是矩阵,prod(A)将A看作列向量,返回每一列元素的乘积并组成一个行向量B。 ...

3D开发学习-着色语言 Shading Language基础(一)

一:简介: OpenGL ES 着色语言是一种高级的图形编程语言.其源自应用广泛的C语言,同时具有RenderMan以及其他编程语言的一些优良特性. 与传统的语言不同的是,他提供了更加丰富的原生类...

【raviramamoorthi-Computer Graphics】OpenGL Shading: Fragment Shader——2

void display(void) {   // clear all pixels     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER...

Deferred Shading VS Deferred Lighting

鉴于传统的Forward Rendering对于多光源渲染时的低效问题,各种Deferred Rendering的方法被提出并且广泛使用。比如Deferred Shading以及其之后的Deferre...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Shading
举报原因:
原因补充:

(最多只允许输入30个字)