이번에 OpenCV라이브러리를 빌드하는 과정에서 생긴 문제를 해결한 경험에 비추어 작성하고자한다. 우선 주의할점을 적는것이라 내용이 조금 빠질 수 있는 부분이 있지만 그런 부분은 적당히 채워나가기로...

1. 현재 Visual Studio의 빌드를 지원하는지 확인
대부분 CMake는 되고 실재로 비주얼 스튜디오에서 빌드가 안 되는 경우. 이런경우는 원인 찾기가 생각보다 힘들다. 개발자들이 VS적정버전에 대해 별도로 공지를 안 해주는 경우가 많기때문에...

예를 들어 OpenCV같은경우는 4버전 이후부터는 C++ 11 이전버전은 지원하지 않기때문에 VS2013 사용자들은 4버전 미만의 버전을 선택해야 한다. 문서를 덜 읽어서 못 찾았을 수도 있지만 아무래도 개발자용이기 때문에 생략되어 있거나 복잡하게 쓰인 경우가 많기도 하고

2. 에러가 발생하는 부분은 과감하게 제거
이거 없으면 안되지 않을까?라는 생각은 빨리 접고 CMake Configration & Generate를 다시 진행한 후에 빌드를 시도해보는것이 낫다. 추가는 나중에 빌드 성공한 후에 해도 충분...

3. 가능하면 관리자 권한이 필요없는 폴더를 사용
CMake도 관리자, VS도 관리자로 켜서 하는 방법도 있지만 가장 좋은 방법은 둘 다 관리자 권한이 필요없는 상태라고 생각

4. 인터넷에 있는 사용법에 너무 매달리지 않기
예전에 VTK 빌드할때도 그랬던거같은데 애초에 모든 버전을 다 똑같이 맞출게 아니면 큰 의미가 없다고 생각한다. 특히 한국 블로그에 써있는 순서형 가이드는 더더욱...

버전이 별로 안 달라도 디테일한 부분이 완전 달라져서 빌드가 안 되는 경우도 있어서 시간날리기 딱 좋은 시츄에이션. 적당히 참고만 하고 직접 빌드해서 문제가 되는 부분만 따로 검색하거나 집중 리뷰해서 빠르게 쳐나가는쪽이 이해에도 도움이 되고 속도도 더 빠르다.

물론 내가 부족해서 방법을 못 찾은것도 있겠지만 현재의 WPF에서는 일부 컨트롤은 Winform만큼의 퍼포먼스가 안 나오는것같다...

http://slaner.tistory.com/92



C++과 좀 다르니 확실히 기억해두는것이 좋다

C#에서는 유용하게 잘 써먹었던 Singleton이였지만 개인 프로젝트를 C++로 진행한 적이 없었기 때문에 C++에서는 사용할 일이 없어 지금까지 외면해왔지만 


업무상으로 C++에서 코드를 작성해야 하는데 해당 프로젝트에 Singleton을 쓰면 좋을 것 같아서 검색하던 도중 좋은 글을 찾았다.





http://vallista.tistory.com/entry/1-Singleton-Pattern-in-C



일단 매우 기초적으로 구성할 수 있는 Singleton부터 Tamplete을 이용한 Singleton까지 다양한 Singleton들이 존재하고 


개인적으로는 Tamplete을 이용한것이 가장 깔끔한것 같다. 일단 포인터와 메모리 관리가 가장 편하고 한번 만들어두면 다른 곳에서도 활용할 수 있으니...





http://gamasotworld.blogspot.kr/2013/12/programming_29.html



위 글은 싱글톤 사용 이유와 단점에 대해 서술되어있으니 한번 읽어보고 내가 진행하는 프로젝트에 꼭 싱글톤이 필요한지에 대해 생각해보는것도 좋을 듯 싶다.

Unity와 연동시킬때마다 비주얼 스튜디오에서 "알 수 없는 오류입니다" 오류창이 발생하는 오류가 있었는데 이 문제를 해결하는 법에 대해서 써보도록 하겠다.



해결방법은 여러가지가 있지만 가장 보편화된 해결법은


%localappdata%\Microsoft\VisualStudio\15.0_4388abd4 (2017의 경우에는 15.0 뒤에 문자가 추가로 붙어있을 수 있음)


해당 경로에서 현재 사용하는 비주얼 스튜디오의 버전에 해당하는 폴더 안에 들어가보면 privateregistry.bin라는 파일이 존재한다.



일단 이 privateregistry.bin파일을 제거하면 해결된다는 답변이 많았지만 나의 경우에는 이 문제가 반복해서 발생했고 지울때마다 실행은 됬지만 비주얼 스튜디오가 재설정 되었기때문에 번거로워져서 해결법을 좀 더 찾아보았다.



그래서 찾은 해결법



1. 먼저 Visual Studio와 관련된 모든 프로세스를 종료


2. 위에서 언급한 privateregistry.bin파일을 지운다.


3. Visual Studio를 관리자 권한으로 실행



관리자 권한으로 정상 실행을 확인한 뒤부터는 관리자 권한이 아닌 보통 권한으로 실행해도 문제가 없다. 


파일 참조 권한이 막혀서 문제가 발생하는 경우가 종종 있는것같다. 나같은 경우에는 관리자 권한으로 Visual Studio를 실행하여 privateregistry.bin파일을 재생성한 뒤부터는 해당 문제가 발생하지 않았다.

여기서 쓰는 STL은 Standard Template Library가 아니라 STereoLithography 파일에 대한내용.




일단 STL 파일 구조가 단순한 관계로 바이너리 형태든 ASCII형태든 뷰어 자체를 만드는건 쉽지만


OpenGL로 처음부터 구현하는건 시간도 시간이고 퀄리티도 그렇고 노력도 들어가므로


굳이 만든다고 한다면 VTK를 사용하는 편이 압도적으로 편하고 시간도 적게 걸리고 완성도도 높게 나옴



사실 어떤 목적이든 정말 특수한 경우가 아닌 이상은 직접 만드는것보다 이미 릴리즈 된 프로그램들을 사용하는것이 가장 편하고 좋겠지만...

포토샵이나 그림판을 사용하면 할 수 있는 간단한 작업이지만 해당 작업을 일괄적으로 처리하거나 프로그램에서 직접 그린 그림을 바로 합성해야 할 경우가 있기에 해당 기능을 C#코드로 구현한 결과물입니다.




코드 자체는 엄청 간단합니다. 배경이 될 이미지 위에 그대로 타겟 이미지를 그리는것이 모든 작업의 끝입니다. MFC를 학습하였다면 누구든지 쉽게 떠올릴 수 있는 방법이라고 생각합니다.


다만 두 이미지의 DPI가 다를 경우 합성 좌표가 어긋날 수 있기때문에 DPI를 계산해서 환산하는 부분이 코드에 들어가있습니다.

라이브러리는 OpenCvSharp을 NuGet 패키지로 받아서 사용

ImRead로도 충분히 가능한 부분이지만 ImRead는 기본적으로 보조기억장치에 있는 이미지만 불러올 수 있으므로 

이미 메모리에 올라가있는 이미지를 실시간으로 받아오는데는 적절하지 않다고 생각이 되었기때문에 방법을 찾음



피해자(?)가 생기질 않길 바라며 이 글은 쓴다. 


일단 이 책은 전체적으로 부실한 내용을 가지고 있다는 것을 먼저 이야기하고 넘어가고 싶다. 저자가 원고를 넘길때 검토를 하나도 안 한 모양이다. 아니면 출판사에서 뭘 잘못했던가...



일단 이 책은 만약 지금처럼 GitHub이나 인터넷이 활발하지않은 환경이였다면 불쏘시개로 전락할 수준의 완성도를 가지고있다.


그나마 예제 소스코드를 인터넷에서 받을 수 있으니까 다행인것이다. CD부록도 있긴한데 별로 도움이 안된다. CD를 컴퓨터에 넣는 수고를 할 바에 GitHub이나 페이스북 페이지에 가서 샘플을 받는게 낫다.



기초적인 개념을 익히는데는 좋다고 생각하지만 아무것도 모르는 생초보가 이 책을 보고 따라한다고...? 매우 위험한 생각이다.




맨 처음 책을 보고 시작했을때는 잘 썼다 싶었는데 플레이어 캐릭터에 액션을 집어넣는 부분부터 뭔가 치명적으로 잘못되어간다는것을 느꼈다.


몇몇 부분은 유니티 버전이 올라가면서 변경되었을수도 있겠구나 하면서 넘어간다고 치지만 가장 중요한 스크립트 부분에 문제가 많다.



자잘한 오타부터 시작해서 아예 코드가 빠지거나 잘못된 부분이 많고 한줄만 추가하면 된다는 설명과는 다르게 코드의 일부를 갈아엎어야 하는 부분도 있고


아무 설명 없이 전 챕터에 없던 코드가 생기거나 전 챕터에 있던 코드가 사라지기도 하고 더 이상 사용되지 않는 코드가 사용되거나 사용목적이 잘못된 경우도 있고...


이렇게 작동할 것입니다 라고 서술되어있지만 실제로 조작해보면 그렇게 동작하지 않는 등 정말 문제투성이라고 해도 과언이 아닐 수준이다





유니티 개발에 대한 골격 자체는 잡고 넘어가기는 하며, 코드에 문제가 발생하는 부분들은 직접 디버깅을 하면서 돌다리 두들기듯이 진행할 수는 있지만 지금까지 봐왔던 책들에 비해 완성도가 떨어진다는건 부정할 수 없는 사실이다.


개인적으론 이 책에 4만원 상당의 가치가 있다고는 생각하기 어렵다. 비슷한 가격의, 아직 찾아보지는 않았지만 훨씬 퀄리티가 좋은 책이 이미 있을거라고 확신한다.


정말로, 말 그대로 「나홀로」완성하는 느낌을 받고싶다면 사도 괜찮을지도 모르겠다. 지도가 부실해도 적어도 나침반은 있으니까 오픈월드 게임을 칼 한자루 들고 도보로 여행하는 느낌은 받을 수 있지않을까

'Programing > C#' 카테고리의 다른 글

[C#]이미지와 이미지를 병합하기  (0) 2017.03.10
[C#][OpenCV]Bitmap을 Mat으로 변환  (0) 2017.01.20
[C#]var와 dynamic  (0) 2016.12.29
[C#]JSON 데이터 Deserialize  (0) 2016.12.28
[WPF]WPF의 장점?  (0) 2016.09.13

var는 다른 언어에서도 쉽게 접할 수 있는 키워드이다.



var의 장점은 string이냐 int냐 등등의 것들을 따질 필요 없이 간단하게 변수를 선언할 수 있다는 점이다.





그렇다면 dynamic은 무엇인가...하면 dynamic도 var와 하는 일은 거의 비슷해보인다. 하지만 dynamic같은 경우에는 좀 더 능동적인 변수라고 말할 수 있다.



이게 무슨 말이냐 하면 var의 경우에는 프로그래머가 직접 지정을 하지 않는다뿐이지 var변수 오른쪽에 위치할 코드로 인해 var의 형태는 확실하게 고정되게 된다.


하지만 dynamic은 실행을 할때도 별도의 검사를 하지 않는다. 즉 좀 더 능동적인 활용이 가능한 변수라고 하겠다.



나같은 경우는 JSON 을 deserialize할때 dynamic의 도움을 많이 받았다. dynamic의 장점은 명확하게 형태가 정해지지 않는 점에 있으므로 들어오는 변수값에 대해 좀 더 능동적인 대처가 가능해진다. 코드의 길이가 줄어드는 효과를 볼 수도 있다. 좀 더 자세한 설명은 MSDN을 참조하도록 하자.


하지만 IDE가 별도로 검사를 해주지 않기때문에 해당 코드에 정말 치명적이고 단순한 문제가 있다고 해도 프로그램이 터질때까지 비주얼 스튜디오는 나에게 이 코드에 문제가 있다고 알려주지 않는다. 못한다고 표현하는 쪽이 더 옳겠지만...


너무 남발하다보면 php로 코딩할때와 비슷한 기분을 느낄 수 있다. php보다야 당연 디버깅하긴 훨씬 편하지만...




하여튼 이 글에서 말하고 싶은 부분은 dynamic이라는것도 있다는걸 알아두면 언젠간 유용하게 쓸 날이 올지도 모른다...?

'Programing > C#' 카테고리의 다른 글

[C#][OpenCV]Bitmap을 Mat으로 변환  (0) 2017.01.20
[후기]나홀로 완성하는(?) 유니티 3D 액션게임  (2) 2017.01.04
[C#]JSON 데이터 Deserialize  (0) 2016.12.28
[WPF]WPF의 장점?  (0) 2016.09.13
[C#][STL]STL Converter  (0) 2016.08.02

Newtonsoft.Json를 이용한 코드이다.


Deserialize는 기본적으로 Dictionary를 활용하는 식으로 이용한다.


예를 들어

{

"Test":{

"Kor":{

"Test_0001": "테스트1 입니다",

"Test_0002": "테스트2 입니다",

},

"Eng": {

"Test_0001": "This is Test1",
"Test_0002": "This is Test2",

}

}

}


이런 형식의 JSON이 있다고 하고 여기서 Eng를 추출해보도록 하자



먼저



이렇게 전체 JSON문을 parsing하고 그 이후




이렇게 Eng부분을 별도로 분리하고




이렇게 foreach구문으로 Eng부분을 모두 검색할 수 있다.




특정값을 알고싶다면





이렇게 하면 Eng의 Test_0001의 값을 알아낼 수 있다.


'Programing > C#' 카테고리의 다른 글

[후기]나홀로 완성하는(?) 유니티 3D 액션게임  (2) 2017.01.04
[C#]var와 dynamic  (0) 2016.12.29
[WPF]WPF의 장점?  (0) 2016.09.13
[C#][STL]STL Converter  (0) 2016.08.02
[C#][OpenCV]C#에서 OpenCV를 사용하기  (0) 2016.07.02

일단 안드로이드 스튜디오에 내장된 기능으로 굉장히 쉽게 푸쉬 기능을 구축할 수 있다.


Tools->Firebase 를 눌러 Notifications으로 들어가 시키는대로 따라하면 기초적인 준비는 완료된다.




알림은 Firebase 콘솔에서 Notifications을 선택하여 쉽게 전송할 수 있다.


여기서 메시지를 입력하고 사용자 세그먼트에서 앱을 선택해서 전송해도 좋고 주제를 선택해도 좋다. 주제는 별도로 생성하는 파트는 없고 토픽을 구독하려는 어플리케이션이 있으면 해당 토픽을 자동적으로 생성하는 모양이다. 적용되는데는 시간이 꽤 걸리므로 인내가 필요한듯 싶다.




하지만 Firebase 콘솔에서는 어플리케이션이 켜져있을때 한정으로만 메시지 전송이 가능하기때문에 백그라운드에서도 작동하게 만드려면 API를 사용해야한다.


필자는 가장 익숙한 C#을 사용하였지만 Node.js를 사용하는 사람도 있고, 아마 php로도 되지않을까싶다.


관련 문서: https://firebase.google.com/docs/cloud-messaging/http-server-ref




WebClient클래스를 사용하여 POST형식으로 보내려고 하였으나 Header를 설정하는 부분에서 문제가 발생하여 HttpWebRequest를 사용하였다.


여기서 ContentType과 Authorization는 필수적으로 들어가야한다. Authorization해더가 없는 경우에는 인증 에러가 뜨기 때문에...



서버 키는 Firebase 콘솔에서 프로젝트 설정->클라우드 메시징에 들어가 확인할 수 있다.




해당 기능을 사용하면 푸쉬서버가 없어도 원하는 푸쉬 알림을 보낼 수 있지만 특정 변화에 자동적으로 반응하는 기능을 구현하고싶다면 서버가 필요하지않을까...

결국 문제를 해결하긴했는데 그냥 가장 좋은건 중복id를 사용안하는게 아닐까싶다 ㅎ.........



이 id가 자동으로 추가되는 시스템에서 장점을 하나도 느낄 수가 없다





그냥 xml보다 액티비티를 먼저 읽어들이는건지 아니면 그냥 이름순으로 읽어들이는지는 모르겠지만...아마 이름순으로 읽어들이는쪽이 아닐까 생각된다.




@+id와 @id의 차이도 잘 알아야 하는데 +가 붙은쪽이 새로 선언하는 쪽인데



그러니까 이 멍청한놈은 위쪽 문서에 @id가 있고 아래쪽 문서에 @+id가 있으면 이걸 똑똑하게 처리를 못 한다는것이다.



단순하게 순서대로 문서를 순회하면서 수작업으로 +가 없는곳에 +를 붙여주고 +가 이미 앞에서 붙었으면 +를 빼주는 작업으로 문제를 해결하였다.





비주얼 스튜디오 MFC ID관리도 하다가 가끔 뻑나면 짜증나고 그랬는데 이 부분에서만큼은 MFC가 훠어어어어얼씬 편하고 좋다고 느꼈다...

'Programing > Android' 카테고리의 다른 글

Firebase를 이용한 푸쉬알림 구현  (0) 2016.12.25

일단 알파값을 지정하지않고 DICOM파일을 3D모델로 변경하면 피부부터 시작해서 뼈까지 모든 부분이 표시되기때문에



만약 STL파일등의 3D오브젝트 파일로 해당 파일을 빼내려면 투명화 된 부분의 데이터를 제거하는 작업이 필요하다고 본다.




그리고 STL파일의 특성상 있을수도 있고 아닐수도 있습니다 같은 애매한 상태는 존재할 수 없기때문에 경계선을 명확하게 그어줘야하는데


일단 지금 내가 구현해본 형식 내에선 명확한 경계를 그을 수 없다는 점도 문제. 아마 이 부분은 VTK의 교집합, 차집합, 합집합 등의 기능들을 활용하면 어느정도는 구현할 수 있으리라고 생각한다.



지금도 특정 포인트를 기준으로 알파값과 색을 지정하는 형태니까 일정 범위 내에서 특정 알파값을 가진 부분의 오브젝트를 따로 때내어 복사할 수 있으면 해결할 수 있지않을까 하는 생각




하지만 이미 프리웨어 등으로 풀리고 있는 소프트웨어쪽이 좀 더 성능도 좋고 각 장기간의 색구분도 깔끔하게 되는 편이기때문에 혼자서 아무리 고민해도 더 월등하거나 버금가는 성능의 프로그램은 나오기 힘들겠지...

장점...이라고 말하기보기단 내가 WinForm자체를 그리 많이 접해보질 못했기때문에 사실 따질 부분이 없지만 일단 조악하게나마 만져본 경험과 MFC를 만져본 경험에 비추어봐서 몇개 꼽아보자면


가장 큰 장점은 UI를 구성하는데 거추장스럽지않고 깔끔하게 다룰 수 있다는점. 이 이상 할 말이 없을정도로 UI구성이 쉽고 다루기가 편하다. 물론 익숙해지는데 시간이 좀 걸릴수는 있겠지만 그건 뭘 해도 똑같은거고...


또 하나 더 꼽아보자면 안드로이드 어플리케이션이 이런 방식으로 UI를 구성한다는점. 근데 잠깐 건드려보고 말아서 잘은 모르겠지만 확장성이나 난이도는 WPF쪽이 훨씬 좋고 쉽다. 이클립스에선 Grid를 써서 UI를 구성하면서도 뭔가 만들다 만듯한 기분이 계속 들기도하고...




단점이라면 나같은 경우는 주로 MetroRadiance라는 라이브러리와 Livet이라는 라이브러를 써서 WPF 어플리케이션을 만드는데 사실 이렇게 만들어진 라이브러리가 없으면 접근하기가 꽤나 번거롭다...초창기에는 관련 라이브러리가 없으면 만질수도 없을정도. 지금은 MetroRadiance는 없어도 어느정도 만들 수 있지만 Livet은 아직도 필요하다...


물론 WinForm식의 접근도 가능하기야하지만 View와 ViewModel간의 연계라보기단 그 중간형태의 작업같다는 느낌히 강하게 들기때문에...이런식의 접근으로만 할 수 있는 작업도 존재하기때문에 완전히 무시하기도 힘들고



그리고 정말 빈약하다고 말하면 빈약이라는 단어에게 미안할 정도로 국내 자료가 적다...책이 있긴 있는 모양이지만 진짜 그냥 개론만 적어놓은 느낌이고. 사실 해외 포럼에서도 그렇게 인기있는 항목은 아닌지 검색해봐도 뭐 하나 구현하는데 사람마다 구현방법이 다 다르니;; 뭐 이쪽은 정해진 답이 없다 라는게 거의 언제나 정설로 통하는 부분이지만 학습하는 입장에서는 조금 괴롭다...

'Programing > C#' 카테고리의 다른 글

[C#]var와 dynamic  (0) 2016.12.29
[C#]JSON 데이터 Deserialize  (0) 2016.12.28
[C#][STL]STL Converter  (0) 2016.08.02
[C#][OpenCV]C#에서 OpenCV를 사용하기  (0) 2016.07.02
[C#] C++에서 만든 라이브러리를 C#에서 사용하기  (0) 2016.02.18

아마추어라 더 심오한 기능을 이해하지 못하고 겉면만 핧는 이야기가 될수도 있다고 생각하지만 Git의 가장 좋은 기능은 Commit이라고 생각한다.


특정 부분에서 특정 부분까지 무슨 작업을 했는지 메모를 달아서 기록을 남길 수 있는 부분이 가장 강점인듯 싶다. 비슷한 도구가 있는지는 모르겠지만...




그것 외에도 branch를 분기시켜서 추가기능이나 코드 수정등을 한 다음 본래 master에 merge시키거나


분기를 갈라서 합치지않고 비슷하지만 다른 여러종류의 프로젝트를 하나의 프로젝트 파일 내에서 관리할수있거나 하는 등의 활용법도 좋다고 생각한다. 일반적으로 잘 쓸거같지는 않지만...


Github같은곳에서 보면 협업기능도 많이 강조되는것 같다. 로컬라이징같은 작업을 할때 분업하기도 편하고 잘 모르는 부분에 대해서 잘 아는 사람이 직접 수정을 해서 작업물을 pull해주면 그걸 merge해서 프로젝트를 탄탄하게 만드는 과정도 좋은 부분이라고 생각한다.




다만 단점이라면 기본적으로 cui환경에서 다루어지도록 짜져있어서 그런지 gui환경의 툴로는 완벽하게 제어가 되지않아 cui환경에서의 작업방법도 알아둬야한다는 점이다. 그리고 맨 처음 commit이나 forking merge 등의 기능에 대해 이해하기도 힘들고말이다.


그리고 한번 commit하면 그걸 되돌리는 작업이 꽤나 번거롭고 힘들기때문에 Commit을 할 시점을 잘 골라야 한다는 점도 있다. 물론 VS에선 예전 코드와 현재코드를 같이 볼 수 있으니까 수동으로 되돌리기도 비교적 쉽고 기능 자체로 아예 revert가 가능하니 잘 다루는 사람이라면 크게 문제가 될것은 없다고 생각한다. 



필자는 알려주는 사람도 없고 기초적 지식도 없어서 혼자 Git 가이드를 몇번씩 읽어보고 직접 테스트해가면서 매우 기초적인 작업은 수행할 수 있도록 되었지만 아직도 revert등의 작업이 낮설다. 뭐 하여튼 cui툴도 다룰 줄 알아야 한다는 점이 의외의 장벽이 될 수도 있다고 생각한다.



http://vtk.1045678.n5.nabble.com/Make-3D-Modelling-from-2D-DICOM-td5727316.html




해당 스레드에서는 vtkDICOMImageReader를 사용하라고 되어있지만 아마 해당 클래스는 정상작동을 안할 가능성이 높다. 어떤 파일을 읽어들일수 있는지가 의문일 정도...





뭐 대충 찾아보면 압축되어있는 파일은 읽지못하고 그 Mac에서만 돌릴 수 있는 프로그램으로 풀어준 후에 읽어와야한다는것 같지만


ITK도 해보고 별의 별 짓을 다 했는데 해당 파트는 결국 다 무위로 돌아갔고


찾아낸 간단한 대안으로 GDCM(http://gdcm.sourceforge.net/)이라는것을 사용하여 DICOM이미지를 읽어들일 수 있다. CMake하는데도 손이 덜 가고 빠르게 진행이 된다.






다만 GDCM쪽의 DICOM 리더에서는 폴더째로 읽어들이는 매소드가 포함되어있지 않은 것으로 보여 별도의 파일목록 작성 매소드를 작성해서 작성된 파일 리스트를 복수의 DICOM파일을 읽어들이는 메소드로 넘겨줘야한다.

C#으로 짜여진 간단한 stl파일 변환 프로그램이다.


ASCII형식의 stl파일과 바이너리 형식의 stl파일의 상호 변환이 가능하다.




.Net Framework 4.5.2 기준으로 개발되어있어서 해당 프레임워크의 설치가 필요


STL Converter.zip



VTK라이브러리를 CMake를 이용하여 빌드하는것과 예제 프로그램을 빌드하는것까지는 성공하였으나


예제가 정상적으로 실행이 안되는 경우(포인터 초기화가 안되는 문제)에 대해....





처음에는 CMake 설정을 잘못 잡았나부터 시작해서 여러가지 원인을 생각했었으나


문제는 인터넷에 예제로 올라와있는 VTK버전이 지금의 VTK버전과 다른부분에서 문제가 발생한것이였다.



추측으로는 VTK 기존버전(6.0미만)에서는 모듈의 초기화를 자동적으로 해주는것으로 보이나


6.0이상의 버전에서는 vtk관련 클래스를 사용하기 전에 별도의 define 매크로를 사용해서 모듈초기화를 해줘야 하는것같다.




위와 같은 이유로 예제의 stdafx.h 파일에 include와 define들을 더 추가해줘야한다.



일단 vtk소스에 동봉되어있는 샘플의 stdafx.h파일의 맨 마지막에 해당 줄들을 추가하여 문제를 해결하였다.






문제 해결법 출처:


http://www.vtk.org/Wiki/VTK/VTK_6_Migration/Factories_now_require_defines


http://public.kitware.com/pipermail/vtkusers/2014-July/084426.html

정말 간단하다




NuGet 패키지를 사용하면 끝.



프로젝트의 참조에 오른쪽 마우스 클릭->Nuget 패키지 관리에서 opencv를 검색한 후에 OpenCvSharp-AnyCPU를 설치하면 된다.


c++의 함수에서 대소문자가 바뀐것과 약간 사용법이 바뀐것 빼고는 거의 동일하게 구성되어있다.


함수를 쓸때는


Cv2.함수


이런식으로 쓰면 OK. 그 외 대부분의 것들은 OpenCvSharp. 쪽에 들어가있다.



NuGet 패키지 자체는 C++에서도 사용할수 있는것으로 보이지만 예전에 시도했을때는 제대로 사용하지 못했기때문에 C++쪽에서 NuGet 패키지 사용은 어떻게 굴러가는지는 모르겠다...

C#에서는 바이트를 다루는 클래스가 따로 존재하지만 C++에서는 그런 클래스가 따로 있는것같지는 않다. 검색해보면 다 손수 코드를 짜서 변환해야하는듯


memcpy를 사용한다.





일단은 C#으로 바이너리를 ASCII로 바꾸는부분을 대체하고 있지만 파일 자체를 읽어서 화면에 출력하는 것은 성공적


다만 문제는 시간인데 대략 1분당 8만개의 삼각형을 로드하는 속도라 실제로 이 이미지를 로드하는데도 6분정도의 시간이 소모되는


그리고 그 facet normal인가 뭐 하튼 광원에 대한 고려가 전혀 되어있지않기때문에 윤곽은 볼 수 있지만 디테일한 부분은 전혀 볼수 없는 문제와 축 기준의 회전은 충분히 가능한 부분이지만 아직 자유롭지가 않고 결정적으로 지금은 예제를 따라한 수준이라 카메라를 상하로 이동시키지 못하기때문에 꽤나 제한적인 뷰가 된다.

http://andrew0409.tistory.com/101



http://www.codeproject.com/Articles/2477/Multi-threaded-Client-Server-Socket-Class


찾아보니 일반적인 통신은 http로도 괜찮다고 하던데 채팅 프로그램이나 mmorpg같은 경우에는 소켓 통신이 필요하다고 한다


C를 제외하고 맨 처음 접한 언어가 C#이라서 그런지는 모르겠지만 이 부분이 프로그래밍을 학습하는데 지대한 영향을 끼치고 있다는건 확실한것 같다.


뭐 모든 프로젝트를 더블바이트로 작업하면 대부분의 문제는 해결되지만 비주얼 스튜디오는 기본적으로 유니코드를 권장하는것 같고...




일단 쓰기 더 번거로운 언어라는 생각은 아직도 변하지 않는 부분이지만...쓰다보면 프랑켄슈타인 같다는 느낌을 지울수가없음.

http://kaludin.egloos.com/2461942




추가 선언이 필요

'Programing > C++' 카테고리의 다른 글

[C++] OpenGL과 STL 사용  (0) 2016.05.26
[C++]소켓 통신  (0) 2016.04.06
[C++]Visual Studio 2013 이후버전에서 MySQL 연동하기  (0) 2016.03.28
[MFC][C++]문자열 복사  (0) 2016.03.10
[MFC]COleDBRecordView::OnGetRowset 재정의  (0) 2016.03.09

AWS는 Amazon Web Service의 약자로 아마존에서 운영하는 클라우드 서비스이다.


가입하면 1년동안 프리티어의 서버를 사용할 수 있다고 해서 사용중인데 연습용으로 좋은것 같다.



http://domino.symetrikdesign.com/2010/10/07/how-to-create-a-mysql-workbench-connection-to-amazon-ec2-server/



여긴 우분투를 사용해서 SSH UserName이 우분투이지만 아마존 OS를 사용하는 경우 ec2-user로 유저명을 정해주면 된다

'Programing' 카테고리의 다른 글

[Visual Studio] 알 수 없는 오류입니다 해결법  (0) 2017.04.27
STL 포멧에 대해 메모  (0) 2017.04.18
더블 바이트와 유니코드  (0) 2016.04.04

http://passmeby30.tistory.com/66


라이브러리 참조가 너무 번거롭다...

'Programing > C++' 카테고리의 다른 글

[C++]소켓 통신  (0) 2016.04.06
[C++]static 선언시 주의해야 할 점  (0) 2016.03.30
[MFC][C++]문자열 복사  (0) 2016.03.10
[MFC]COleDBRecordView::OnGetRowset 재정의  (0) 2016.03.09
[C++]DLL 연결  (0) 2016.02.18

예전 책을 보면 strcpy가 자주 보이지만 wcscpy를 쓰는것이 더 좋아보일때가 있다


하지만 MFC에는 CString 이 있으므로 CString으로 변수를 선언한다음 직접 할당해주거나 Format메소드로 문자열을 재선언하는 편이 속편하다.

https://msdn.microsoft.com/en-us/library/7ya51z3f.aspx


무조건 재정의를 해줘야한단다




CRowset* CTapeView::OnGetRowset()


이렇게 쓰면 안되고



CRowset< >* CTapeView::OnGetRowset()


이렇게 써야 정상처리



그리고 지금 예제로 사용하고 있는 책에 문제가 좀 있는데 VS C++ 6에서는 문제가 없겠지만 상위 버전(Visual Studio 2013)에선 문제가 발생함




이렇게 재정의 하도록 예제가 짜여져 있으나 실은



이렇게 작성해야 정상적으로 작동하게 된다.

http://stdesignstar.tistory.com/entry/03-DLL%EC%9D%98-%EC%97%B0%EA%B2%B0

 

 

C#보다 참조가 번거로운것 같다...

+ Recent posts