教程2:顶点渲染-C# Direct3D SDK 翻译(2)

 

C# Direct3D SDK 翻译2

教程2:顶点渲染

 /Files/idiot8/Tutorial2.rar
MS Direct3D
应用程序使用顶点渲染几何图形。任何一个3D场景都包含大量的几何图形。本教程首先按照教程1创建设备,接着创建一个最简单的一个三角形,显示出来

创建顶点缓存

本教程通过三个顶点来渲染一个2D的三角形,介绍了顶点缓存的概念。通常使用VertexBuffer对象来存放和渲染顶点。

任意组合CustomVertex中的预定义结构,能够按照你的要求,创建你想要的顶点结构。本教程中,顶点已经经过了转换,设置了其2D窗口坐标。(00)点代表着左上角,x轴的向右为正,y轴向下为正。这些顶点并没有使用光照,而是设置了本身的漫反射颜色。下面的程序片段就是设置顶点缓存的代码,顶点的结构是使用预定义结构CustomVertex.CustomVertex.TransformedColored

  [C#]

          
public class Vertices : Form

{

    
// Global variables for this project

    Device device 
= null// Rendering device

    VertexBuffer vb 
= null;

    .

    .

    .

    
public void OnCreateDevice(object sender, EventArgs e)

    
{

    Device dev 
= (Device)sender;

    

    
// Now create the vertex buffer

    vertexBuffer 
= new VertexBuffer(

        
typeof(CustomVertex.TransformedColored), 3, dev, 0

        CustomVertex.TransformedColored.Format, Pool.Default);

    vertexBuffer.Created 
+= 

        
new System.EventHandler(this.OnCreateVertexBuffer);

    
this.OnCreateVertexBuffer(vb, null);

    }


 

    
public void OnCreateVertexBuffer(object sender, EventArgs e)

    
{

    VertexBuffer vb 
= (VertexBuffer)sender;

    GraphicsStream stm 
= vb.Lock(000);

    CustomVertex.TransformedColored[] verts 
=

        
new CustomVertex.TransformedColored[3];

    .

    .

    .

    vb.Unlock();

    }


}



上面的代码中,调用VertexBuffer.Lock方法,使CPU直接存取顶点缓存中的数据,切记在使用了Lock方法后必须调用Unlock方法来释放缓存使用权。

初始化顶点

上面创建了一个包含三个顶点的数组,顶点结构CustomVertex.TransformedColored对应三角形的每个顶点的内容,包括坐标(xyz),缩放比例rhw和顶点颜色color。下面代码对顶点数组进行了初始化。ToArgb 方法将颜色值转换成ARGB 32-bit的格式   

     [C#]

          
verts[
0].X=150; verts[0].Y=50; verts[0].Z=0.5f; verts[0].Rhw=1

verts[
0].Color = System.Drawing.Color.Aqua.ToArgb();

 

verts[
1].X=250; verts[1].Y=250; verts[1].Z=0.5f; verts[1].Rhw=1;

verts[
1].Color = System.Drawing.Color.Brown.ToArgb();

 

verts[
2].X=50; verts[2].Y=250; verts[2].Z=0.5f; verts[2].Rhw=1;

verts[
2].Color = System.Drawing.Color.LightPink.ToArgb();

 

stm.Write(verts);

在上面代码中出现了GraphicsStreamstm,该类是用来绑定要使用的数据。在上面代码中,GraphicsStream直接写入顶点缓存,就是说,该类将设置好的顶点内容,按照流的方式写入到顶点缓存中。

渲染三角形

下面的代码揭示了怎样通过扩展教程1中的render方法,初始化渲染图源,顶点格式,以及调用Device的图元渲染来在屏幕上显示一个三角形。只要系统触发了paint事件,窗口类frm有效,三角形就会显示在屏幕上。

[C#]

          
private void Render()

{

    
if (device == null)

    
return;

    

    
// Clear the back buffer to a blue color (ARGB = 000000ff)

    device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 
1.0f0);

    
// Begin the scene

    device.BeginScene();

    

    
// New for Tutorial 2

    device.SetStreamSource(
0, vertexBuffer, 0);

    device.VertexFormat 
= CustomVertex.TransformedColored.Format;

    device.DrawPrimitives(PrimitiveType.TriangleList, 
01);

    

    
// End the scene

    device.EndScene();

    device.Present();

}

posted on 2005-09-23 21:36  idiot8  阅读(2220)  评论(1)    收藏  举报