前田稔(Maeda Minoru)の超初心者のプログラム入門
public bool InitializeGraphics() { try { presentParams.Windowed=true; presentParams.SwapEffect = SwapEffect.Discard; device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); device.DeviceReset += new System.EventHandler(this.OnResetDevice); this.OnCreateDevice(device, null); this.OnResetDevice(device, null); pause = false; return true; } : |
public void OnCreateDevice(object sender, EventArgs e) { Device dev = (Device)sender; // VertexBuffer を生成して、OnCreateVertexBuffer で座標を格納 vertexBuffer = new VertexBuffer(typeof(CustomVertex.PositionColored), 6, dev, 0, CustomVertex.PositionColored.Format, Pool.Default); vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer); this.OnCreateVertexBuffer(vertexBuffer, null); } |
public void OnResetDevice(object sender, EventArgs e) { Device dev = (Device)sender; // Turn off culling, so we see the front and back of the triangle dev.RenderState.CullMode = Cull.None; // Turn off D3D lighting, since we are providing our own vertex colors dev.RenderState.Lighting = false; } |
public void OnCreateVertexBuffer(object sender, EventArgs e) { VertexBuffer vb = (VertexBuffer)sender; CustomVertex.PositionColored[] verts = (CustomVertex.PositionColored[])vb.Lock(0,0); verts[0].X = 1.0f; verts[0].Y = -1.0f; verts[0].Z = 0.5f; verts[0].Color = System.Drawing.Color.Red.ToArgb(); verts[1].X = 1.0f; verts[1].Y = 1.0f; verts[1].Z = 0.5f; verts[1].Color = System.Drawing.Color.Red.ToArgb(); verts[2].X = 0.0f; verts[2].Y = -1.0f; verts[2].Z = -0.5f;verts[2].Color = System.Drawing.Color.Yellow.ToArgb(); verts[3].X = 0.0f; verts[3].Y = 1.0f; verts[3].Z = -0.5f; verts[3].Color = System.Drawing.Color.Yellow.ToArgb(); verts[4].X = -1.0f; verts[4].Y = -1.0f; verts[4].Z = 0.5f;verts[4].Color = System.Drawing.Color.Green.ToArgb(); verts[5].X = -1.0f; verts[5].Y = 1.0f; verts[5].Z = 0.5f; verts[5].Color = System.Drawing.Color.Green.ToArgb(); vb.Unlock(); } |
// Frame の描画メソッド private void Render() { if (device == null) return; if (pause) return; //Clear the backbuffer to a blue color device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0); //Begin the scene device.BeginScene(); // Setup the world, view, and projection matrices SetupMatrices(); device.SetStreamSource(0, vertexBuffer, 0); device.VertexFormat = CustomVertex.PositionColored.Format; device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 4); //End the scene device.EndScene(); device.Present(); } |
private void SetupMatrices() { device.Transform.View = Matrix.LookAtLH( new Vector3( 0.0f, 0.0f, 5.0f ), new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.0f, 1.0f, 0.0f ) ); device.Transform.Projection = Matrix.PerspectiveFovLH( (float)Math.PI / 4, 1.0f, 1.0f, 100.0f ); } |
new Vector3( 0.0f, 0.0f, 20.0f ), | 正面手前 |
new Vector3( 0.0f, 5.0f, 5.0f ), | 正面少し上から見下ろす |
new Vector3( 0.0f, -5.0f, 5.0f), | 正面少し下から見あげる |
new Vector3( 3.0f, 0.0f, 5.0f ), | 正面から少し右 |
new Vector3( -3.0f, 0.0f, 5.0f ), | 正面から少し左 |
new Vector3( 0.0f, 0.0f, -5.0f ), | 裏側から写す |
device.Transform.View = Matrix.LookAtLH( new Vector3( 0.0f, 0.0f, 5.0f ), new Vector3( 0.0f, 0.0f, 0.0f ), new Vector3( 0.0f, 1.0f, 0.0f ) ); |
引数 | 説明 |
---|---|
Vector3() | 三次元ベクトルの Object Class |
(0.0f, 0.0f, 5.0f) | カメラの位置を表す3次元ベクトル |
(0.0f,0.0f,0.0f) | カメラの注視点を表す3次元ベクトル |
(0.0f,1.0f,0.0f) | カメラの上方向を表す3次元ベクトル |
Matrix.PerspectiveFovLH( (float)Math.PI / 4, 1.0f, 1.0f, 100.0f ); |
引数 | 説明 |
---|---|
(float)Math.PI / 4 | 視野角 |
1.0f | アスペクト比 |
1.0f | これより近い(遠い)点は表示されない |
100.0f | これより遠い(近い)点は表示されない |