전체 글

전체 글

    [OpenGL] 도형 선택해서 값 읽어오기

    Issue 도형을 마우스로 클릭하고 어떤 도형을 클릭했는지 값을 알아오고 싶었다. 스크린에 물체를 그릴 때 Projection 모드에서 glOrtho로 물체의 투영 영역을 지정하게되면 피킹값을 잘 받아오지 못했다. Solution 마우스로 클릭한 영역을 얻기위한 GL_SELECT 모드에서 물체가 그려지는 투영값을 동일하게 설정해서 물체를 그리게 된다. 이때 GL_SELECT 모드를 위한 투영값 설정과 그림을 그릴 때 적용하는 투영값 설정이 이중으로 적용된 것이 문제였다. 그래서 Picking을 확인할 때는 그림을 그릴때 투영값을 설정하지 못하도록 했다. void MyView::drawModel(){ //물체를 그리는 함수 if(!pickMode){ //pick할 때는 적용하면 안된다.(pick자체에서 적..

    [OpenGL] 투명 도형 그리기

    glEnable(GL_BLEND); //투명을 사용하기 위한 설정 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.0f, 0.0f, 0.0f, 0.0f); //투명색 glBegin(GL_POLYGON); glVertex3f(0, 0, 0); glVertex3f(0, 10, 0); glVertex3f(10,10, 0); glVertex3f(10, 0, 0); glEnd(); glDisable(GL_BLEND);

    [C++] 식별자 검색 순서

    식별자가 선언된 위치를 검색하는 순서 자신이 속한 블록 범위 상위 블록 범위 가장 최근에 선언된 전역 변수 using 선언과 전역 변수 1. 자신이 속한 블록 범위 int nData(20); //(1) int _tmain(int argc, _TCHAR* argv[]){ int nData(10); //(2) cout

    [C++] 네임스페이스, using, 네임스페이스 중첩, 네임스페이스 다중정의

    네임스페이스namespace란? C++이 지원하는 각종 요소들(변수, 함수, 클래스 등)을 한 범주로 묶어주기 위한 문법 네임스페이스 형식 네임스페이스 블록 내부에 선언하는 변수나 함수들은 모두 명시한 namespace의 이름에 속하게된다. namespace 이름 { //네임스페이스 시작 변수 함수 ... //네임스페이스 끝 } 네임스페이스 선언 예제 아래 예제는 person 네임스페이스에 변수 age, name과 함수 printInfo가 속하게 되는 것이다. namespace person{ int age = 20; std::string name = "domin"; void printInfo(){ std::cout

    [C++] 인라인 함수

    매크로 함수 - #define 선행처리 지시문에 인수로 함수의 정의를 전달함으로써, 함수처럼 동작하는 매크로. - 일반 함수와 달리 단순 치환만을 해주는 것이다. - 함수는 아니다! - 함수를 호출하면 스택 메모리 사용이 증가하고 매개변수 때문에 메모리 복사가 일어난다. 이 때 함수 호출로 인해 오버헤드가 날 수 있기 때문에 이를 극복하고자 매크로를 사용한다. - 문제: 함수가 아니기 때문에 논리적 오류를 발생시키기도 한다, 매개변수에 형식을 지정할 수 없다. 인라인 함수 인라인함수는 매크로의 장점(함수호출오버헤드극복)과 함수(매개변수형식지정)의 장점을 한 군데 모아놓은 것. 본질적으로 함수이므로 매개변수에 형식을 지정할 수 있어 매크로의 단점을 보완해준다. 사용법 함수 원형 앞에 inline이라는 예약..

    [C++] 함수다중정의(오버로딩), 템플릿 함수

    함수 다중 정의 Overloading = 다중 정의 다중정의 : 하나의 함수 이름이 여러 의미를 동시에 갖는 것을 말한다. 함수에서 다중 정의에 영향을 주는 것은 '매개변수'뿐이다. 반환형식만 다른 경우 또는 호출 규칙만 다른 경우는 다중 정의에 해당되지 않는다. 디폴트 매개변수와 다중 정의가 조합되면 발생되는 문제 void TestFun(int a){} void TestFun(int a, int b=10){} //이렇게 다중정의하는 것은 문제가 되지않지만 //"제작자는 오류를 경험하지 않지만 함수 사용자는 오류를 경험할 수 있다." int _tmain(int argc, _TCHAR* argv[]){ TestFunc(5); //호출이 모호해서 컴파일 오류가 발생 //이 코드를 주석처리하면 오류는 발생하지..

    [C++] 디폴트 매개변수

    디폴트 매개변수 함수의 매개변수에 초깃값을 기술 할 수 있다. int TestFunc(int nParam=10){ //디폴트 매개변수 사용. TestFunc(), TestFunc(12) 둘다 호출가능 return nParam; } 매개변수의 디폴트 값을 선언한 함수는 호출자 코드에서 실인수를 생략한 채 호출할 수 있다. 이러한 특성 때문에 C++에서는 절대로 호출자의 코드만 보고 함수 원형을 확정하면 안된다! 호출할 때 함수 매개변수의 왼쪽부터 짝을 맞춘다. 짝이 맞지 않으면 매개변수의 디폴트값을 적용한다. 디폴트 매개변수는 반드시 오른쪽 매개변수부터 기술해야한다. 디폴트 매개변수 사이에 디폴트 매개변수가 아닌 것이 있을 수 없다. 사용 예 #include "stdafx.h" #include int Te..

    [OpenGL] 종횡비 조절 및 물체 형태가 변하지 않게 평행이동

    Issue 1. 물체 종횡비 유지 OpenGL에서 물체를 그릴 때 창의 크기가 바뀌면 물체의 크기가 그에 맞춰 변형이 된다. 창의 크기에 종속되지 않고 물체의 비율을 유지하기 위해서는 변경되는 창의 종횡비에 맞춰서 물체의 종횡비를 설정해줘야한다. Issue 2. 물체 형태가 변하지 않게 평행이동 물체를 평행이동하기 위해서는 OpenGL에서 Translate함수를 사용한다. 물체를 중앙에서 옆으로 이동시키면 이때 관찰자는 그자리 그대로 서서 이동한 물체의 중심을 보기 때문에 물체의 측면을 보게된다. 그러나 보이는 형태가 바뀌지 않게 물체를 옆으로 이동시키고 싶다. 이를 위해 물체를 그릴 좌표 영역을 옆으로 이동시키면 해결된다. Solution 종횡비 유지와 형태가 변하지않게 평행이동하기 위해서 glOrth..

    [MFC] 버튼하나로 창 크기 조절하기

    //다이얼로그에 있는 ^ 버튼 클릭했을 때 열리고 닫히는 기능 CRect rect; GetWindowRect(&rect); if (showSave) { showSave = false; showSaveValueBtn.SetWindowTextA("∧"); rect.bottom -= 105; // 현재 창 크기에서 세로 크기 감소 } else { showSave = true; showSaveValueBtn.SetWindowTextA("∨"); rect.bottom += 105; // 현재 창 크기에서 세로 크기 증가 } MoveWindow(&rect);

    [C++] 소숫점 아랫자리 버리기. 정확하지 않은 실수 연산 해결하기

    Issue 지정된 소숫점 아랫자리를 버리고 출력하려고 했다. 0.60000을 둘째짜리까지 출력하려면 0.60이 나와야하는데 0.59가 나와버렸다. 정확하지않은 실수 자료형 때문에 생긴 문제같다. Solution double n: 연산할 숫자 int valid 변수: 버릴 지점. double multiplier = pow(10, valid); result = floor(n * multiplier) / multiplier; 여기서 문제가 n =0.60000 이고 mutiplier =100 이면 n * multiplier을 하면 599.999가 나온다는게 문제다. 실수 연산에서 문제가 생기는 것으로 보고 n이 정확한 0.6이 아니라서 생기는 문제라고 판단했다. 아주 뒷자리까지 출력해보면 0.6000000000..

    19년식 15ZD 그램 풀스펙으로 SSD, RAM 장착하기

    이번에 19년식 15ZD LG그램 노트북을 풀스펙으로 업그레이드했다. 그램에 최대 지원되는 메모리랑 램이 뭔지 다 찾아보고 구성한 스펙!! SSD: 1T NVMe M.2 SSD PCIe 3.0 - 19년식 15ZD노트북은 PCle 3.0 버전의 NVMe M.2를 지원함 RAM: 32기가 , 메모리 속도 2666MHz, CL19 - 19년식 15ZD노트북은 한 슬롯에 32기가 까지 달수 있고, 클럭속도 2400MHz까지 지원하는데 그 이상스펙을 사용할경우 자동 다운그레이드돼서 돌아간다고함 구매좌표는 아래 더보기에서 더보기 SSD https://smartstore.naver.com/bitfarm/products/8241322544?NaPm=ct%3Dll5po8ew%7Cci%3D480566b9ea66ac4be..

    19년식 그램 15ZD 삼성 1T NVMe M.2 SSD PCIe 3.0 인식 오류

    19년식 그램 15ZD 삼성 1T NVMe M.2 SSD PCIe 3.0 인식 오류

    19년식 15ZD 그램 노트북에서 256 기가 기본 메모리만 쓰다가 저장 공간이 없어 곧 터질것 같아서 1T짜리를 장만햇다. 제품은 아래 링크에서 삿다. 삼성전자 정품 970 EVO Plus NVMe M.2 SSD PCIe 3.0 1TB MZ-V7S1T0BW 노트북 데스크탑용 하드디스크 : 삼성온라삼성전자 정품 970 EVO Plus NVMe M.2 SSD PCIe 3.0 1TB MZ-V7S1T0BW 노트북 데스크탑용 하드디스크smartstore.naver.com SSD를 그램에 끼우는 방법은 유튜브에 '그램 SSD 교체' 라고 검색하면 많이 나온다. 굉장히 단순하다. 잘끼우긴 했는데 내 드라이브에 1T짜리 새로운드라이브가 떠야하는데 안떴다. 해결방법은 LG 게시글에서 찾았다. 다행히 LG 에서 하드디스..

    [C++] 범위 기반 for 문 for(auto n : nList)

    범위 기반 for 문 for문의 반복 횟수가 배열 요소 개수에 맞춰 자동적으로 결정된다. (python처럼 간편하다.) for(auto 요소변수 : 배열이름) 반복 구문; for(int i =0 ; i < len(list) ;i++) 처럼 배열 요소의 개수를 조건식으로 기술할 필요가 없다. 앞으로는 전체 배열 요소에 접근 할 때 범위 기반 for문을 사용할 것!!실수도 줄일 수 있고, 생산성도 향상시킬 수 있다. 사용 예 int aList[5] = {10,20,30,40,50}; //전형적인 C스타일 반복문 for(int i =0;i

    [C++] 참조자 형식 int &n = a;

    참조자 형식 (Reference(주소) 형식) C에는 없는 형식으로 포인터와 구조상 동일. 사용법 반드시 선언과 동시에 변수로 초기화 해야한다. int &변수명 = 참조할변수; 포인터와 비교 //포인터 int * ptr = a; *ptr = 10; //참조자형식 int &rData = a; //변수를 참조한다고 해서 참조자 형식인 것. rData = 10; //참조한 변수와 동일한 변수라고 생각하고 사용하면 된다. //포인터와는 달리 * 연산자를 사용하지 않는다. 처음 어떤 변수와 짝을 이루게 되면 그 짝이 달라지지 않는다. 겉으로 보기에는 전혀 포인터로 보이지 않는다. (값을 변경할 때 일반 변수처럼 사용하기 때문에) 가능하다면 가급적 포인터 대신 참조 형식을 사용하기. 매개변수가 참조 형식으로 되어있..

    [C++] 메모리 동적 할당. new(), delete()

    메모리 동적 할당. new(), delete() C에서의 메모리 동적할당 malloc(), free()를 잊고 new, delete 연산자를 사용하자. 함수가 아닌 연산자이다. 그래서 복잡한 함수를 사용한다는 느낌은 줄어들고 편의성은 높아졌다. new로 생성한 변수에 접근하는 방식은 C와 동일 단일 인스턴스 동적할당, 해제 int *pData = new int; //인스턴스만 동적으로 생성 int *pNewData = new int(10); //생성과 동시에 초기화 *pData = 5; //접근방법은 C와 동일 delete pData; delete pNewData; 배열 인스턴스 동적할당, 해제 int * arr = new int[5]; //객체를 배열형태로 동적 생성 /*값 변경 (C와 동일)*/ fo..

    [C++] auto 자료형

    원래 C에 존재했던 auto 자료형 C에서 auto예약어는 지역 변수 선언에 해당하는 기억 분류 지정자이다. 사실상 아무도 이 예약어를 사용하지 않는다. 어차피 생략하면 auto로 지정되고 변수가 스택을 사용하도록 컴파일 되기 때문. C++11로 변경되면서 auto의 기능이 새롭게 변경되었다. C++의 auto 자료형 초기값의 형식에 맞춰서 자료형이 자동으로 결정된다. int a = 10; int b(a); // int b=a; 와 동일한 코드다 auto c(b); //b의 자료형에 따라 int로 결정된다. C++ 개념 더보기 더보기 Visual Studio C++ 사전 c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++..

    [C++] 변수 선언 및 정의

    변수 선언 및 정의 C스럽게, C++ 스럽게 두가지 경우 다 사용가능하다. C스럽게 정의 int a = 10; C++ 스럽게 정의 int a(10); //int 자료형 인스턴스인 a에 10을 초기값으로 넣어서 생성하는 것 int b(a); // int b = a; 와 동일한 것 C++ 개념 더보기 더보기 Visual Studio C++ 사전 c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용 genius-duck-coding-story.tistory.com

    [C++] 자료형

    자료형 long long 64비트 정수 (컴파일러에 따라 다를 수 있음) char16_t 16비트 문자 (유니코드처리를 위한 자료형) (ex. char16_t a=u'A';) char32_t 32비트 문자 (유니코드 처리를 위한 자료형) (ex. char32_t a=u'A';) auto 컴파일러가 자동으로 형식을 규정해주는 자료형 (ex. auto a=10;) decltype(expr) expr과 동일한 자료형 (ex. int x =10; decltype(x) y =20;) 자료형들을 C의 자료형 수준에서 이해할 수 있지만, auto와 decltype은 완전히 새로운 자료형이다. auto는 기존에 있던 자료형인데 의미가 새롭게 바뀐 경우임 C++ 개념 더보기 더보기 Visual Studio C++ 사전 ..

    [C++] 문자열 데이터 std::string

    문자열 데이터 std::string string클래스의 인스턴스이다. 그러므로 #include 을 선언해줘야한다. char배열과 달리 문자열의 최대 길이를 고려할 필요가 없어 사용하기 편리하다. ( ↔ char name[30]) 코드 중간 아무 곳에서나 변수를 선언할 수 있다. std::string으로 문자열 출력해보기 #include #include int main(){ std::string myStr = "Hello world"; std::cout > strName; //길이 제한 없이 입력을 받는다. std::cout > strName; cout > strName; cout

    [C++] Visual Studio 에서 추가로 사용하는 헤더파일 <stdafx.h>

    Visual Studio 에서 추가로 사용하는 헤더파일 C++을 지원하는 다른 컴파일러에서는 사용하지 않는다.미리 컴파일된 헤더 파일.프로젝트 파일 전체에 적용하고 싶은 선언을 작성할 목적으로 존재하는 파일#include C++ 개념 더보기더보기 Visual Studio C++ 사전c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1. C에서 C++로 문법 전환하기 Chap1. C와는 다른 C++ [C++] Hello world 출력해보기 [C++] 여러 변수 출력하기 [C++] Visual Studio 에서 추가로 사용genius-duck-coding-story.tistory.com