블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2809)
Unity3D (865)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (234)
협업 (61)
3DS Max (3)
Game (12)
Utility (140)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday


링크 : 주식투자 프로젝트

반응형

'재테크 > 주식' 카테고리의 다른 글

밑꼬리 양봉과 음봉  (0) 2014.06.18
실전 최적 매수패턴 22선  (0) 2014.06.18
이동평균선  (0) 2014.06.12
키움증권 영웅문을 통한 스탑로스(Stoploss) 사용 방법  (0) 2014.05.28
심심풀이 주식강좌  (0) 2014.04.26
Posted by blueasa
, |
유니티의 그림자 기능은 설정 메뉴가 너무 단순해서 별로 할 게 없어 보입니다.
(렌더러에서 체크박스만 체크하고, 퀄리티에서 옵션 조정하는 것이 전부입니다. )
유니티 그림자 시스템의 특징은 투명한 물체에서는 그림자가 동작하지 않으며, 물체의 메시정보에 의해 그림자가 자동으로 만들어지며, 이를 고칠 수 있는 메뉴구성은 존재하지 않습니다.

하지만 유니티 그래픽 팀에서는 셰이더를 사용하여 직접 내가 그림자 모양을 변경할 수 있는 인터페이스를 만들어 두었는데, 이를 소개해드립니다.
우선 셰이더를 제작하고, Pass 구문에 ShadowCaster 라이트 모드를 사용하는 셰이더를 만들면 이 구문에서 물체가 그림자를 생성할 때 이를 가로채 여러분들이 원하는 모양으로 그림자 형태를 변경하는 것이 가능합니다. 

아래 그림 중 왼쪽은 위의 기능을 적용한 예이며, 오른쪽은 일반적인 그림자 생성 결과입니다.






이를 위한 셰이더 코드는 다음과 같습니다. 
붉은 색으로 표시한 Pass의 Tag 구문의 라이트모드 설정을 잘 활용 하시면 여러 표현이 가능하다~ 는 것을 보여드리기 위해 예제는 최대한 심플하게 만들어봤습니다.  (TRANSFER_SHADOW_CASTER 와 같은 매크로들은 UnityCG.cginc에 다 정의되어 있습니다. )

Pass
{
    Name "ShadowCaster"
    Tags { "LightMode" = "ShadowCaster" }
    CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"
        
        sampler2D _MainTex;
        fixed _Cutoff;

        struct v2f { 
            V2F_SHADOW_CASTER; 
            float2 uv : TEXCOORD1;
        }
        
        v2f vert(appdata_full v)
        {
            v2f o;
            o.pos = mul( UNITY_MATRIX_MVP, v.vertex ); 
            o.uv = v.texcoord;
            TRANSFER_SHADOW_CASTER(o)
            return o;
        }
        
        float4 frag(v2f IN) : COLOR
        {
            fixed4 c = tex2D( _MainTex, IN.uv );
            clip( c.a - _Cutoff );
            SHADOW_CASTER_FRAGMENT(IN)
        }
    ENDCG
 

프로젝트 파일은 아래에서 다운로드 가능합니다.


참고로 특정 영역이 뚫려있는 그림자의 경우 Transparent/Cutout 계열을 사용하면 자동으로 알파를 제외하고 그림자를 생성해줍니다. 



반응형

'Unity3D > Shadow' 카테고리의 다른 글

Projector Multiply Offset  (0) 2014.04.03
유니티 3D에서 그림자 설정  (0) 2014.03.29
실시간 그림자  (0) 2014.03.07
Posted by blueasa
, |

링크 : http://micropilot.tistory.com/2316

반응형

'Unity3D > Shadow' 카테고리의 다른 글

Projector Multiply Offset  (0) 2014.04.03
셰도우캐스터(ShadowCaster)를 활용한 그림자 생성 변경  (0) 2014.03.29
실시간 그림자  (0) 2014.03.07
Posted by blueasa
, |

unity3D용으로 만들어진 암복호화 알고리즘이다.
(출처: 까먹음... T_T)



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
32
33
34
using UnityEngine;
using System.Collections;
using System.Security.Cryptography;
using System.Text;
using System.IO;
using System;
 
//중략 Key는 32바이트 "12345678901234567890123456789012"
 
 
     public static string Encrypt(string toEncrypt, string key)
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateEncryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    }
    public static string Decrypt(string toDecrypt, string key)
    {
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
        byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
        RijndaelManaged rDel = new RijndaelManaged();
        rDel.Key = keyArray;
        rDel.Mode = CipherMode.ECB;
        rDel.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rDel.CreateDecryptor();
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
        return UTF8Encoding.UTF8.GetString(resultArray);
    }



* 서버에서도 같이 설정해두면 따로 싱크걱정 사라짐 =)


출처 : http://www.wolfpack.pe.kr/828?category=5

반응형
Posted by blueasa
, |


링크 : http://progagmer.blog.me/199532845

반응형
Posted by blueasa
, |


이선희가 복귀했네요.

개인적으로 은퇴가 아쉬웠었는데 반갑기도 하고..

목소리도 여전히 좋고..

노래도 좋네요.

오랜만에 앨범을 사야겠어요. =ㅁ=!!


반응형

'Memories' 카테고리의 다른 글

[Tip] '보라보라 섬'을 다시 간다면 이렇게..?  (0) 2015.07.30
[신혼여행] 보라보라 섬  (2) 2015.07.21
자귀 나무  (0) 2013.05.24
울지마 톤즈 극장판 -이태석신부님  (0) 2012.06.25
[MUD] 마계지문 재오픈  (11) 2012.06.09
Posted by blueasa
, |

xls와 xlsx 둘 다 되도록 예제를 약간 수정해서 테스트 완료.


P.s. 무슨 이유인지 모르지만 VS2013에서는 Microsoft.Office.Interop.Excel 이 없어서, 부득이하게 VS2010으로 작업함.

       (VS2012는 있는지 확인은 안해봤지만.. 얼핏 인터넷에서 보기로는 VS2012도 없는 듯..)

        
        private void CreateExcelFile()
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.Application();
            // 생성할 때, 기본 Sheet 1개.
            xlWorkBook = xlApp.Workbooks.Add(misValue);

            // Sheet 추가.(필요한 Sheet 개수에 따라 루프 돌아야 될 듯)
            xlWorkBook.Worksheets.Add(misValue, misValue, misValue, misValue);

            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
            // Sheet Name 지정.
            xlWorkSheet.Name = "SheetName1";
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";

            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);
            xlWorkSheet.Name = "SheetName2";
            xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";

            // 테스트용으로 파일명 직접 입력.
            string createFilePath = Directory.GetCurrentDirectory() + @"\" + "csharp-Excel.xlsx";

            // 파일 있으면 삭제.
            if (true == File.Exists(createFilePath))
            {
                File.Delete(createFilePath);
            }

            // 확장자만 검사하기 위해..
            string strExtension = Path.GetExtension(createFilePath);

            if (0 == strExtension.CompareTo(".xlsx"))
            {
                xlWorkBook.SaveAs(createFilePath, Excel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlUserResolution, true, misValue, misValue, misValue);
            }
            else if (0 == strExtension.CompareTo(".xls"))
            {
                xlWorkBook.SaveAs(createFilePath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            }

            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);

            MessageBox.Show("Excel file created , you can find the file " + createFilePath);
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }



엑셀 생성 참조 : http://csharp.net-informations.com/excel/csharp-create-excel.htm

xlsx 참조 : http://stackoverflow.com/questions/9769703/exporting-to-xlsx-using-microsoft-office-interop-excel-saveas-error


반응형
Posted by blueasa
, |

C# Excel Tutorial

Programming/C# / 2014. 3. 26. 15:02
 C# Excel Tutorial


반응형
Posted by blueasa
, |

















반응형
Posted by blueasa
, |













반응형
Posted by blueasa
, |