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

C++ Programmer's Cookbook

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

Managed Directx --rendering vertices (使用VertexBuffer 進行render)

?

// -----------------------------------------------------------------------------
// ?File:?Vertices.cs
//
// ?Desc:?In?this?tutorial,?we?are?rendering?some?vertices.?This?introduces?the
// ???????concept?of?the?vertex?buffer,?a?Direct3D?object?used?to?store
// ???????vertices.?Vertices?can?be?defined?any?way?we?want?by?defining?a
// ???????custom?structure?and?a?custom?FVF?(flexible?vertex?format).?In?this
// ???????tutorial,?we?are?using?vertices?that?are?transformed?(meaning?they
// ???????are?already?in?2D?window?coordinates)?and?lit?(meaning?we?are?not
// ???????using?Direct3D?lighting,?but?are?supplying?our?own?colors).
//
// ?Copyright?(c)?Microsoft?Corporation.?All?rights?reserved.
// -----------------------------------------------------------------------------
using ?System;
using ?System.Drawing;
using ?System.Windows.Forms;
using ?Microsoft.DirectX;
using ?Microsoft.DirectX.Direct3D;

namespace ?VerticesTutorial
{
????
public ? class ?Vertices?:?Form
????
{
????????
// ?Our?global?variables?for?this?project
????????Device?device? = ? null ;? // ?Our?rendering?device
????????VertexBuffer?vertexBuffer? = ? null ;

????????
public ?Vertices()
????????
{
????????????
// ?Set?the?initial?size?of?our?form
???????????? this .ClientSize? = ? new ?System.Drawing.Size( 300 , 300 );
????????????
// ?And?its?caption
???????????? this .Text? = ? " Direct3D?Tutorial?2?-?Vertices " ;
????????}

????????
????????
public ? bool ?InitializeGraphics()
????????
{
????????????
try
????????????
{
????????????????
// ?Now?let's?setup?our?D3D?stuff
????????????????PresentParameters?presentParams? = ? new ?PresentParameters();
????????????????presentParams.Windowed
= true ;
????????????????presentParams.SwapEffect?
= ?SwapEffect.Discard;
????????????????device?
= ? new ?Device( 0 ,?DeviceType.Hardware,? this ,?CreateFlags.SoftwareVertexProcessing,?presentParams);
????????????????
this .OnCreateDevice(device,? null );
????????????????
return ? true ;
????????????}

????????????
catch ?(DirectXException)
????????????
{?
????????????????
return ? false ;?
????????????}

????????}


????????
public ? void ?OnCreateDevice( object ?sender,?EventArgs?e)
????????
{
????????????Device?dev?
= ?(Device)sender;
????????????
// ?Now?Create?the?VB
????????????vertexBuffer? = ? new ?VertexBuffer( typeof (CustomVertex.TransformedColored),? 3 ,?dev,? 0 ,?CustomVertex.TransformedColored.Format,?Pool.Default);
????????????vertexBuffer.Created?
+= ? new ?System.EventHandler( this .OnCreateVertexBuffer);
????????????
this .OnCreateVertexBuffer(vertexBuffer,? null );
????????}

????????
public ? void ?OnCreateVertexBuffer( object ?sender,?EventArgs?e)
????????
{
????????????VertexBuffer?vb?
= ?(VertexBuffer)sender;
????????????GraphicsStream?stm?
= ?vb.Lock( 0 ,? 0 ,? 0 );
????????????CustomVertex.TransformedColored[]?verts?
= ? new ?CustomVertex.TransformedColored[ 3 ];

????????????verts[
0 ].X = 150 ;verts[ 0 ].Y = 50 ;verts[ 0 ].Z = 0.5f ;?verts[ 0 ].Rhw = 1 ;?verts[ 0 ].Color? = ?System.Drawing.Color.Red.ToArgb();
????????????verts[
1 ].X = 250 ;verts[ 1 ].Y = 250 ;verts[ 1 ].Z = 0.5f ;?verts[ 1 ].Rhw = 1 ;?verts[ 1 ].Color? = ?System.Drawing.Color.Yellow.ToArgb();
????????????verts[
2 ].X = 50 ;verts[ 2 ].Y = 250 ;verts[ 2 ].Z = 0.5f ;?verts[ 2 ].Rhw = 1 ;?verts[ 2 ].Color? = ?System.Drawing.Color.SkyBlue.ToArgb();
????????????stm.Write(verts);
????????????vb.Unlock();
????????}

????????
private ? void ?Render()
????????
{
????????????
if ?(device? == ? null )?
????????????????
return ;

????????????
// Clear?the?backbuffer?to?a?blue?color?(ARGB?=?000000ff)
????????????device.Clear(ClearFlags.Target,?System.Drawing.Color.Blue,? 1.0f ,? 0 );
????????????
// Begin?the?scene
????????????device.BeginScene();
????????????
????????????device.SetStreamSource(?
0 ,?vertexBuffer,? 0 );
????????????device.VertexFormat?
= ?CustomVertex.TransformedColored.Format;
????????????device.DrawPrimitives(PrimitiveType.TriangleList,?
0 ,? 1 );
????????????
// End?the?scene
????????????device.EndScene();
????????????device.Present();
????????}

????????
protected ? override ? void ?OnPaint(System.Windows.Forms.PaintEventArgs?e)
????????
{
????????????
this .Render();? // ?Render?on?painting
????????}

????????
protected ? override ? void ?OnKeyPress(System.Windows.Forms.KeyPressEventArgs?e)
????????
{
????????????
if ?(( int )( byte )e.KeyChar? == ?( int )System.Windows.Forms.Keys.Escape)
????????????????
this .Close();? // ?Esc?was?pressed
????????}


????????
/// ? <summary>
????????
/// ?The?main?entry?point?for?the?application.
????????
/// ? </summary>

???????? static ? void ?Main()?
????????
{

????????????
using ?(Vertices?frm? = ? new ?Vertices())
????????????
{
????????????????
if ?( ! frm.InitializeGraphics())? // ?Initialize?Direct3D
???????????????? {
????????????????????MessageBox.Show(
" Could?not?initialize?Direct3D.??This?tutorial?will?exit. " );
????????????????????
return ;
????????????????}

????????????????frm.Show();

????????????????
// ?While?the?form?is?still?valid,?render?and?process?messages
???????????????? while (frm.Created)
????????????????
{
????????????????????frm.Render();
????????????????????Application.DoEvents();
????????????????}

????????????}

????????}


????}

}


1 定義 VertexBuffer vb = null;
2 創建 VertexBuffer?
??? 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(0, 0, 0);?? //Lock() 保證cpu能夠直接訪問 VertexBuffer ,必須和unlock()一起使用
??? CustomVertex.TransformedColored[] verts =
??????? new CustomVertex.TransformedColored[3];
??? .
??? .
??? .
??? vb.Unlock();
??? }
3? GraphicsStream對象直接訪問vertexbuffer, 或者說把vertexbuffer的內容放到Graphicsstream中以合適的大小.
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);
4 render device
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.0f, 0);
??? // Begin the scene
??? device.BeginScene();
???
??? // New for Tutorial 2
??? device.SetStreamSource(0, vertexBuffer, 0);??? //設置stream源用vertexbuffer.
??? device.VertexFormat = CustomVertex.TransformedColored.Format;? //設置render格式
??? device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);?
???
??? // End the scene
??? device.EndScene();
??? device.Present();
}

Read and Write VertexBuffer and IndexBuffer Data With GraphicsStreams


using?System;
using?Microsoft.DirectX;
using?Microsoft.DirectX.Direct3D;

public?struct?PositionNormalTexVertex
{
????
public?Vector3?Position;
????
public?Vector3?Normal;
????
public??float?Tu0,?Tv0;
????
public?static?readonly?VertexFormats?FVF?=?VertexFormats.Position?|?VertexFormats.Texture1;
}

public?class?Example
{
????
public?unsafe?void??GraphicsStreamReadWrite()
????
{
????????
//Create?a?vertex?buffer?in?the?managed?pool
????????VertexBuffer?vb?=?new?VertexBuffer(typeof(PositionNormalTexVertex),?100,?device,?Usage.None,?PositionNormalTexVertex.FVF,?Pool.Managed);

????????
//First,?fill?an?array?of?PositionNormalTexVertex?elements?with?data.
????????PositionNormalTexVertex[]?vertices?=?new?PositionNormalTexVertex[50];
????????
for(int?i=0;?i<50;?i++)
????????
{
????????????
//fill?the?vertices?with?some?data
????????????vertices[i].Position?=?new?Vector3(3f,4f,5f);
????????}


????????
//The?size?of?the?verticies?are?32-bytes?each?(float3?(12)?+?float3?(12)?+?float(4)?+?float(4))
????????
//To?lock?50?verticies,?the?size?of?the?lock?would?be?1600?(32?*?50)
????????GraphicsStream?vbData?=??vb.Lock(0,1600,?LockFlags.None);

????????
//copy?the?vertex?data?into?the?vertex?buffer
????????vbData.Write(vertices);

????????
//Unlock?the?VB
????????vb.Unlock();


????????
//This?time,?lock?the?entire?VertexBuffer
????????vbData?=??vb.Lock(0,?3200,?LockFlags.None);

????????
//Cast?the?InternalDataPointer?(a?void?pointer)?to?an?array?of?verticies
????????PositionNormalTexVertex*?vbArray?=?(PositionNormalTexVertex*)?vbData.InternalDataPointer;

????????
for(int?i=0;?i<100;?i++)
????????
{
????????????
//perform?some?operations?on?the?data
????????????vbArray[i].Tu0?=?i;
????????????vbArray[i].Tv0?
=?vbArray[i].Tu0?*?2;

????????????Console.WriteLine(vbArray[i].Tv0.ToString());
????????}


????????
//Unlock?the?buffer
????????vb.Unlock();
????????vb.Dispose();
????}

}

Read and Write VertexBuffer Data With Arrays

using?System;
using?Microsoft.DirectX;
using?Microsoft.DirectX.Direct3D;

public?struct?PositionNormalTexVertex
{
????
public?Vector3?Position;
????
public?Vector3?Normal;
????
public?float?Tu0,?Tv0;
????
public?static?readonly?VertexFormats?FVF?=?VertexFormats.Position?|?VertexFormats.Texture1;
}


public?class?Example
{
????
public?void?ArrayBasedReadWrite()
????
{
????????
//Create?a?vertex?buffer?in?the?managed?pool
????????VertexBuffer?vb?=?new?VertexBuffer(typeof(PositionNormalTexVertex),?100,?device,?Usage.None,?PositionNormalTex1Vertex.FVF,?Pool.Managed);

????????
//Fill?an?array?of?the?appropriate?type?with?the?VB?data?using?Lock()
????????PositionNormalTexVertex[]?vbData?=?(PositionNormalTexVertex[])?vb.Lock(0,?typeof(PositionNormalTexVertex),?LockFlags.None,?50);
????????
for(int?i=0;?i<50;?i++)
????????
{
????????????
//set?your?vertices?to?something
????????????vbData[i].Position?=?new?Vector3(2f,2f,2f);??
????????????vbData[i].Normal?
=?new?Vector3(1f,0f,0f);
????????????vbData[i].Tu0?
=?i;
????????????vbData[i].Tv0?
=?i;
????????}

????????
//Unlock?the?vb?before?you?can?use?it?elsewhere
????????vb.Unlock();

????????
//This?lock?overload?simply?locks?the?entire?VB?--?setting?ReadOnly?can?improve?perf?when?reading?a?vertexbuffer
????????vbData?=?(PositionNormalTexVertex[])?vb.Lock(0,?LockFlags.ReadOnly);
????????
for(int?i=0;?i<100;?i++)
????????
{
????????????
//read?some?vertex?data
????????????Console.WriteLine("Vertex?"?+?i?+?"Tu:?"?+??vbData[i].Tu0?+?"?,?Tv:?"?+?vbData[i].Tv0);
????????}


????????
//Unlock?the?buffer
????????vb.Unlock();


????????vb.Dispose();
????}

}

posted on 2006-05-12 13:55 夢在天涯 閱讀(977) 評論(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

搜索

  •  

積分與排名

  • 積分 - 1812196
  • 排名 - 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另类| 欧美精品色一区二区三区| 欧美日韩精品福利| 国产精品卡一卡二| 在线观看亚洲视频啊啊啊啊| 亚洲精品国产精品久久清纯直播| 亚洲在线一区| 久久久亚洲国产美女国产盗摄| 久久久一二三| 亚洲激情视频在线观看| 夜夜嗨av一区二区三区免费区| 亚洲一区二区伦理| 久久久久久夜| 欧美日韩午夜精品| 狠狠色狠狠色综合日日小说| 亚洲美洲欧洲综合国产一区| 亚洲欧美日韩精品久久亚洲区| 欧美一区日本一区韩国一区| 欧美高清在线一区| 亚洲一区二区视频在线| 久久手机免费观看| 国产精品美女久久久久久久| 激情小说另类小说亚洲欧美| 日韩天堂在线观看| 久久成人国产精品| 亚洲精品美女久久久久| 欧美在线中文字幕| 欧美理论视频| 一区视频在线| 久久成人人人人精品欧| 亚洲看片免费| 嫩草国产精品入口| 国产一区二区三区成人欧美日韩在线观看| 91久久精品美女| 久久婷婷国产综合精品青草| 亚洲午夜国产一区99re久久 | 性伦欧美刺激片在线观看| 你懂的国产精品永久在线| 国产日韩欧美综合| 先锋影音久久久| av成人国产| 欧美日韩视频在线| 亚洲最新在线| 最新成人av在线| 久久亚洲精品视频| 在线成人免费观看| 久久综合久久久| 久久国产手机看片| 国模吧视频一区| 久久精品欧美| 欧美一级夜夜爽| 国产一区二区三区黄| 欧美一区二区精美| 亚洲欧美清纯在线制服| 国产精品二区影院| 亚洲免费影院| 亚洲欧美日韩精品久久奇米色影视| 欧美午夜精品| 亚洲一区免费视频| 亚洲天堂男人| 国产欧美日韩中文字幕在线| 亚洲欧洲精品成人久久奇米网| 国产精品久久波多野结衣| 亚洲美女av网站| 亚洲第一综合天堂另类专| 久久综合精品国产一区二区三区| 影音先锋中文字幕一区| 欧美国产乱视频| 欧美成人午夜激情在线| 一区二区三区鲁丝不卡| 国产精品99久久久久久白浆小说| 欧美视频中文在线看| 欧美亚洲视频在线观看| 久久av二区| 亚洲国产综合在线看不卡| 亚洲精品国产系列| 国产九九精品视频| 蜜桃av综合| 欧美激情偷拍| 午夜伦欧美伦电影理论片| 欧美一级在线播放| 亚洲九九爱视频| 在线亚洲精品福利网址导航| 国产欧美短视频| 免费亚洲一区二区| 欧美视频二区36p| 久久亚洲午夜电影| 欧美日韩视频第一区| 久久久久久精| 欧美成人首页| 久久国产一区| 欧美日韩亚洲在线| 免费看的黄色欧美网站| 国产精品福利久久久| 欧美a级一区| 国产美女精品视频免费观看| 免费欧美视频| 国产精品网曝门| 亚洲欧洲精品一区二区三区| 国产精品一区在线播放| 91久久精品久久国产性色也91| 国产亚洲欧美一区在线观看| 日韩一二在线观看| 亚洲成人直播| 亚洲女优在线| 亚洲一区二区三区视频| 欧美jizzhd精品欧美巨大免费| 久久本道综合色狠狠五月| 欧美日韩一区二区三区在线看| 玖玖精品视频| 国产欧美日韩中文字幕在线| 一区二区三区久久网| 亚洲日本欧美天堂| 久久久www成人免费无遮挡大片| 亚洲一级影院| 欧美麻豆久久久久久中文| 麻豆91精品| 国产一区二区三区成人欧美日韩在线观看| 亚洲久久一区| 亚洲精品无人区| 欧美成人亚洲成人| 欧美成人69| 亚洲国产成人久久| 巨乳诱惑日韩免费av| 久久久久国色av免费看影院| 国产精品美腿一区在线看| 亚洲国产精品一区| 亚洲免费影院| 亚洲欧洲精品一区二区三区波多野1战4| 午夜久久一区| 欧美一级大片在线观看| 国产精品色婷婷| 亚洲一区二区三区三| 午夜精品久久一牛影视| 欧美午夜精品一区| 亚洲婷婷综合久久一本伊一区| 亚洲色无码播放| 国产精品美女久久久久久免费| 亚洲综合色在线| 久久成人精品视频| …久久精品99久久香蕉国产| 欧美91福利在线观看| 亚洲久久视频| 欧美一区二区免费观在线| 国产情人节一区| 久久久www| 91久久精品网| 亚洲网友自拍| 国产精品一区二区久久久久| 亚洲欧美成人| 欧美3dxxxxhd| 亚洲一区二区高清视频| 国产午夜精品全部视频播放| 久久一区精品| 亚洲肉体裸体xxxx137| 亚洲欧美日韩一区| 亚洲第一福利在线观看| 欧美三级在线| 欧美一区二区高清在线观看| 免费成人你懂的| 亚洲一区二区精品在线观看| 国产一区美女| 欧美激情一区二区三区成人| 亚洲视屏在线播放| 久久一区二区三区国产精品 | 亚洲欧美日韩电影| 免费亚洲电影| 性欧美xxxx视频在线观看| 亚洲第一天堂无码专区| 国产精品毛片va一区二区三区 | 136国产福利精品导航| 欧美激情亚洲一区| 欧美一二三视频| 亚洲日韩欧美视频| 久久天堂成人| 亚洲一区在线看| 在线观看欧美视频| 国产精品国产三级国产aⅴ无密码| 久久久精品免费视频| 亚洲一区二区在线播放| 亚洲国产一区二区三区青草影视| 久久国产精品黑丝| 亚洲线精品一区二区三区八戒| 亚洲国产福利在线| 国产精品综合| 欧美日韩在线观看一区二区三区| 久久综合久久综合久久| 国产精品99久久久久久久女警 | 欧美三级网页| 久久天天狠狠| 亚洲成人在线网站| 黄色国产精品| 国产亚洲成年网址在线观看| 欧美午夜激情小视频|