using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace LineEx {
public class Game : Microsoft.Xna.Framework.Game {
//システム
private GraphicsDeviceManager graphics; //グラフィックス
private float aspectRatio;//アスペクト比
//頂点
private VertexDeclaration vertexDeclaration;//頂点定義
private VertexBuffer vertexBuffer; //頂点バッファ
private BasicEffect basicEffect; //基本エフェクト
//コンストラクタ
public Game() {
graphics=new GraphicsDeviceManager(this);
Content.RootDirectory="Content";
}
//初期化
protected override void Initialize() {
base.Initialize();
}
//グラフィクスコンテントの読み込み
protected override void LoadContent() {
//アスペクト比
aspectRatio=
(float)GraphicsDevice.Viewport.Width/
(float)GraphicsDevice.Viewport.Height;
// エフェクトの生成
basicEffect=new BasicEffect(GraphicsDevice,null);
basicEffect.VertexColorEnabled=true;
//ビュー変換行列
basicEffect.View = Matrix.CreateLookAt(
new Vector3(2.0f,2.0f,2.0f),//カメラ位置
Vector3.Zero, //参照点
Vector3.Up //UPベクトル
);
//射影変換行列
basicEffect.Projection=Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f),//視野角
aspectRatio, //アスペクト比
0.005f, //ニアクリップ面の距離
1000.0f //ファークリップ面の距離
);
//頂点定義の生成
vertexDeclaration=new VertexDeclaration(
GraphicsDevice,VertexPositionColor.VertexElements);
//頂点バッファの生成
vertexBuffer=new VertexBuffer(GraphicsDevice,
VertexPositionColor.SizeInBytes*6,BufferUsage.None);
//頂点データの生成
VertexPositionColor[] lineListVertices = new VertexPositionColor[6];
lineListVertices[0]=new VertexPositionColor(new Vector3(0.0f,0.0f,0.0f),Color.Red);
lineListVertices[1]=new VertexPositionColor(new Vector3(1.0f,0.0f,0.0f),Color.Red);
lineListVertices[2]=new VertexPositionColor(new Vector3(0.0f,0.0f,0.0f),Color.Green);
lineListVertices[3]=new VertexPositionColor(new Vector3(0.0f,1.0f,0.0f),Color.Green);
lineListVertices[4]=new VertexPositionColor(new Vector3(0.0f,0.0f,0.0f),Color.Blue);
lineListVertices[5]=new VertexPositionColor(new Vector3(0.0f,0.0f,1.0f),Color.Blue);
vertexBuffer.SetData<VertexPositionColor>(lineListVertices);
}
//グラフィクスコンテントの解放
protected override void UnloadContent() {
}
//更新
protected override void Update(GameTime gameTime) {
base.Update(gameTime);
}
//描画
protected override void Draw(GameTime gameTime) {
//背景色
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
//頂点の設定
GraphicsDevice.VertexDeclaration=vertexDeclaration;
GraphicsDevice.Vertices[0].SetSource(
vertexBuffer,0,VertexPositionColor.SizeInBytes);
//頂点の描画
basicEffect.Begin();
foreach (EffectPass pass in this.basicEffect.CurrentTechnique.Passes) {
pass.Begin();
GraphicsDevice.DrawPrimitives(PrimitiveType.LineList,0,3);
pass.End();
}
basicEffect.End();
//ベースの描画
base.Draw(gameTime);
}
}
}
|