月別アーカイブ: 2013年11月

Blenderでテクスチャーを貼り付けたチューブオブジェクトの作り方

参考にしたサイトURL

http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Modeling/Curves

http://www.youtube.com/watch?v=B1jSY6FvIFw

Blenderの使い方

Add→Curve→Bezierを選択して配置し、Tabキーを押してObjectModeからEditModeにする。曲線のControlPointを右クリックして好きな形を作れる。曲線を増やすにはControlPointをクリックして選択してからEキーを押して適当な場所を左クリックするとそこまで曲線を延長出来、ControlPointとHandleが増えていく。

次にAdd→Mesh→Cylinderを選択して配置。Sキーを押してマウスを移動させて大きさを変えれる。左クリックで確定する。Nキーを押して右メニューを表示させる。そのなかのRotationのY軸を90度にして向きを整える。ObjectModifiers→AddModifier→GenerateのArrayをクリック。その中のFitTypeのFitCurveをクリックすると、したにCurveメニューが出てくるので、その中のさきほど作成したBezierCurveを選択。

CylinderにMaterialが作成されているのを確認してからTextureを作成する。Textureの中のTypeからImageOrMovieを選択。ImageのOpenから好きな画像を持ってくる。MappingのProjectionからTubeを選択。レンダリングしてちゃんと反映されているか確認する。

CylinderのObjectModifier→AddModifier→Curveを選択。出てきたメニューのObjectに先ほどのBezierCurveを選択。Tabキーを押してEditModeにしてWキーを押してsubdivide→NumberofCutsの番号を増やす。最後にShadingのSmoothを選択してオブジェクトモードにすると出来上がる。レンダリングして確認する。まだあった、オブジェクトモードで Alt + C > のMesh from Curve/Meta/Surf/Textで曲線をMeshに変換(Convert)する。

Unityにチューブ型の両面メッシュを取り込むまで

Blenderでチューブ型のメッシュを作る

http://na59.jp/blog/2011/04/blender-256-2.html

http://wararyo.blogspot.jp/2012/12/blender1.html

Blenderでメッシュの法線の確認と反転の仕方

http://cycles.wiki.fc2.com/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E6%B3%95%E7%B7%9A%E6%96%B9%E5%90%91%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95

Blenderでのメッシュの複製の仕方

http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/Modeling/Meshes/Editing/Duplicating/Duplicate

Blenderの日本語マニュアル

http://wiki.blender.org/index.php/Doc:JA/2.6/Manual/

両面にテクスチャを張るためのテクニック

まずオブジェクトのpositionを原点に持って行く。そして、それを複製した物をZ軸に沿って移動させてずらし、法線ベクトルの反転をして、positionZ軸の0に持って行き複製された物と重ね合わせる。

VuforiaとAndroidの連携を一からするまで

公式サイト

https://developer.vuforia.com/

公式マニュアル

https://developer.vuforia.com/resources/dev-guide/step-1-setting-development-environment-android-sdk

躓いた事

  • Windows7の「システム環境変数の編集」の場所はスタートメニューの検索に「Path」と打ち込むと出てくる
  • Vuforiaのサンプルファイルがないないと探していたら、あるべき場所にreadmeファイルを発見。開くとURLが書かれていた。ダウンロードしないといけなかったんだ。
  • Vuforiaのサンプルファイルをndk-buildコマンドでビルドしたが管理者権限の問題で失敗。以下のコードがそれ
    $ ndk-build
    [armeabi] Prebuilt : libQCAR.so <= jni/../../../build/lib/armeabi/ 
    [armeabi] Install : libQCAR.so => libs/armeabi/libQCAR.so
    [armeabi armeabi-v7a] Cygwin : Generating dependency file converter script
    [armeabi] Compile++ arm  : TextReco <= SampleUtils.cpp
    [armeabi] Compile++ arm  : TextReco <= TextReco.cpp
    [armeabi] StaticLibrary  : libstdc++.a
    [armeabi] SharedLibrary  : libTextReco.so
    C:/Development/Android/android-sdk-windows/adt-bundle-windows-x86_64-20131030/android-ndk-r9b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: error: cannot open ./obj/local/armeabi/libQCAR.so: Permission denied

    解決策はvuforia-sdkのルートディレクトリ以下をcygdriveの端末で「chmod -R 777 」と打ち権限を完全に解放した。セキュリティーが心配だが動かないとセキュリティも糞もないから止むを得ないorz by https://developer.vuforia.com/forum/faq/android-how-do-i-fix-my-compile-or-runtime-errors

  • cygdriveは必ず管理者権限で立ち上げる事
  • Eclipseで実行した際「Unable to resolve target・・・」や「clear・・・」と出てきてうまく動作しない場合、プロジェクトファイルを右クリックしてプロパティーをクリック、ホップアップしたウィンドウの左メニューのAndroidをクリック、右のProgect Build TargetのTarget Nameの中のAndroid4.4(4.4は現在のバージョン番号)にチェックが入っているかどうかを確認。ホップアップ画面を閉じてProject→Clean→Clean all projectsを選択して適応する。
  • voforiaに画像をアップロードする際、以下の画像のwidthは適切な値を入力する事。(適当に値を1と入れてみたら失敗したので)voforia-imagehttps://developer.vuforia.com/resources/dev-guide/step-2-compiling-simple-projecthttp://nvtrlab.jp/column/1-4 http://qiita.com/JunSuzukiJapan@github/items/14b14f9608b75bd325d8

分割されていない3DデータオブジェクトをUnityで動かすためにBlenderで分割してエクスポートする方法

  • Blenderの繋がったメッシュを部分全選択の仕方
    • 左下のボタンからEditモードにしてSelectモードをFaceSelectにしてからカーソルを合わしてLキーを押しながら右クリック

    by http://cg.xyamu.net/Blender/entry169.html

  • 選択したオブジェクトを分割する
    • エディットモードで、別のオブジェクトに分割する点(または辺または面)を選択し、キーボードのPを押します。 “Separate”というタイトルのメニューが表示されますので、”Selection”を実行します

    by http://www.blender3d.biz/knowledge_editing_separateobject.html

  • オブジェクトの中心点をそれぞれに設定する
    • デフォルトのObjectModeになっている事を確認して設定したいオブジェクトを右クリックで選択し、左メニューのObject Tools→Transform→Originをクリックして出てくるプルダウンメニューの4つの内から状況に合わせて選択する
  • エクスポートする
    • エスクポートするファイル拡張子は「dae」。obj拡張子だとうまく分割されない。エクスポートする際にはカメラとライトオブジェクトを消しておく(本当は「fbx」でエクスポート推奨だと公式が言っているんだが自分が使っているBlenderのバージョンが2.6なため、バグっていて出来ない by http://docs.unity3d.com/Documentation/Manual/HOWTO-ImportObjectBlender.html

unityの内積について

参考になったサイト

検証用コード

  • unityのHierachyViewに3つのオブジェクトを作成して確かめた
using UnityEngine;
using System.Collections;

public class TestDotProduct : MonoBehaviour {

	public Transform vec1;
	public Transform vec2;

	// Use this for initialization
	void Start () {
	}

	// Update is called once per frame
	void Update () {
		Debug.Log("vec1.position "+vec1.position);
		Debug.Log("vec2.position "+vec2.position);
		Debug.Log("transform.position "+transform.position);
		Vector3 OVec1 = vec1.position - transform.position;
		Vector3 OVec2 = vec2.position - transform.position;
		Debug.Log("OVec1 "+OVec1);
		Debug.Log("OVec2 "+OVec2);
		Debug.Log("OVec1.magnitude "+OVec1.magnitude);
		Debug.Log("OVec2.magnitude "+OVec2.magnitude);
		float dotFunction = Vector3.Dot(OVec1,OVec2);
		float dot = OVec1.x * OVec2.x + OVec1.y * OVec2.y + OVec1.z * OVec2.z;
		Debug.Log("dotFunction "+dotFunction);
		Debug.Log("dot "+dot);
		float cosTheta = dotFunction / (OVec1.magnitude * OVec2.magnitude);
		Debug.Log("cosTheta "+cosTheta);
		float radian = Mathf.Acos(cosTheta);
		Debug.Log("radian "+radian);
		float degree = radian * 180 / Mathf.PI;
		Debug.Log("degree "+degree);
		Debug.Log("");
		Debug.Log("");
	}
}

車の前方方向の速度を正確に取得するには以下の2つのURLを読む

法線/垂直ベクトルの計算