[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; class Triangle { VertexPositionColor[] vertices = new VertexPositionColor[3]; public Triangle(Vector3 p1, Vector3 p2, Vector3 p3, Color color) { vertices[0] = new VertexPositionColor(p1, color); vertices[1] = new VertexPositionColor(p2, color); vertices[2] = new VertexPositionColor(p3, color); } public void Draw(GraphicsDevice graphicsDevice, BasicEffect effect) { effect.VertexColorEnabled = true; foreach (EffectPass pass in effect.CurrentTechnique.Passes) { pass.Apply(); graphicsDevice.DrawUserPrimitives<VertexPositionColor>( PrimitiveType.TriangleList, vertices, 0, 1 ); } } } class MyGame : Game { GraphicsDeviceManager graphics; BasicEffect effect; Triangle whiteTriangle = new Triangle( new Vector3(0, 1, 1), new Vector3(1, 0, 1), new Vector3(-1, 0, 1), Color.White ); Triangle blueTriangle = new Triangle( new Vector3(1, 1, 0), new Vector3(0, 0, 0), new Vector3(-1, 1, 0), Color.Blue ); DepthStencilState stencilTemplateCreator = new DepthStencilState { StencilEnable = true, StencilFunction = CompareFunction.Always, StencilPass = StencilOperation.Replace, ReferenceStencil = 1, DepthBufferWriteEnable = false, }; BlendState noColorWriter = new BlendState { ColorWriteChannels = ColorWriteChannels.None }; DepthStencilState sprayer = new DepthStencilState { StencilEnable = true, ReferenceStencil = 0, StencilFunction = CompareFunction.Less }; public MyGame() { graphics = new GraphicsDeviceManager(this); graphics.PreferredDepthStencilFormat = DepthFormat.Depth24Stencil8; } protected override void LoadContent() { effect = new BasicEffect(GraphicsDevice) { View = Matrix.CreateLookAt ( new Vector3(0, 0, 3), //カメラの位置 new Vector3(0, 0, 0), //カメラの見る点 new Vector3(0, 1, 0) //カメラの上向きベクトル ), Projection = Matrix.CreatePerspectiveFieldOfView ( MathHelper.ToRadians(45), //視野の角度。ここでは45° GraphicsDevice.Viewport.AspectRatio,//画面のアスペクト比(=横/縦) 1, //カメラからこれより近い物体は画面に映らない 100 //カメラからこれより遠い物体は画面に映らない ) }; } protected override void UnloadContent() { effect.Dispose(); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); GraphicsDevice.DepthStencilState = stencilTemplateCreator; GraphicsDevice.BlendState = noColorWriter; whiteTriangle.Draw(GraphicsDevice, effect); GraphicsDevice.DepthStencilState = sprayer; GraphicsDevice.BlendState = BlendState.Opaque; blueTriangle.Draw(GraphicsDevice, effect); } }
メンバ名 | 説明 |
Depth16 | 深度バッファは16bitです。 |
Depth24 | 深度バッファは24bitです。ただし、実際には32bit確保されます。そのうち使える分が24bitということです。 |
Depth24Stencil8 | 深度バッファは24bitで、ステンシルバッファは8bitです。 |
None | 深度バッファを作りません。 |
メンバ名 | 説明 |
Decrement | ステンシル・バッファの値をデクリメントします。0より小さくなったらMaxの値になります。 |
DecrementSaturation | ステンシル・バッファの値をデクリメントします。ただし、0になるまでです。 |
Increment | ステンシル・バッファの値をインクリメントします。Maxの値を超えたら0に戻ります。 |
IncrementSaturation | ステンシル・バッファの値をインクリメントします。ただし、Maxの値になるまでです。 |
Invert | ステンシル・バッファのビットを反転します。 |
Keep | ステンシル・バッファの値を書き換えません。デフォルトの値です。 |
Replace | ステンシル・バッファをRenderState.ReferenceStencilプロパティの値に書き換えます。 |
Zero | ステンシル・バッファの値を0にセットします。 |