[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Content; class MyGame : Game { GraphicsDeviceManager graphics; BasicEffect basicEffect; VertexPositionNormalTexture[] vertices; ContentManager content; Texture2D texture; public MyGame() { graphics = new GraphicsDeviceManager(this); content = new ContentManager(Services); vertices = new VertexPositionNormalTexture[3]; vertices[0].Position = new Vector3(0, 1, 0); vertices[0].Normal = new Vector3(0, 0, 1); vertices[0].TextureCoordinate = new Vector2(0.5f, 0); vertices[1].Position = new Vector3(1, 0, 0); vertices[1].Normal = new Vector3(0, 0, 1); vertices[1].TextureCoordinate = new Vector2(1, 1); vertices[2].Position = new Vector3(-1, 0, 0); vertices[2].Normal = new Vector3(0, 0, 1); vertices[2].TextureCoordinate = new Vector2(0, 1); } protected override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) { basicEffect = new BasicEffect(graphics.GraphicsDevice, null); basicEffect.View = Matrix.CreateLookAt( new Vector3(0, 0, 3), new Vector3(0, 0, 0), new Vector3(0, 1, 0) ); basicEffect.Projection = Matrix.CreatePerspectiveFieldOfView( MathHelper.ToRadians(45), Window.ClientBounds.Width/(float)Window.ClientBounds.Height, 1, 100 ); texture = content.Load<Texture2D>("FlyingSpaghettiMonster"); } } protected override void UnloadGraphicsContent(bool unloadAllContent) { if (unloadAllContent) { content.Unload(); } } protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); graphics.GraphicsDevice.VertexDeclaration = new VertexDeclaration( graphics.GraphicsDevice, VertexPositionNormalTexture.VertexElements ); basicEffect.TextureEnabled = true; basicEffect.Texture = texture; basicEffect.LightingEnabled = true; basicEffect.DirectionalLight0.Enabled = true; basicEffect.DirectionalLight0.Direction = new Vector3(1, 0, -1); basicEffect.DirectionalLight0.DiffuseColor = new Vector3(0.5f, 0.5f, 0.5f); basicEffect.DirectionalLight0.SpecularColor = Color.White.ToVector3(); basicEffect.Begin(); foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) { pass.Begin(); graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionNormalTexture>( PrimitiveType.TriangleList, vertices, 0, vertices.Length / 3 ); pass.End(); } basicEffect.End(); } }
class Program { static void Main() { var id = 1; //Int32 System.Console.WriteLine(id); //1 } }
class Program { static void Main() { var id; id = 1; System.Console.WriteLine(id); } }
class Program { static void Main() { var id = "1"; //String System.Console.WriteLine(id); //1 } }
using System; class Program { static void Main() { var book = new { Name = "利己的な遺伝子", Price = 2940 }; Console.WriteLine("{0} ¥{1}", book.Name, book.Price); } }
using System; class Person { public int Age { get; set; } } static class PersonExtension { public static bool IsAdult(this Person person) { return person.Age >= 20; } } class Program { static void Main(string[] args) { Person child = new Person { Age = 10 }; Person father = new Person { Age = 35 }; Console.WriteLine(child.IsAdult()); //False Console.WriteLine(father.IsAdult()); //True } }
using System; using System.IO; interface IPerson { int Age { get; set; } } class Person : IPerson { public int Age { get; set; } } class PersonFile : IPerson { public int Age { get { return Int32.Parse(File.ReadAllText("person.txt")); } set { File.WriteAllText("person.txt", value.ToString()); } } } static class PersonExtension { public static bool IsAdult(this IPerson person) { return person.Age >= 20; } } class Program { static void Main(string[] args) { Person child = new Person { Age = 10 }; PersonFile father = new PersonFile { Age = 35 }; Console.WriteLine(child.IsAdult()); Console.WriteLine(father.IsAdult()); } }とりあえずPersonクラスに似た、PersonFileクラスを作りました。
遅ればせながら次期Visual Studio、
"Orcas" Express Editionをインストールしてあそんでみました。
インストールしてさっそく起動してみると、
・・・特に2005と変わらないように見えます。
しいて違うところをあげるならタブの色がよりLunaっぽく、
かっこよくなっているということくらいでしょうか。
とりあえずプロジェクトを作って何かやってみることにしました。
当たり前ですが作れるプロジェクトの種類が2005より少ないようですね。
ともかく、一番単純な、コンソールプログラムで遊ぶことにしました。
今回の目玉はLinqらしいので
おいしいものは最後に取っておくと言う意味で
まずは地味な機能を使うことにします。
なんでもC# 3.0ではプロパティの宣言が
簡単になったとの事ですので。(自動プロパティ)
結果はこうです:
x = 0, y = 1
Rubyのように、プロパティを宣言するだけで、
変数の宣言の必要は無いらしいです。
それにしてもこのプロパティの書き方はインターフェースで
プロパティを宣言するやり方に似ています。(伏線)
次にコンストラクタを書いてみました。
わざわざ2行使ってプロパティに値を代入するのは
面倒に思えたからです。
しかし、失敗しました
Compile Error!
3D酔いとは?
3Dゲームをしていると乗り物酔いのように気分が悪くなり吐き気を催すことがあります。
これを3D酔いといいます。
例えばマイクロソフトのシューティングゲーム、Halo(体験版はこちら)は
面白いゲームですが3D酔いでその面白さが半分台無しになっています。
ワートホグ(車のこと)に乗れば5分も経たずに気分が悪くなってきます。
視点が揺さぶられるわカメラが障害物をすいすい(この「すいすい」がいけません!)避けるわで
すぐにゲームを続けたい気持ちとさっさとトイレに
駆け込みたくなる気持ちの間でアンビバレンツに陥ります。
(まぁしばらくすると落ち着くのですが)
3D酔いの原因
この3D酔いの詳しい原因はよくわかっていませんが、
大体の原因は目から入る情報と三半規管から入る情報のミスマッチであることは間違いないようです。
(こんなことがわかっても3D酔い対策はほとんど出来ないのであまり意味の無い話です。)
つまり、目からは「自分は動いている」と言う情報が来るのに
三半規管からは「自分は止まっている」と言う情報が来るので
脳が混乱して気分が悪くなったり、吐き気がするというわけです。
これはちょうど乗り物酔いの逆で、乗り物酔いの場合は
目からは「自分は止まっている」という情報が来るのに
三半規管からは「自分は動いている」と言う情報が来るわけです。
(ですから乗り物酔いになったときは外の風景を眺めてこの情報の食い違いを解消するのです。)
しかしこれは「情報のミスマッチ」が酔いを引き起こすと言う点で同じです。
また似たような症状として「宇宙酔い」があります。
宇宙酔いというのは宇宙の無重力空間でやはり気分が悪くなり吐き気を催してしまう症状のことで、
現在スペースシャトルの乗組員のだいたい60%が最初のフライトで宇宙酔いに悩まされます。
この原因はおそらく重力が打ち消されているからで、
実際宇宙飛行士が特に吐き気に襲われるのは地上の、
重力のある環境ではありえないものを見たときです。
(例えば同僚の宇宙飛行士が頭を下にしていたりとか)
これもやはり目と三半規管のミスマッチが引き起こすものです。
このことから考えて、乗り物酔いにしろ3D酔いにしろ宇宙酔いにしろ全て
「目と三半規管から脳に入ってくる情報のミスマッチ」が原因であると考えてよさそうです。