XNA4SimpleSound
XNA4SimpleSound
Creating and Playing Sounds
http://msdn.microsoft.com/en-us/library/bb195038(v=xnagamestudio.40).aspx
Playing a Sound (using SoundEffect)
http://msdn.microsoft.com/en-us/library/bb195053(v=xnagamestudio.40).aspx
Looping a Sound
http://msdn.microsoft.com/en-us/library/dd940203(v=xnagamestudio.40).aspx
Adjusting Pitch and Volume of a Sound
http://msdn.microsoft.com/en-us/library/dd940201(v=xnagamestudio.40).aspx
Playing a Song (using MediaPlayer)
http://msdn.microsoft.com/en-us/library/dd231914(v=xnagamestudio.40).aspx
Using XACT
http://msdn.microsoft.com/en-us/library/ff827590(v=xnagamestudio.40).aspx
XNA4TextureQuad using BasicEffect (& Blending)
NonPhotoRealisticRendering Custom Effect
Normal Mapping Custom Effect
XNA4Model (updated)
– ModelNode (with ToonShading & BoundingSphere)
– GameComponent & GameService (InputHandler & FpsCounter)
– Event & EventHandler
8636798633.zip
XNA4ModelListPicking (updated)
– Mouse Left Button Pressed to Pick Object3684863626.zip
XNA4SkinnedModel (updated)
-animation clip name
6840418209.zip
// draw text
InputHandler input;
bool drawFPS = false;
SpriteFont font;
public FpsCounter(Game game)
: base(game)
{
Enabled = true;
this.game = game;
input = (InputHandler)game.Services.GetService(typeof(InputHandler));
}
public override void Update(GameTime gameTime)
{
base.Update(gameTime);
if (input.IsKeyPressed(Keys.F))
drawFPS = !drawFPS;
// 중간생략..
}
public sealed override void Draw(GameTime gameTime)
{
Game.Window.Title = “FPS: ” + fps.ToString();
if (drawFPS)
{
// draw the text for fpsCounter
spriteBatch.Begin();
spriteBatch.DrawString(font, fps.ToString(), Vector2.One, Color.White);
spriteBatch.End();
}
}
GraphicsDevice.DrawIndexedPrimitives
– 그래픽카드에 vertex와 index 정보를 초기화하고, 그것을 호출하여 Draw하는 방식
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.graphicsdevice.drawindexedprimitives.aspx
void InitializePrimitive()
{
// 중간생략…
// Initialize our Vertex Declaration
vertexDeclaration = new VertexDeclaration(new VertexElement[]
{
new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
new VertexElement(12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0),
new VertexElement(24, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0)
}
);
// Initialize the vertex buffer, allocating memory for each vertex.
vertexBuffer = new VertexBuffer(graphics.GraphicsDevice,
vertexDeclaration, vertices.Count, BufferUsage.None);
// Set the vertex buffer data to the array of vertices.
vertexBuffer.SetData(vertices.ToArray());
// Create an index buffer, and copy our index data into it.
indexBuffer = new IndexBuffer(graphics.GraphicsDevice, typeof(ushort),
indices.Count, BufferUsage.None);
indexBuffer.SetData(indices.ToArray());
}
void DrawPrimitive()
{
// 중간생략…
// Set our vertex declaration, vertex buffer, and index buffer.
graphics.GraphicsDevice.SetVertexBuffer(vertexBuffer);
graphics.GraphicsDevice.Indices = indexBuffer;
foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
{
pass.Apply();
int primitiveCount = indices.Count / 3;
graphics.GraphicsDevice.DrawIndexedPrimitives(
PrimitiveType.TriangleList, 0, 0, vertices.Count, 0, primitiveCount);
}
}
GraphicsDevice.DrawUserIndexedPrimitives
– 매 프레임마다 GPU로 vertex와 index 정보를 보내어 Draw 하는 방식
– vertex와 index 정보가 계속해서 바뀌는 경우에 사용 (그러나, DynamicVertexBuffer가 이것보다 좀 더 빠르다고 함)
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.graphicsdevice.drawuserindexedprimitives.aspx
http://stackoverflow.com/questions/6787733/how-do-multiple-pass-shaders-work-in-hlsl
Shader의 technique 안에 2-pass 또는 N-pass 는 이전 패스에서 나온 결과에 다음 패스를 더하는 방식 – 예를 들어, multiple light, fog, multi-pass texturing 등에서 사용