青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Programmer's Cookbook

{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

紋理+VertexElement(二)

代碼:
//------------------------------------------------------------------------------
//           Name: dx9cs_multiple_vertex_buffers.cs
//         Author: Kevin Harris
//  Last Modified: 06/15/05
//    Description: This sample demonstrates how to create 3D geometry with 
//                 Direct3D by loading vertex data into a multiple Vertex 
//                 Buffers.
//------------------------------------------------------------------------------

using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace DX9Sample
{
    
public class DX9Form : System.Windows.Forms.Form
    
{
        
private Device d3dDevice = null;
        
private bool mousing = false;
        
private Point ptLastMousePosit;
        
private Point ptCurrentMousePosit;
        
private int spinX;
        
private int spinY;
        
private VertexBuffer vertexBuffer = null//頂點
        private VertexBuffer colorBuffer = null;  //頂點顏色
        private VertexBuffer texCoordBuffer = null//紋理
        Texture texture = null;

        
static private float elapsedTime;
        
static private DateTime currentTime;
        
static private DateTime lastTime;
      
        
struct Vertex
        
{
            
float x, y, z;

            
public Vertex( float _x, float _y, float _z )
            
{
                x 
= _x;
                y 
= _y;
                z 
= _z;
            }

        }
;//頂點結構

        Vertex[] cubeVertices 
=
        
{
            
new Vertex(-1.0f1.0f,-1.0f ),
            
new Vertex( 1.0f1.0f,-1.0f ),
            
new Vertex(-1.0f,-1.0f,-1.0f ),
            
new Vertex( 1.0f,-1.0f,-1.0f ),

            
new Vertex(-1.0f1.0f1.0f ),
            
new Vertex(-1.0f,-1.0f1.0f ),
            
new Vertex( 1.0f1.0f1.0f ),
            
new Vertex( 1.0f,-1.0f1.0f ),

            
new Vertex(-1.0f1.0f1.0f ),
            
new Vertex( 1.0f1.0f1.0f ),
            
new Vertex(-1.0f1.0f,-1.0f ),
            
new Vertex( 1.0f1.0f,-1.0f ),

            
new Vertex(-1.0f,-1.0f1.0f ),
            
new Vertex(-1.0f,-1.0f,-1.0f ),
            
new Vertex( 1.0f,-1.0f1.0f ),
            
new Vertex( 1.0f,-1.0f,-1.0f ),

            
new Vertex( 1.0f1.0f,-1.0f ),
            
new Vertex( 1.0f1.0f1.0f ),
            
new Vertex( 1.0f,-1.0f,-1.0f ),
            
new Vertex( 1.0f,-1.0f1.0f ),

            
new Vertex(-1.0f1.0f,-1.0f ),
            
new Vertex(-1.0f,-1.0f,-1.0f ),
            
new Vertex(-1.0f1.0f1.0f ),
            
new Vertex(-1.0f,-1.0f1.0f )
        }
;

        
struct DiffuseColor
        
{
            
int color;

            
public DiffuseColor( int _color )
            
{
               color 
= _color;
            }

        }
;//顏色結構

        DiffuseColor[] cubeColors 
=
        
{
            
new DiffuseColor( Color.Red.ToArgb() ),
            
new DiffuseColor( Color.Red.ToArgb() ),
            
new DiffuseColor( Color.Red.ToArgb() ),
            
new DiffuseColor( Color.Red.ToArgb() ),

            
new DiffuseColor( Color.Green.ToArgb() ),
            
new DiffuseColor( Color.Green.ToArgb() ),
            
new DiffuseColor( Color.Green.ToArgb() ),
            
new DiffuseColor( Color.Green.ToArgb() ),

            
new DiffuseColor( Color.Blue.ToArgb() ),
            
new DiffuseColor( Color.Blue.ToArgb() ),
            
new DiffuseColor( Color.Blue.ToArgb() ),
            
new DiffuseColor( Color.Blue.ToArgb() ),

            
new DiffuseColor( Color.Yellow.ToArgb() ),
            
new DiffuseColor( Color.Yellow.ToArgb() ),
            
new DiffuseColor( Color.Yellow.ToArgb() ),
            
new DiffuseColor( Color.Yellow.ToArgb() ),

            
new DiffuseColor( Color.Magenta.ToArgb() ),
            
new DiffuseColor( Color.Magenta.ToArgb() ),
            
new DiffuseColor( Color.Magenta.ToArgb() ),
            
new DiffuseColor( Color.Magenta.ToArgb() ),

            
new DiffuseColor( Color.Cyan.ToArgb() ),
            
new DiffuseColor( Color.Cyan.ToArgb() ),
            
new DiffuseColor( Color.Cyan.ToArgb() ),
            
new DiffuseColor( Color.Cyan.ToArgb() )
        }
;

        
struct TexCoord
        
{
            
float tu, tv;

            
public TexCoord( float _tu, float _tv )
            
{
                tu 
= _tu;
                tv 
= _tv;
            }

        }
;//紋理結構

        TexCoord[] cubeTexCoords 
=
        
{
            
new TexCoord( 0.0f0.0f ),
            
new TexCoord( 1.0f0.0f ),
            
new TexCoord( 0.0f1.0f ),
            
new TexCoord( 1.0f1.0f ),

            
new TexCoord( 1.0f0.0f ),
            
new TexCoord( 1.0f1.0f ),
            
new TexCoord( 0.0f0.0f ),
            
new TexCoord( 0.0f1.0f ),

            
new TexCoord( 0.0f0.0f ),
            
new TexCoord( 1.0f0.0f ),
            
new TexCoord( 0.0f1.0f ),
            
new TexCoord( 1.0f1.0f ),

            
new TexCoord( 0.0f0.0f ),
            
new TexCoord( 1.0f0.0f ),
            
new TexCoord( 0.0f1.0f ),
            
new TexCoord( 1.0f1.0f ),

            
new TexCoord( 0.0f0.0f ),
            
new TexCoord( 1.0f0.0f ),
            
new TexCoord( 0.0f1.0f ),
            
new TexCoord( 1.0f1.0f ),

            
new TexCoord( 1.0f0.0f ),
            
new TexCoord( 1.0f1.0f ),
            
new TexCoord( 0.0f0.0f ),
            
new TexCoord( 0.0f1.0f )
        }
;

        
public DX9Form()
        
{
            
this.ClientSize = new Size( 640480 );
            
this.Text = "Direct3D (DX9/C#) - Multiple Vertex Buffers";
            
this.SetStyle( ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true );
        }


        
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        
{
            currentTime 
= DateTime.Now;
            TimeSpan elapsedTimeSpan 
= currentTime.Subtract( lastTime );
            elapsedTime 
= (float)elapsedTimeSpan.Milliseconds * 0.001f;
            lastTime 
= currentTime;

            
this.Render();
            
this.Invalidate();
        }


        
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
        
{
            
switch( e.KeyCode )
            
{
                
case System.Windows.Forms.Keys.Escape:
                    
this.Dispose();
                    
break;
            }

        }


        
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
        
{
            ptLastMousePosit 
= ptCurrentMousePosit = PointToScreen( new Point(e.X, e.Y) );
            mousing 
= true;
        }


        
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
        
{
            mousing 
= false;
        }


        
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
        
{
            ptCurrentMousePosit 
= PointToScreen( new Point(e.X, e.Y) );

            
if( mousing )
            
{
                spinX 
-= (ptCurrentMousePosit.X - ptLastMousePosit.X);
                spinY 
-= (ptCurrentMousePosit.Y - ptLastMousePosit.Y);
            }

            
            ptLastMousePosit 
= ptCurrentMousePosit;
        }


        
protected override void Dispose(bool disposing)
        
{
            
base.Dispose( disposing );
        }


        
static void Main() 
        
{
            
using( DX9Form frm = new DX9Form() )
            
{
                frm.Show();
                frm.Init();
                Application.Run( frm );
            }

        }


        
private void LoadTexture()
        
{//load 紋理
            try
            
{
                Bitmap testImage 
= (Bitmap)Bitmap.FromFile( "test.bmp" );
                texture 
= Texture.FromBitmap( d3dDevice, testImage, 0, Pool.Managed );
            }

            
catch
            
{
                
// We must be running from within Visual Studio. Relocate the 
                
// current directory and try again.
                System.IO.Directory.SetCurrentDirectory(
                    System.Windows.Forms.Application.StartupPath 
+  @"\..\..\");

                Bitmap testImage 
= (Bitmap)Bitmap.FromFile( "test.bmp" );
                texture 
= Texture.FromBitmap( d3dDevice, testImage, 0, Pool.Managed );
            }


            d3dDevice.SamplerState[
0].MinFilter = TextureFilter.Linear;
            d3dDevice.SamplerState[
0].MagFilter = TextureFilter.Linear;
        }



        
/// <summary>
        
/// This method basically creates and initialize the Direct3D device and
        
/// anything else that doens't need to be recreated after a device 
        
/// reset.
        
/// </summary>

        private void Init()
        
{
            
//
            
// Do we support hardware vertex processing? If so, use it. 
            
// If not, downgrade to software.
            
//

            Caps caps 
= Manager.GetDeviceCaps( Manager.Adapters.Default.Adapter, 
                                               DeviceType.Hardware );
            CreateFlags flags;

            
if( caps.DeviceCaps.SupportsHardwareTransformAndLight )
                flags 
= CreateFlags.HardwareVertexProcessing;
            
else
                flags 
= CreateFlags.SoftwareVertexProcessing;

            
//
            
// Everything checks out - create a simple, windowed device.
            
//

            PresentParameters d3dpp 
= new PresentParameters();

            d3dpp.BackBufferFormat       
= Format.Unknown;
            d3dpp.SwapEffect             
= SwapEffect.Discard;
            d3dpp.Windowed               
= true;
            d3dpp.EnableAutoDepthStencil 
= true;
            d3dpp.AutoDepthStencilFormat 
= DepthFormat.D16;
            d3dpp.PresentationInterval   
= PresentInterval.Immediate; 

            d3dDevice 
= new Device( 0, DeviceType.Hardware, this, flags, d3dpp );

            
// Register an event-handler for DeviceReset and call it to continue
            
// our setup.
            d3dDevice.DeviceReset += new System.EventHandler( this.OnResetDevice );
            OnResetDevice( d3dDevice, 
null );
        }


        
/// <summary>
        
/// This event-handler is a good place to create and initialize any 
        
/// Direct3D related objects, which may become invalid during a 
        
/// device reset.
        
/// </summary>

        public void OnResetDevice(object sender, EventArgs e)
        
{
            Device device 
= (Device)sender;
            device.Transform.Projection 
= 
                Matrix.PerspectiveFovLH( Geometry.DegreeToRadian( 
45.0f ),
                (
float)this.ClientSize.Width / this.ClientSize.Height,
                
0.1f100.0f );

            device.RenderState.ZBufferEnable 
= true;
            device.RenderState.Lighting 
= false;

            
//
            
// Create a vertex buffer that contains only the cube's vertex data
            
//

            vertexBuffer 
= new VertexBuffer( typeof(Vertex),
                                             cubeVertices.Length, device,
                                             Usage.Dynamic 
| Usage.WriteOnly,
                                             VertexFormats.Position,
                                             Pool.Default );

            GraphicsStream gStream 
= vertexBuffer.Lock( 00, LockFlags.None );

            
// Now, copy the vertex data into the vertex buffer
            gStream.Write( cubeVertices );

            vertexBuffer.Unlock();

            
//
            
// Create a vertex buffer that contains only the cube's color data
            
//

            colorBuffer 
= new VertexBuffer( typeof(DiffuseColor),
                                            cubeVertices.Length, device,
                                            Usage.Dynamic 
| Usage.WriteOnly,
                                            VertexFormats.Diffuse,
                                            Pool.Default );

            gStream 
= null;
            gStream 
= colorBuffer.Lock( 00, LockFlags.None );

            
// Now, copy the vertex data into the vertex buffer
            gStream.Write( cubeColors );

            colorBuffer.Unlock();

            
//
            
// Create a vertex buffer that contains only the cube's texture coordinate data
            
//

            texCoordBuffer 
= new VertexBuffer( typeof(TexCoord),
                                               cubeVertices.Length, device,
                                               Usage.Dynamic 
| Usage.WriteOnly,
                                               VertexFormats.Texture1,
                                               Pool.Default );

            gStream 
= null;
            gStream 
= texCoordBuffer.Lock( 00, LockFlags.None );

            
// Now, copy the vertex data into the vertex buffer
            gStream.Write( cubeTexCoords );

            texCoordBuffer.Unlock();

            
//
            
// Create a vertex declaration so we can describe to Direct3D how we'll 
            
// be passing our data to it.
            
//

            
// Create the vertex element array.
            VertexElement[] elements = new VertexElement[]
            
{
                
//                Stream  Offset        Type                    Method                 Usage                      Usage Index
                new VertexElement( 0,     0,  DeclarationType.Float3, DeclarationMethod.Default, DeclarationUsage.Position,          0),
                
new VertexElement( 1,     0,  DeclarationType.Color,  DeclarationMethod.Default, DeclarationUsage.Color,             0),
                
new VertexElement( 2,     0,  DeclarationType.Float2, DeclarationMethod.Default, DeclarationUsage.TextureCoordinate, 0),

                VertexElement.VertexDeclarationEnd 
            }
;

            
// Use the vertex element array to create a vertex declaration.
            d3dDevice.VertexDeclaration = new VertexDeclaration( d3dDevice, elements );

            LoadTexture();
        }


        
/// <summary>
        
/// This method is dedicated completely to rendering our 3D scene and is
        
/// is called by the OnPaint() event-handler.
        
/// </summary>

        private void Render()
        
{
            d3dDevice.Clear( ClearFlags.Target 
| ClearFlags.ZBuffer, 
                             Color.FromArgb(
255000), 1.0f0 );

            d3dDevice.BeginScene();

            d3dDevice.Transform.World 
= 
                Matrix.RotationYawPitchRoll( Geometry.DegreeToRadian(spinX),
                Geometry.DegreeToRadian(spinY), 
0.0f* 
                Matrix.Translation(
0.0f0.0f5.0f);

            d3dDevice.SetStreamSource( 
0, vertexBuffer,   0 );
            d3dDevice.SetStreamSource( 
1, colorBuffer,    0 );
            d3dDevice.SetStreamSource( 
2, texCoordBuffer, 0 );

            d3dDevice.SetTexture( 
0, texture );

            d3dDevice.DrawPrimitives( PrimitiveType.TriangleStrip,  
02 );
            d3dDevice.DrawPrimitives( PrimitiveType.TriangleStrip,  
42 );
            d3dDevice.DrawPrimitives( PrimitiveType.TriangleStrip,  
82 );
            d3dDevice.DrawPrimitives( PrimitiveType.TriangleStrip, 
122 );
            d3dDevice.DrawPrimitives( PrimitiveType.TriangleStrip, 
162 );
            d3dDevice.DrawPrimitives( PrimitiveType.TriangleStrip, 
202 );

            d3dDevice.EndScene();

            d3dDevice.Present();
        }

    }

}

posted on 2007-11-09 18:01 夢在天涯 閱讀(1759) 評論(0)  編輯 收藏 引用 所屬分類: DirectX

公告

EMail:itech001#126.com

導航

統計

  • 隨筆 - 461
  • 文章 - 4
  • 評論 - 746
  • 引用 - 0

常用鏈接

隨筆分類

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1819356
  • 排名 - 5

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              老牛国产精品一区的观看方式| 国产精品每日更新| 亚洲看片免费| 亚洲在线一区| 国产一区二区三区在线观看网站| 久久久精品日韩欧美| 亚洲韩国日本中文字幕| 一区二区动漫| 国产手机视频一区二区| 麻豆国产精品va在线观看不卡 | 亚洲高清视频在线观看| 99视频在线精品国自产拍免费观看| 国产精品高清在线观看| 欧美在线看片| 亚洲精品一级| 久久人人97超碰国产公开结果| 亚洲精品一二三区| 国产日韩欧美中文| 欧美精品aa| 久久精品亚洲国产奇米99| 亚洲经典一区| 久久久久国产精品厨房| 国产精品99久久久久久有的能看 | 亚洲免费在线电影| 欲色影视综合吧| 国产精品盗摄久久久| 久久久亚洲高清| 亚洲色图自拍| 亚洲第一精品夜夜躁人人躁| 欧美一区二区三区免费视频| 最近中文字幕日韩精品| 国产亚洲欧美一区| 欧美视频一区二区三区在线观看 | 黄色成人av在线| 欧美视频在线看| 免费在线成人| 久久精品视频在线看| 亚洲午夜视频在线| 亚洲免费av网站| 欧美大色视频| 久久综合色婷婷| 欧美一区二区三区男人的天堂 | 欧美三级中文字幕在线观看| 久久久999成人| 亚洲欧美制服中文字幕| 一区二区欧美在线观看| 91久久精品网| 欧美成人免费全部| 美女主播视频一区| 欧美综合国产精品久久丁香| 亚洲一二三级电影| 99re8这里有精品热视频免费 | 在线亚洲电影| 亚洲伦伦在线| 亚洲国产日韩欧美| 激情五月婷婷综合| 国产综合久久| 国产亚洲电影| 国产一级久久| 国模吧视频一区| 国产中文一区二区| 国模叶桐国产精品一区| 国产一区在线看| 国产一区二区在线免费观看| 国产情人节一区| 国产日韩欧美一区二区三区在线观看 | 亚洲调教视频在线观看| 亚洲狠狠婷婷| 亚洲精品五月天| 日韩视频精品| 一本综合精品| 亚洲综合国产| 欧美在线观看天堂一区二区三区| 欧美一区二区三区在线观看 | 欧美v国产在线一区二区三区| 久久亚洲精品一区| 女同一区二区| 亚洲国产视频一区二区| 亚洲日韩中文字幕在线播放| 日韩视频免费观看| 亚洲无线观看| 欧美一区1区三区3区公司| 久久久精品午夜少妇| 久久深夜福利免费观看| 欧美黄色aaaa| 国产精品爱久久久久久久| 国产精品一区久久久| 国模套图日韩精品一区二区| 亚洲国产午夜| 亚洲已满18点击进入久久| 欧美一区二区日韩一区二区| 久久久久这里只有精品| 亚洲国产精品小视频| 一本一本a久久| 性亚洲最疯狂xxxx高清| 免费视频亚洲| 国产精品久久久久国产精品日日| 国产日韩欧美综合一区| 亚洲欧洲一区二区在线播放| 亚洲天堂男人| 久久综合九色九九| 亚洲精品日韩在线| 欧美一区二区久久久| 免费影视亚洲| 国产精品亚洲不卡a| 亚洲二区精品| 午夜国产精品影院在线观看| 欧美成人一区二区三区| 亚洲视屏一区| 女仆av观看一区| 国产精品视频免费观看| 最近中文字幕日韩精品 | 免费日韩av电影| 日韩亚洲欧美成人一区| 久久久青草青青国产亚洲免观| 欧美日韩国产一区精品一区 | 99国产精品| 久久嫩草精品久久久精品一| 亚洲精品中文字幕有码专区| 久久精品国产久精国产爱| 欧美午夜电影一区| 91久久中文| 久久这里只有精品视频首页| 日韩一级在线| 美女999久久久精品视频| 国产嫩草一区二区三区在线观看| 亚洲精品一级| 免费久久精品视频| 亚洲免费一级电影| 欧美久久久久久| 亚洲国产精品ⅴa在线观看 | 亚洲一区二区网站| 亚洲高清在线| 久久这里只有精品视频首页| 国产日韩欧美精品在线| 亚洲小说欧美另类社区| 亚洲国产欧美日韩| 久久亚洲国产精品一区二区 | 亚洲激情第一页| 久久躁日日躁aaaaxxxx| 国产自产v一区二区三区c| 欧美一级成年大片在线观看| 亚洲精品字幕| 欧美精品久久天天躁| 亚洲国产综合91精品麻豆| 久久久91精品国产一区二区精品| 亚洲午夜av在线| 国产精品成人v| 亚洲婷婷综合色高清在线| 亚洲精品欧美精品| 欧美激情一区二区三区在线| 亚洲人成艺术| 亚洲高清精品中出| 欧美黄色影院| 这里只有视频精品| 夜夜夜久久久| 国产精品高精视频免费| 亚洲欧美日韩综合国产aⅴ| 亚洲午夜国产成人av电影男同| 欧美日韩三级| 亚洲欧美经典视频| 亚洲一区欧美二区| 国产欧美69| 久久婷婷久久| 另类av一区二区| 亚洲人午夜精品免费| 亚洲黄色在线视频| 欧美视频在线播放| 小辣椒精品导航| 久久aⅴ乱码一区二区三区| 在线成人av网站| 亚洲国产精品欧美一二99| 欧美日韩精品免费观看视一区二区 | 亚洲视频精品| 国产亚洲在线观看| 久久看片网站| 欧美多人爱爱视频网站| 在线视频一区二区| 香蕉久久一区二区不卡无毒影院| 国内一区二区三区在线视频| 欧美国产成人精品| 欧美视频日韩视频在线观看| 久久精品女人| 男女av一区三区二区色多| 一区二区三区成人精品| 亚洲欧美日韩精品| 亚洲第一中文字幕| 99这里只有精品| 国产一区日韩二区欧美三区| 亚洲第一福利在线观看| 欧美午夜电影一区| 噜噜噜噜噜久久久久久91| 欧美日本国产在线| 久久精品国产精品| 欧美激情1区| 久久久久久亚洲精品不卡4k岛国| 欧美大片在线观看一区二区| 翔田千里一区二区| 欧美成人一区二区三区在线观看| 亚洲欧美成人一区二区三区|