• <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>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級} {C#界面,C++核心算法} {設(shè)計模式} {C#基礎(chǔ)}

            紋理+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;
                        }

                    }
            ;//頂點結(jié)構(gòu)

                    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;
                        }

                    }
            ;//顏色結(jié)構(gòu)

                    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;
                        }

                    }
            ;//紋理結(jié)構(gòu)

                    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 夢在天涯 閱讀(1735) 評論(0)  編輯 收藏 引用 所屬分類: DirectX

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計

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

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1807602
            • 排名 - 5

            最新評論

            閱讀排行榜

            亚洲精品久久久www| 久久精品国产第一区二区三区| 国产亚洲美女精品久久久久狼| 久久综合狠狠综合久久| 久久综合九色综合欧美狠狠| 久久精品国产精品亜洲毛片| 日产精品久久久久久久| 狠狠色丁香婷婷综合久久来| 欧美午夜A∨大片久久| 精品免费久久久久久久| 性做久久久久久久久| 粉嫩小泬无遮挡久久久久久| 亚洲?V乱码久久精品蜜桃 | 久久精品国产半推半就| 人妻丰满?V无码久久不卡| 国产精品久久久久AV福利动漫| 久久成人精品| 久久99国产精品二区不卡| 国产成人久久精品一区二区三区| 国产精品丝袜久久久久久不卡 | 久久天天躁狠狠躁夜夜av浪潮| 久久综合给久久狠狠97色| 亚洲精品乱码久久久久久不卡| 久久99国产精品久久99果冻传媒 | 久久精品久久久久观看99水蜜桃| 国内精品久久久久影院免费| 精品久久久无码21p发布| 久久综合九色综合久99| 91久久精品电影| AV色综合久久天堂AV色综合在 | 久久人人爽人人爽人人片AV东京热| 久久精品国产亚洲av麻豆图片| 久久99国产一区二区三区| 国产精品视频久久| 中文字幕精品无码久久久久久3D日动漫| 99久久婷婷免费国产综合精品| 一本色道久久88精品综合| 少妇无套内谢久久久久| 久久亚洲日韩看片无码| 国内精品伊人久久久影院| 大香伊人久久精品一区二区|