
前田稔(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 | これより遠い(近い)点は表示されない |
![]()