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

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>
              久久久久99| 欧美激情一区二区久久久| 亚洲大胆女人| 国产精品久久久久77777| 欧美韩日一区二区| 蘑菇福利视频一区播放| 欧美日韩国产在线观看| 国产精品三级久久久久久电影| 国产精品久久久久毛片大屁完整版| 国产精品久久久久秋霞鲁丝| 国产一区二区三区网站| 91久久久国产精品| 亚洲午夜一区| 久久综合九色欧美综合狠狠| 亚洲国产精品精华液网站| 亚洲一区二区四区| 久久全国免费视频| 欧美日韩国产小视频在线观看| 国产精品国色综合久久| 伊大人香蕉综合8在线视| 一区二区成人精品 | 亚洲日本电影在线| 亚洲图片在区色| 久久久在线视频| 亚洲国产小视频在线观看| 亚洲一区二区视频在线| 另类激情亚洲| 国产精品日韩精品| 日韩午夜电影av| 久久综合亚洲社区| 亚洲午夜国产一区99re久久 | 久久久人成影片一区二区三区观看 | 国产精品欧美激情| 亚洲精品日韩欧美| 久久久久国产精品一区二区| 91久久午夜| 久久久国际精品| 国产伦精品一区二区三区在线观看 | 亚洲精品中文字幕女同| 欧美亚洲综合久久| 国产精品久久九九| 一区二区激情小说| 欧美国产第一页| 久久精品国产99国产精品| 国产精品第一区| av成人天堂| 欧美激情综合色| 免费成人网www| 亚洲国产精品日韩| 国产在线高清精品| 欧美日韩免费看| 亚洲人成网站777色婷婷| 久久青青草原一区二区| 亚洲欧美激情一区二区| 欧美性大战久久久久久久蜜臀| 日韩视频在线你懂得| 欧美激情国产日韩精品一区18| 久久国产精品99国产精| 国产日韩欧美一二三区| 久久久国产成人精品| 欧美一区二区三区视频免费| 国产日韩专区| 久久亚洲不卡| 久久婷婷色综合| 亚洲国产老妈| 亚洲人成网站色ww在线| 欧美伦理在线观看| 亚洲香蕉伊综合在人在线视看| 日韩写真在线| 国产精品视频yy9099| 久久本道综合色狠狠五月| 午夜免费电影一区在线观看 | 亚洲视频免费在线观看| 日韩视频在线免费| 国产精品一区一区三区| 欧美综合77777色婷婷| 久久高清免费观看| 亚洲国产精品va在线看黑人| 亚洲福利国产| 欧美视频一二三区| 亚洲欧美视频在线观看| 欧美一区二区三区男人的天堂 | 1769国内精品视频在线播放| 欧美成人精品在线播放| 欧美精品一线| 久久精品国产一区二区三区| 久久一区二区三区四区| av成人免费观看| 欧美有码在线观看视频| 亚洲高清自拍| 亚洲性av在线| 亚洲日本欧美| 欧美一区二区三区四区在线观看| 亚洲国产天堂久久综合网| 日韩图片一区| 在线观看91久久久久久| 一区二区三区精品视频| 尤物精品国产第一福利三区| 一区二区欧美在线| 亚洲国产精品福利| 亚洲在线一区二区| 亚洲日本欧美日韩高观看| 性欧美video另类hd性玩具| 亚洲精品一二| 久久精品主播| 欧美一级电影久久| 欧美精品在线一区| 蜜臀99久久精品久久久久久软件 | 一本综合精品| 国产精品爽爽ⅴa在线观看| 久久精品青青大伊人av| 欧美多人爱爱视频网站| 久久精品视频在线观看| 欧美日韩一区二区三区免费| 男女精品网站| 国产日韩欧美制服另类| 亚洲精品日韩综合观看成人91| 国模精品娜娜一二三区| 亚洲中无吗在线| 亚洲一区二区三区免费观看| 欧美成人性网| 欧美激情视频在线播放 | 激情懂色av一区av二区av| 一区二区三区视频免费在线观看 | 国产亚洲福利社区一区| 在线亚洲免费| 亚洲视频在线一区| 欧美精品一区二区三区蜜桃 | 亚洲人午夜精品免费| 亚洲国产欧美日韩| 久久精品一区二区三区不卡牛牛| 欧美一级大片在线观看| 国产精品丝袜久久久久久app| 日韩亚洲不卡在线| 一区二区三区福利| 欧美另类女人| 91久久精品www人人做人人爽| 91久久精品久久国产性色也91 | 一本色道久久综合亚洲二区三区| 日韩午夜黄色| 欧美日韩视频| 一区二区欧美亚洲| 先锋亚洲精品| 国产亚洲综合性久久久影院| 欧美在线看片| 你懂的视频欧美| 日韩亚洲欧美成人| 欧美午夜www高清视频| 亚洲深爱激情| 久久精品九九| 亚洲黄色在线| 欧美三区美女| 欧美在线一二三区| 免费人成网站在线观看欧美高清| 91久久综合亚洲鲁鲁五月天| 欧美日韩国产天堂| 小嫩嫩精品导航| 欧美激情a∨在线视频播放| 亚洲毛片网站| 国产欧美精品在线| 欧美a级在线| 亚洲伊人网站| 欧美国产日韩一区二区在线观看 | 模特精品在线| 一本久久a久久精品亚洲| 亚洲精品一二| 91久久夜色精品国产九色| 免费在线成人| 日韩视频免费观看高清在线视频| 亚洲永久免费视频| 国产在线播精品第三| 欧美大片在线观看| 亚洲天堂激情| 欧美国产日韩一二三区| 亚洲欧美国产另类| 在线看国产日韩| 国产精品va在线| 毛片av中文字幕一区二区| 一区二区三区欧美| 免费观看30秒视频久久| 亚洲一区二区三区在线看| 激情六月婷婷综合| 欧美午夜精品| 欧美a级片网| 久久精品91久久久久久再现| 日韩一级在线观看| 欧美电影专区| 久久五月天婷婷| 亚洲欧美清纯在线制服| 亚洲欧洲在线一区| 黄色日韩在线| 国产毛片精品国产一区二区三区| 欧美国产日韩精品| 久久亚洲视频| 久久精品国产综合精品| 亚洲欧美国产日韩中文字幕| 日韩一级视频免费观看在线| 亚洲第一区在线观看| 免费黄网站欧美| 久久婷婷国产综合尤物精品|