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

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 夢在天涯 閱讀(1744) 評論(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

搜索

  •  

積分與排名

  • 積分 - 1812163
  • 排名 - 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>
              在线电影院国产精品| 欧美成人免费网站| 精品1区2区3区4区| 国产精品专区一| 国产视频在线观看一区| 国产一区二区三区视频在线观看| 国产精品视频免费观看| 国产亚洲精品久久久| 亚洲国产第一| 在线亚洲欧美| 久久久久国产一区二区| 欧美成ee人免费视频| 91久久国产自产拍夜夜嗨| 91久久精品国产91久久性色tv| 亚洲精品乱码久久久久| 欧美高清你懂得| 亚洲欧洲精品一区二区三区不卡| 亚洲欧洲日产国产综合网| 一本色道综合亚洲| 亚洲一区二区三区免费观看 | 欧美精品尤物在线| 国产精品都在这里| 在线成人激情黄色| 亚洲一区在线直播| 欧美成人午夜视频| 午夜精品视频网站| 欧美日韩免费观看一区三区| 韩曰欧美视频免费观看| 日韩天堂在线视频| 久久综合狠狠综合久久综合88| 亚洲精品一区二区三区樱花| 久久精品视频导航| 国产精品国产馆在线真实露脸| 国内一区二区在线视频观看| 99re国产精品| 欧美影院成年免费版| 最新日韩av| 久久精品国产久精国产爱| 欧美天天影院| 日韩视频中午一区| 免费在线观看一区二区| 亚洲一区欧美一区| 欧美日韩久久久久久| 亚洲激情不卡| 欧美成人精品在线| 久久精品动漫| 国产一区二区三区在线观看免费视频| 99精品欧美一区二区三区综合在线| 久久久一二三| 性视频1819p久久| 国产精品黄视频| 一本到高清视频免费精品| 亚洲电影激情视频网站| 久久一区视频| 亚洲国产精品v| 美国十次成人| 久久视频精品在线| 亚洲电影免费观看高清完整版在线 | 亚洲伦理久久| 欧美国产视频日韩| 老司机凹凸av亚洲导航| 韩国成人福利片在线播放| 久久夜色撩人精品| 久久在精品线影院精品国产| 精品成人国产| 国产精品久久久999| 欧美日本在线视频| 亚洲国产欧美一区| 久久夜色精品国产亚洲aⅴ | 在线中文字幕一区| 欧美天天影院| 久久超碰97人人做人人爱| 亚洲欧美日韩国产中文在线| 国产欧美在线播放| 久久国产精品黑丝| 久久久久国产精品一区三寸 | 国产乱码精品一区二区三区忘忧草 | 欧美三级视频在线播放| 亚洲天堂成人在线观看| 最新日韩在线| 国产精品xxx在线观看www| 午夜在线成人av| 午夜精品影院| 亚洲黄网站黄| 亚洲一区免费| 亚洲全黄一级网站| 亚洲三级电影全部在线观看高清| 欧美刺激午夜性久久久久久久| 亚洲一区二区av电影| 亚洲综合色婷婷| 亚洲国产天堂久久国产91| 亚洲国产精品va在线观看黑人| 欧美精品成人一区二区在线观看| 亚洲综合日韩| 久久久久久伊人| 亚洲天堂免费观看| 性色av一区二区三区在线观看 | 亚洲亚洲精品三区日韩精品在线视频| 亚洲午夜在线观看| 亚洲国产99| 日韩网站在线观看| 一区二区三区在线免费观看| 亚洲国产精品国自产拍av秋霞| 国产精品久久久久久久久久久久久 | 亚洲另类一区二区| 99视频一区二区| 在线日韩一区二区| 亚洲视频一区二区| 亚洲欧洲日产国产网站| 午夜精品在线| 免费在线欧美视频| 国产精品入口麻豆原神| 欧美在线观看视频一区二区| 性欧美精品高清| 91久久午夜| 久久九九国产精品| 亚洲欧美日韩一区在线| 久久久综合免费视频| 羞羞答答国产精品www一本| 欧美成熟视频| 蜜臀av国产精品久久久久| 国产欧美精品日韩| 亚洲伦理在线观看| 亚洲免费激情| 久久一区二区视频| 久久久一区二区| 国产精品一国产精品k频道56| 亚洲精品男同| 亚洲激情影院| 欧美a一区二区| 欧美激情影音先锋| 一区二区在线观看视频| 午夜精品久久久久| 欧美亚洲三级| 国产精品麻豆欧美日韩ww | 欧美xxx成人| 狠狠色狠狠色综合| 久久久久久久久综合| 久久人人九九| 亚洲高清不卡在线| 欧美激情精品久久久久| 亚洲国产日韩欧美一区二区三区| 亚洲国产激情| 欧美/亚洲一区| 亚洲激情电影在线| 亚洲一品av免费观看| 国产精品一区2区| 午夜视频在线观看一区| 久久精品视频一| 黄色成人在线| 欧美激情按摩| 亚洲一区二区三区精品动漫| 久久精品五月婷婷| 在线观看成人一级片| 欧美不卡一卡二卡免费版| 亚洲黄一区二区三区| 一区二区三区久久| 国产乱人伦精品一区二区 | 欧美福利电影网| 9色精品在线| 欧美在线看片| 亚洲黄网站在线观看| 国产精品v日韩精品v欧美精品网站| 亚洲自拍另类| 亚洲第一精品久久忘忧草社区| 亚洲毛片在线观看.| 国产精品拍天天在线| 久久精品国产99精品国产亚洲性色| 欧美国产精品人人做人人爱| 亚洲一区二区三区成人在线视频精品| 国产九九精品| 欧美精品一区二区蜜臀亚洲| 亚洲欧美日韩另类| 欧美黄色小视频| 欧美一区二区三区免费观看| 亚洲激情在线播放| 国产亚洲一区二区三区| 国产日韩精品视频一区| 校园激情久久| 久久精品国产99| 久久久国产精品一区| 亚洲人体1000| 国内精品久久久久影院色| 欧美久久九九| 另类天堂av| 午夜精品福利一区二区蜜股av| 亚洲电影免费观看高清完整版在线观看 | 亚洲激情啪啪| 99国产精品视频免费观看| 激情欧美日韩| 久久久www免费人成黑人精品| 亚洲国产小视频在线观看| 先锋影音久久久| 久久精品在线| 好吊日精品视频| 久久深夜福利免费观看| 久久久av毛片精品| 国产日韩欧美亚洲一区| 欧美主播一区二区三区| 久久久噜噜噜久噜久久|