본문 바로가기

프로그래밍 -----------------------/C,C++ 팁

MFC에서 Stack Overflow 해결법 내가 만든 프로그램이 친절한 MFC에 의해서 자동으로 꺼져버린 것인지 알고, 알고보니 너무 많은 재귀적 호출로 인한 Stack Overflow 문제였다.. 해결법은, double array[max]; 처럼 배열들을 스택을 사용하게 만들지 말고, malloc이나 new를 사용해서 heap공간을 사용하도록 만들던가... 아니면 지금 내가 소개하려는 것 처럼... MFC의 Project setting을 바꾸어줘서 스택의 공간을 늘리는 방법이 있다. 나의 경우는 배열의 크기가 너무 크다기 보다 너무 많은 재귀적 호출에 의한 Stack Overflow이므로 두번째 방법을 사용했다. (사실은..코드 뜯어 고치기도 귀찮고 두번째 방법이 아주 간단하기 때문이다..;;) 방법은, 메뉴의 'Project' -> 'Sett.. 더보기
아스키 코드의 재미난 연산 출처 http://www.debuglab.com/knowledge/asciiop.html아스키 코드의 재미난 연산 1.요약 ASCII 코드는 총 126가지의 코드를 미리 정해놓은 문자 테이블입니다. 그런데, 이 ASCII 코드를 살펴보면 몇가지 재미난 점을 발견할 수 있습니다.(다들 아시나요? ^^) 2.본문 (1) 숫자 --> 문자로 변환 우리가 사용하는 숫자는 10진수로 0부터 9까지의 수를 사용하여 모든 값을 표현하는 것입니다. 그런데, 실제로 0이라는 문자는 아스키 코드표에서는 30h(편의상 16진수에는 'h'를 붙이도록 합니다.) 즉, 48 이라는 값을 가리키고 있습니다. 그리고, 1은 31h 또는 49입니다. 그런데 자세히 보면 다음과 같은 연관성을 찾을 수 있습니다. 숫자 아스키 코드 0 3.. 더보기
아스키 코드표 아스키 코드표 출처 : http://www.jasko.co.kr/lesson/ascii.html 10진수 16진수 8진수 2진수 ASCII 10진수 16진수 8진수 2진수 ASCII 0 0×00 000 0000000 NULL 64 0×40 100 1000000 @ 1 0×01 001 0000001 SOH 65 0×41 101 1000001 A 2 0×02 002 0000010 STX 66 0×42 102 1000010 B 3 0×03 003 0000011 ETX 67 0×43 103 1000011 C 4 0×04 004 0000100 EOT 68 0×44 104 1000100 D 5 0×05 005 0000101 ENQ 69 0×45 105 1000101 E 6 0×06 006 0000110 ACK 70.. 더보기
컴파일 속도 빠르게 하는 방법. 컴파일옵션 /MP 컴파일 속도 빠르게 하는 방법. 컴파일옵션 /MP 드뎌 찾았습니다. ㅋㅋ 매번 빌드할때마다 걸리던 그 엄청난 시간이 거의 절반수준으로 떨어지더군요. 기존에 1개만 수행되던 cl.exe가 위 옵션을 사용하면서 쿼드코어를 사용하는 제 pc에서 여러개가 뜨더랍니다. ㅋㅋ 아마 단일cpu에서는 확인은 못해봤지만 안될듯 싶구요. 멀티프로세서 사용하시는 분들은 다 될겁니다. 참 이건 비쥬얼스튜디오 2005 SP1하고 2008부터 되는거라니까 확인하시구요 ^^ 원문 http://msdn.microsoft.com/en-us/library/bb385193.aspx 더보기
SetRenderState 정리 D3DRS_ZENABLE D3DZBUFFERTYPE 열거형의 1 개의 멤버로서의 깊이 버퍼링 스테이트. z 버퍼링을 유효하게 하려면 D3DZB_TRUE, w 버퍼링을 유효하게 하려면 D3DZB_USEW, 깊이 버퍼링을 무효로 하려면 D3DZB_FALSE 를 각각 설정한다. D3DPRESENT_PARAMETERS 구조체의 EnableAutoDepthStencil 멤버에 TRUE 를 설정해 스텐실이 스왑 체인과 함께 생성 되고 있는 경우, 이 렌더링 스테이트의 디폴트값은 D3DZB_TRUE, 그렇지 않은 경우는 D3DZB_FALSE 이다. D3DRS_FILLMODE D3DFILLMODE 열거형의 1 개 또는 복수의 멤버. 디폴트값은 D3DFILL_SOLID 이다. D3DRS_SHADEMODE D3DSHADE.. 더보기
2바이트케릭터 <-> 1바이트케릭터 문자열 변환 http://blog.daum.net/crexy/6893583 에서 불펌.. -_-ㅋ;; ------------------------------------------------------------------------------------------ GDI+를 사용하게 되면 문자는 기본적으로 유니코드를 사용하게되어 있다. 그렇기 때문에 ANSI코드를 직접 입력하게 되면 문자가 깨져나오는 불상사가 생기게 된다. 그렇기때문에 #define UNICODE 메크로를 사용하여 코드가 유니코드를 사용하게 해야하는데 이는 아직 익숙치 않은 것이라 ANSI를 UNICODE로 변환하여 사용하는 방법을 사용한다. 물론 익숙하지 안은 것이외에도 반드시 코드변환을 사용해야 할 경우는 있다. 텍스트 파일에 있는 문자를 읽어 .. 더보기
[D3DBASIC] 평면의 방정식 간단한 정리 어떤 평면이 바라보는 법선 벡터 a,b,c와 평면상의 임의의 점 x, y, z와 원점 0,0,0 이 있을 경우 평면 방정식은 ax + by + cz + d = 0 과 같다. 여기서 x, y, z는 평면에 존재하는 무수히 많은 점들중 한개의 좌표 값이며, 이 점 x, y, z로 vector va 와 vector vb를 만들고, va, 와 vb를 외적 cross product 연산을 해서 나온 평면의 법선 벡터 a, b, c 를 연산 하면 된다. 여기서 중요한 점은 법선 벡터는 nomalize된 vector 라야 한다. d = -(ax + by + cz) d3d 함수는 D3DXPLANE *D3DXPlaneFromPoints( D3DXPLANE *pOut, CONST D3DXVECTOR3 *pV1, CONST.. 더보기
평면의방정식을 이용한 면<->점 충돌채크 // 노멀값을 구하기 위한 벡터 빼기 순서 // 루프를 돌려서 처리하고 싶기에 이렇게 인덱스를 만듬 // 면 0 1 2 3 4 5 WORD wIndex[] = { 2, 3, 4, /* | */ 5, 7, 6, 3, 4, 2, /* | */ 7, 6, 5}; // 폴리곤의 법선을 구한다. D3DXVECTOR3 vV1,vV2; float d1,d2,dir; int nCnt=0; int nCollCount=0; // 충돌한 면의 카운트 for(j=0; j=3) nCnt=1; // 세점에서 법선 구하기 vV1 = vPoint[ wIndex[j] ] - vPoint[ nCnt ]; vV2 = vPoint[ wIndex[j+6] ] - vPoint[ nCnt ]; D3DXVec3Cross(&vNormal[j],&v.. 더보기
내적이란거 내적, 처음 봤을 때는 이런 해괴한 걸 어따 쓰냐라고 생각했었는데 공부를 해가면서, 특히 다른 사람들이 내적을 활용하는 것을 접하면서 내적이란 거 정말 대단한 녀석이구나;라는 것을 매번 느끼게 된다. (나란 녀석은 사소한 것에 잘 감동한다. ㅎㅎ) 이번에 놀란 내용은 내적을 이용하여 점과 평면과의 거리를 구하는 것이다. 흔히 알고 있는 공식은 위와 같다. 이래저래 복잡하다. 하지만 내적을 사용할 경우에는 평면 위의 임의의 점 하나와 평면 노멀, 그리고 거리를 알고자 하는 점만 있으면 된다. 주의할 점은 여기서 노멀은 노멀라이징되어야 한다. 거리 = |(다른점-평면위의점)·평면노멀| 글쎄, 내적을 공부한 사람이라면 누구나 알만큼 단순하다. 아니, 이미 이론적으로는 알고 있을터. 단지 그것을 실제로 활용하는.. 더보기
윈도우에서 사용하는 문자 코드에 대한 이해 컴퓨터의 기본 용도가 문자열 처리를 필두로한 데이터 처리라는 점에는 이견이 없을 것이다. 그럼에도 불구하고 개발자들이 문자열 처리에 대한 문제를 간과하기 쉬운 것은 이와 관련된 내용을 다루는 책이 별로 없기 때문이다. 따라서 이번호의 주제를 '기본기를 다지자'로 정했다. 이 글에서는 컴퓨터 내부에서 다루는 문자열 처리를 비롯해 이와 관련된 함수에 대해 살펴보겠다. 지난 3월호에 첫 글이 나간 후 많은 독자들이 메일을 보내왔는데, 이번 글을 쓸 때 그 의견들을 많이 참고했다. 메일의 대부분은 한글과 영문 문자열의 처리 문제와 유니코드 처리, 다국어 문자의 표현에 관련된 것이었는데 한결같이 제대로 정리된 자료가 없다는 내용이었다. 물론 MSDN에 자료가 있긴 하지만 사람들이 주로 관심을 갖는 내용이 아니고,.. 더보기
디버깅을 위한 콘솔창 활용 닷넷 2005다. 먼저 코딩하고 있는 프로젝트의 속성 창을 띄운 후, 링커->시스템->서브 시스템 항목을 찾고 윈도우로 되어 있는 서브 시스템을 콘솔로 바꾼다. 그리고 아래와 같이 코딩한다. #include "stdafx.h" #include "GameCore.h" CGameCore GameCore; INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT nCmdShow ) { GameCore.ProcessStart(hInst, E_Graphics_RESOLUTION::RESOL_640_480, E_Graphics_COLORFORMAT::FMT_A8R8G8B8, false); return 0; } void main() { WinMain(GetModuleH.. 더보기
평면의 방정식, 평면의 공간적 해석 그래픽스에 관해 공부하면서 자주 부닥치게 되는 평면의 방정식! 맨나말 부딪힐 때마다 관련서적을 가볍게 훓고 넘어가는 터라 다음에 다시 평면의 방정식과 부딪히면 항상 또 책을 펼치고 마는 비생산적인 행위가 반복된다. 이번엔 좀 제발 외우고 넘어가야 겠다. 3차원에서 평면은 평면의 방정식으로 해석이 가능하다. 이 방정식등을 이용하여 공간상의 교차판정, 평면의 Normal, 평면의 전후면 판별등이 가능하다. 평면의 방정식은 다음과 같다. ax + by + cz + d = 0 즉, a, b, c는 평면안에 속해 있는 임의의 세 점을 선분으로 이은 두 벡터의 외적을 구한 후, 그 외적으로 부터 도출된 벡터의 세 성분이 되며, d는 위에서 언급했던 두 벡터의 내적으로서 구할 수 있다. Tip))) 1. 위에서 외적.. 더보기
알파값 살아있는 텍스쳐, 단색으로 찍기 // D3DDevice8::SetRenderState 의 D3DRS_TEXTUREFACTOR 속성에 값을 // D3DCOLOR 로 넣어주시면 그 색으로 텍스쳐가 찍힙니다. 알파값은 살아 // 있지요 g_pDevice->SetRenderState(D3DRS_TEXTUREFACTOR , D3DCOLOR_XRGB(255, 0, 0)); g_pDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_TFACTOR); g_pDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG2); // 일반적인 텍스쳐 찍기로 되돌아 가려면.. g_pDevice->SetTextureStageState(0, D3DTSS_COLO.. 더보기
알파 블렌딩 불펌자료;;;; -_-;;;;; 출저까먹음... 블렌딩 디폴트 = FALSE - D3DRS_ALPHABLENDENABLE 렌더 상태를 TRUE로 하여서 사용한다. 255 불투명, 0 투명 //Enable alpha blending g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE); //Destination이 멀리 있는것(원래있는것) ex.유리창이 소스라고 하면 유리창 너머 보이는 것이 dest //즉 현재 그릴 것이 source.. 더보기
두점의 선형보간 공식 POSITION = POSITION1 * (1.0 - TWEENFACTOR) + POSITION2 * TWEENFACTOR 매우 간단합니다. 설명 POSITION -> 보간된 결과값 POSITION1 -> 처음 값 POSITION2 -> 나중 값 TWEENFACTOR -> 처음값과 나중값의 보간될 위치 (0.0f ~ 1.0f 사이의 값) ● ━ ━ ━ ━ ● P1 ↑ P2 두점의 중간인 이곳의 위치를 알고 싶다.. 그럼 TWEENFACTOR -> 0.5f 를 넣어주면 됩니다. 더보기
DirectX 9.0 풀모드에서 다이알로그박스 뛰우기 자료 출처 : 뽈따구님 홈피 작 성 자 : 뽈따구님 안녕하세요 볼따구 입니다. 풀화면에서 가끔 Dialog를 뛰어야 하는 경우가 생깁니다. 9.0 이상 버젼에서는 DX차원에서 지원을 합니다. 하지만, 몇가지 제안이 있기 때문에 실제로 적용시키는걸 잘 모르는분들이 있어서 한번 올려봅니다. ;;; D3D디바이스를 생성할때 D3DPRESENT_PARAMETERS 인자중에 몇가지를 셋팅을 해야 합니다. [1] SwapEffect = D3DSWAPEFFECT_DISCARD; [2] BackBufferFormat = D3DFMT_X8R8G8B8; 또는 D3DFMT_X1R5G5B5, D3DFMT_R5G6B5 [3] Flags |= D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; 위에 옵션을 셋팅해서 .. 더보기
win32에서 mfc메노리누수체크 기능 사용하기 #define CRTDBG_MAP_ALLOC #include #include 위 3개의 헤더 파일을 추가 한뒤에 어플리케이션이 종료 되는 마지막 위치에 _CrtDumpMemoryLeaks(); 이것을 적어 놓으면 어디 어디 메모리 어느 정도 샌다고 알려 준다. 더보기
DirectX 펑션들 [출처] : DirectX 9.0 한글판 도움말 ver 4.70 - by dexk Color관련 D3DXColorAdd - 2 개의 색값을 덧셈 해, 새로운 색값을 생성 한다. D3DXColorAdjustContrast - 색의 콘트라스트값을 조정한다. D3DXColorAdjustSaturation - 색의 채도값을 조정한다. D3DXColorLerp - 선형 보간을 사용해 색값을 생성 한다. D3DXColorModulate - 2 개의 색을 블렌드 한다. D3DXColorNegative - 있는 색값에 대한 부의 색값을 생성 한다. D3DXColorScale - 색값을 스케일링 한다. D3DXColorSubtract - 2 개의 색값을 뺄셈 해, 새로운 색값을 생성 한다. 기타 D3DXFloat16To.. 더보기
billboard에서 D3DXMatrixInverse() Y축 고정된 빌보드 카메라의 Y축 회전값 -> D3DXMATRIX의 _11, _13, _31, _33 m_vEye = *pvEye; m_vLookat = *pvLookat; m_vUp = *pvUp; D3DXVec3Normalize( &m_vView, &( m_vLookat - m_vEye ) ); //카메라의 위치부터 바라보는목표점까지의 거리... D3DXVec3Cross( &m_vCross, &m_vUp, &m_vView ); //m_vCross카메라위치의 x축벡터 D3DXMatrixLookAtLH( &m_matView, &m_vEye, &m_vLookat, &m_vUp); D3DXMatrixInverse( &m_matBill, NULL, &m_matView ); m_matBill._41 = 0.0f.. 더보기
행렬(Matrix) 이번시간은 DirectX 3D 에 필요한 기초 수학 마지막 시간입니다. 오늘 배운 이외에의 것들은 모두 강좌 중 그때 그때 필요할때마다 언급하는 방식으로 하겠습니다. 여지껏 배운, 삼각함수나, 벡터와 같은 것들은 게임 프로그래밍에 있어서 중요한 개념임에는 틀림 없습니다. 그러나, 삼각 함수나, 벡터의 경우, 굳이 삼각함수와 벡터를 거치지 않고도 다른 알고리즘들이 많이 존재합니다. (물론, 삼각함수나 벡터로 처리하는 것보다 훨씬더 복잡해지는 알고리즘도 있습니다;;) 그러나 오늘 이 시간에 배우게 되는 행렬 개념은 3D 프로그래밍에 있어서 반 강제적 필수 요소라고 할수 있습니다. 즉, 행렬을 알지 못하면 3D 프로그래밍은 힘들다. 라고 말해도... 90%는 맞는 말입니다. 실제로 대부분의 D3DX API들은.. 더보기
3D 세계를 구성하는 필수 요소들 | [펌]DirectX 3D 세계를 구성하는 필수 요소들 저 자 : 김익중 출판일 : 2003년 10월호 뒤통수에 꽂혀지는 시선을 애써 무시한 채 난 퇴근했다. 최근에는 매일 칼퇴근을 지향하고 있지만 자의 반 타의 반이 맞을 것이다. 집에는 버티가 빨리 돌아오길 바라고 있으니까. 내 사정을 모르는 팀원들은 애인이라도 생겼냐며 놀리지만 곧장 집에서 꼬마 녀석에게 당하는 내 사정을 알리는 없다. 그러고보니 어제 버티 앞으로 무슨 파이프가 배달됐다. 버티는 그 파이프 안으로 자신을 넣어달란다. 3D 파이프라인? 도대체 그게 뭐지? 3D 공간 위에 정점, 모든 것들의 시작점 3D 세계로 진입을 무사히 마쳤다면 본격적으로 폴리곤을 만들어 볼 차례가 왔다. 설명한대로 모든 폴리곤과 메시는 정점으로 이뤄졌다. 해당 정점들이 세 개가 놓여진.. 더보기
DirectX 용어집 DirectX 용어집 A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 알파 (alpha) 컴퓨터 그래픽스의 분야에서, 픽셀의 투명도를 나타내는 기준. 알파가 최대치의 픽셀은 불투명, 0 의 픽셀은 투명, 그 중간의 값의 픽셀은 반투명이다. 알파 블렌드 (alpha blend) 픽셀색과 알파값의 양쪽 모두를 사용하는 2 개의 이미지를 혼합해, 결과의 픽셀의 색을 결정하는 방법. 이것에 의해, 양쪽 모두의 이미지가 블렌드 된 상태로, 이미지를 다른 이미지 위에 렌더링 할 수 있다. 2 개의 픽셀을 혼합 하는 경우, 양쪽 모두의 픽셀의 색성분이 각각의 알파값에 의해 스케일링 된다. 다음에, 아래의 픽셀이 위에의 픽셀의 알파값의 역수를 사용해 스케일링 되어 최종적.. 더보기
4*4행렬 회전 * source: Real-Time Rendering by Tomas Akenine-Möller and Eric Haines * reference: http://www.realtimerendering.com/ 1. 기본 회전 행렬: 좌표 축 회전 2. 오일러(Euler) 변환 3. 임의축 회전: Ronald Goldman, Graphics Gems, cf) Steve Cunningham, Graphics Gems 더보기
내적 외적 내적 [內積, inner product] 네이버 백과사전 스칼라곱(scalar product)이라고도 한다. 영(零)벡터가 아닌 두 벡터 x,y의 크기 |x|,|y|와 x,y가 이루는 각 θ의 cos과의 곱 |x||y|cos θ를 x,y의 내적이라 하고, x ·y 또는 (x,y)로 나타낸다. 즉, x ·y=(x,y)=|x||y|cos θ x=0 또는 y=0일 때는 x ·y=0이라 정한다. 기하학적으로는 [그림]의 |x|cos θ와 |y|를 곱한 값이 된다. 내적의 성질로는 ① 교환법칙 x ·y= y ·x, ② 1개의 스칼라 α에 대하여 결합법칙 (αx) ·y=α(x ·y), ③ 배분법칙 x ·(y+x)=x ·y+x ·x, ④ 벡터의 수직조건, x와 y가 수직이면 x ·y=0이 성립한다. 또, x ·x= .. 더보기
ase 애니부분 파싱하다가 .. -_-;; 불펌했다 ㅎㅎ;; 안녕하세요 볼따구 입니다. ASE파일에 대한 정보는 아마, 질문&답변 공지에 있는 예전 네띠앙 게시판 백업 받아놓은곳에서 검색하면 몇가지 힌트를 얻지 않을까 싶네요 답변을 다시하는것보다 찾은 내용이 더 좋아서 올립니다.;; 양해 부탁요 TICKPERFRAME 에 대한 설명입니다. -------------------------------------------------------------------------------------- *CONTROL_POS_SAMPLE 0 -2.3379 12.9396 0.0000 *CONTROL_POS_SAMPLE 160 -8.5171 14.5598 0.0000 *CONTROL_POS_SAMPLE 320 -14.5706 16.1447 0.0000 *CONTROL_POS_S.. 더보기