cyberbird11のブログ

主にソフト開発に関すること

ModelMeshPartごとにBoundingSphereを作成する

ModelMeshごとのBoundingSphereはプロパティとして用意されているが、ModelMeshPartには無いようなので作ってみた。

public static BoundingSphere[] CreateBoundingSpheres(ModelMeshPartCollection parts, VertexBuffer vb, IndexBuffer ib)
{
    BoundingSphere[] spheres = new BoundingSphere[parts.Count];
    // 頂点データを取得する。頂点フォーマットは適切なものを使用する。
    VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[vb.SizeInBytes /
        VertexPositionNormalTexture.SizeInBytes];
    vb.GetData(vertices);
    // 頂点インデックスを取得する。
    ushort[] indices = new ushort[ib.SizeInBytes / sizeof(ushort)];
    ib.GetData(indices);
    // BoundingSphereを作成する。
    for (int i = 0; i < spheres.Length; i++)
    {
        ModelMeshPart part = parts[i];
        Vector3[] points = new Vector3[part.PrimitiveCount * 3];
        // 頂点の位置を取得する。
        for (int j = 0; j < part.PrimitiveCount * 3; j++)
        {
            points[j] = vertices[indices[j + part.StartIndex] + part.BaseVertex].Position;
        }

        spheres[i] = BoundingSphere.CreateFromPoints(points);
    }

    return spheres;
}


動かしてみたところ、コードに問題があるのか綺麗に作成されなかったりする。
改善案は今のところ思いつかない。
精密に作るなら手動で作るべきか。

Apacheのサーバー設定ファイルについて

httpd.confというファイルがサーバー設定ファイル。
httpd.confを編集してアクセス制限したりなど、設定が行える。
設定後はApacheを再起動しないと反映されないので注意。


Locationディレクティブを使用してURL部分に指定したディレクトリへのアクセスを禁止する。

<Location URL>
    Deny from all
</Location>


Denyディレクティブはホスト名、IPアドレス、環境変数に基づいてサーバへのアクセスを制限する。
fromの後の指定を変えることによって特定のホストのみ制限したりできる。
この例はfromの後にallを指定しているので全てのホストからのアクセスを防ぐ。
セキュリティ上スクリプトが含まれるテンプレートファイルなどにアクセスさせないようにするのが好ましい。

参考リンク
Apache2.2のドキュメント
設定ファイル
ディレクティブ クイックリファレンス

GDI+を使用して動的にXNAのテクスチャを作成する

// テクスチャにするビットマップを作成する。
var bitmap = new Bitmap(320, 32);
// GDI+で描画するためにGraphicsオブジェクトを取得する。
var g = Graphics.FromImage(bitmap);
// テクスチャを描く。この例ではGreenの塗りつぶした四角形を描画している。
g.FillRectangle(Brushes.Green, new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height));

// MemoryStreamに保存する。
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Bmp);

// MemoryStreamのポジションが進んでしまっているため、先頭に戻す。
ms.Position = 0;

// ビットマップを格納したMemoryStreamからTexture2Dを作成する。
Texture2D texture = Texture2D.FromFile(GraphicsDevice, ms);


ms.Close();
livedoor プロフィール
<<  October,2009  
S M T W T F S
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
livedoor × FLO:Q
QRコード
QRコード
  • livedoor Readerに登録
  • RSS
  • livedoor Blog(ブログ)