Wednesday, July 16, 2014

keytool을 이용해 해쉬값 얻기

페이스북에 앱을 등록하기 위해서 앱의 hash값을 설정해야 하는데 이 값을 얻는 방법.

우선 키를 가지고 있다고 가정하고 이것을 nimblesix_key라고 하자.

커맨드 라인에서

keytool -exportcert -alias <별명> -keystore <키 파일> | openssl sha1 -binary | openssl base64

를 타이핑 하면 비밀번호를 묻는다. 해당 키의 비밀번호를 제대로 입력했다면 base64로 표현된 해쉬값을 얻는다.

하나의 키 파일은 하나 이상의 별명을 가질 수 있다. < >안에 그 내용을 타이핑 하면 된다. 예를 들어 별명이 flurryplanet, 키 파일이 nimblesix_key라고 한다면

keytool -exportcert -alias flurryplanet -keystore nimblesix_key | openssl sha1 -binary | openssl base64를 타이핑 하면 된다. 이 때 윈도우즈 시스템에는 openssl이 없을 수도 있는데 이때는 다음 사이트에서 프로그램을 다운로드 받고 커맨드 라인에서 사용하기 위해 환경변수를 등록해 주어야 한다.

다운로드 : http://slproweb.com/products/Win32OpenSSL.html

Saturday, February 1, 2014

Unity에서 빌보드 설정하기

Lookat 함수를 이용하는 방법도 있지만 전통적인 방법으로 행렬을 설정하고 그 행렬로 Transform을 변경하는 방법으로 빌보드를 구현해 보았다.


using UnityEngine;
using System.Collections;

public class billboard : MonoBehaviour {

// Use this for initialization
void Start () {

}

public static void TransformFromMatrix(Matrix4x4 matrix, Transform trans) {
trans.rotation = Quaternion.Inverse(QuaternionFromMatrix(matrix));
trans.position = matrix.GetColumn(3); // uses implicit conversion from Vector4 to Vector3
}

public static Quaternion QuaternionFromMatrix(Matrix4x4 m) {
// Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
Quaternion q = new Quaternion();
q.w = Mathf.Sqrt( Mathf.Max( 0, 1 + m[0,0] + m[1,1] + m[2,2] ) ) / 2;
q.x = Mathf.Sqrt( Mathf.Max( 0, 1 + m[0,0] - m[1,1] - m[2,2] ) ) / 2;
q.y = Mathf.Sqrt( Mathf.Max( 0, 1 - m[0,0] + m[1,1] - m[2,2] ) ) / 2;
q.z = Mathf.Sqrt( Mathf.Max( 0, 1 - m[0,0] - m[1,1] + m[2,2] ) ) / 2;
q.x *= Mathf.Sign( q.x * ( m[2,1] - m[1,2] ) );
q.y *= Mathf.Sign( q.y * ( m[0,2] - m[2,0] ) );
q.z *= Mathf.Sign( q.z * ( m[1,0] - m[0,1] ) );
return q;
}

// Update is called once per frame
void Update ()
{

Vector3 origin = transform.position;
Vector3 cameraPos = Camera.main.transform.position;

Vector3 w = cameraPos - origin;
w = w.normalized;

Vector3 u = Vector3.Cross (Vector3.up, w);
u = u.normalized;

Vector3 v = Vector3.Cross (w, u);

Matrix4x4 mat = new Matrix4x4 ();
/*mat.m00 = 1;
mat.m01 = 0;
mat.m02 = 0;
mat.m03 = 0;

mat.m10 = 0;
mat.m11 = 1;
mat.m12 = 0;
mat.m13 = 0;

mat.m20 = 0;
mat.m21 = 0;
mat.m22 = 1;
mat.m23 = 0;*/

mat.m00 = u.x;
mat.m01 = u.y;
mat.m02 = u.z;
mat.m03 = 0;

mat.m10 = v.x;
mat.m11 = v.y;
mat.m12 = v.z;
mat.m13 = 0;

mat.m20 = w.x;
mat.m21 = w.y;
mat.m22 = w.z;
mat.m23 = 0;

mat.m30 = origin.x;
mat.m31 = origin.y;
mat.m32 = origin.z;
mat.m33 = 1;

TransformFromMatrix (mat, gameObject.transform);
}
}

Task in UnrealEngine

 https://www.youtube.com/watch?v=1lBadANnJaw