전체 글 55

OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문 Chapter 01 서론

컴퓨터 그래픽스컴퓨터를 이용하여 영상(image)을 생성하는 작업프레임(frame)컴퓨터가 생성하는 영상움직이는 장면을 묘사하기 위해서는 조금씩 변화하는 연속적인 프레임을 스크린 상에 빠르게 보여주면 된다.연속적인 프레임들은 실시간(real-time)에 만들어질 수 있는데, 실시간 그래픽스의 대표적인 예는 게임실시간 그래픽스의 성능은 1초당 몇 프레임을 만들어낼 수 있느냐인 frames per seoncd(fps)로 측정된다. ex) 게임이 1초당 60개의 프레임을 생성할 경우 60 fps영화의 경우는 비실시간 그래픽스, 실시간 그래픽스와 비실시간 그래픽스에 사용되는 기법은 상당히 다르다. 1.1 컴퓨터 그래픽스 제작 단계5개의 단계로 구성첫 세 단계인 모델링(modeling), 리깅(rigging), ..

OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문

OpenGL ES모바일 기기를 위한 그래픽스 표준스마트폰의 화면 전체는 OpenGL ES를 사용해 생성된다.OpenGL ES는 OpenGL의 부분 집합이므로, 이 책은 OpenGL 교과서로 쓰기에 문제 없다. 참고자료medialab-ku/openGLESbook: Introduction to Computer Graphics with OpenGL ES (github.com) GitHub - medialab-ku/openGLESbook: Introduction to Computer Graphics with OpenGL ESIntroduction to Computer Graphics with OpenGL ES. Contribute to medialab-ku/openGLESbook development by cr..

12. 템플릿과 표준 템플릿 라이브러리(STL)

12.1 클래스 템플릿템플릿함수 템플릿, 클래스 템플릿C++의 템플릿을 이용하면 함수나 클래스를 정의할 때 특정 데이터 형을 사용하는 대신 범용형을 사용할 수 있다.함수 템플릿이나 클래스 템플릿은 여러가지 데이터 형에 대해서 함수 정의나 클래스 정의를 생성할 수 있다. 템플릿 장점과 제네릭 프로그래밍템플릿 장점함수 코드의 재사용높은 소프트웨어의 생산성과 유용성템플릿 단점포팅에 취약컴파일러에 따라 지원하지 않을 수 있음컴파일 오류 메시지 빈약, 디버깅에 많은 어려움제네릭 프로그래밍generic programming일반화 프로그래밍이라고도 부름제네릭 함수나 제네릭 클래스를 활용하는 프로그래밍 기법C++에서 STL(Standard Template Library) 제공, 활용보편화 추세Java, C# 등 많은 ..

공부/C++ 2024.06.06

11. 가상함수와 추상클래스

11.1 가상함수상속 관계에서 함수를 중복하는 경우 가상 함수와 오버라이딩가상 함수(virtual function)virtual 키워드로 선언된 멤버 함수virtual 키워드의 의미동적 바인딩 지시어컴파일러에게 함수에 대한 호출 바인딩을 실행 시간까지 미루도록 지시class Base{public: virtual void f(); // f()는 가상 함수}; 함수 오버라이딩(function overriding)파생 클래스에서 기본 클래스의 가상 함수와 동일한 이름의 함수 선언, 내부 로직 빼고는 완전히 동일해야 함기본 클래스의 가상 함수의 존재감을 상실시킴파생 클래스에서 오버라이딩 함수가 호출되도록 동적 바인딩함수 재정의라고도 부름다형성의 한 종류  오버라이딩과 가상 함수 호출 오버라이딩: 파생 클래..

공부/C++ 2024.06.02

10. 상속

10.1 상속 개념C++에서의 상속(Inheritance)C++에서의 상속이란?클래스 사이에서 상속관계 정의객체 사이에는 상속 관계 없음기존의 클래스가 가진 기능을 이어받아서 새로운 클래스를 정의하는 것기본 클래스: 상속을 해주는 클래스, 일반적인 특징을 제공파생 클래스: 상속을 받는 클래스, 일반적인 특징 + 구체적인 특징- 기본 클래스의 속성과 기능을 물려받고 자신만의 속성과 기능을 추가하여 작성기본 클래스에서 파생 클래스로 갈수록 클래스의 개념이 구체화다중 상속을 통한 클래스의 재활용성 높임다른 클래스를 상속받아서 새로운 클래스를 정의할 때, 기존의 클래스에 구현되어 있는 기능은 새로운 클래스에 다시 구현할 필요가 없다. 상속의 표현 상속의 목적 및 장점간결한 클래스 작성기본 클래스의 기능을 물려받..

공부/C++ 2024.05.27

9. friend와 연산자 중복

9.1 C++에서의 friendC++ friendfriend 함수클래스의 멤버 함수가 아닌 외부 함수전역 함수, 다른 클래스의 멤버 함수friend 키워드로 클래스 내에 선언된 함수: friend 함수라고 부름클래스 정의 안쪽에 friend 키워드를 쓰고 함수의 선언을 적어 줌.클래스의 모든 멤버를 접근할 수 있는 권한 부여friend 선언의 필요성클래스의 멤버로 선언하기에는 무리가 있고, 클래스의 모든 멤버를 자유롭게 접근할 수 있는 일부 외부 함수 작성 시항목실제 세계에서의 친구프렌드 함수존재가족 X, 외부인클래스 외부에 작성된 함수, 멤버가 아님자격친하면 가족 구성원으로 인정 받을 수 있음,  자기거 뭐 만져도 되는 수준 ex) 하이킥 객식구클래스의 멤버 자격 부여, 클래스의 모든 멤버에 대해 접근..

공부/C++ 2024.05.16

8. 함수와 참조, 복사생성자

8.1 객체전달과 참조'값에 의한 호출'로 객체 전달함수를 호출하는 쪽에서 객체 전달객체 이름만 사용함수의 매개 변수 객체 생성매개 변수 객체 생성매개 변수 객체의 공간이 스택에 할당호출하는 쪽의 객체가 매개 변수 객체에 그대로 복사됨매개 변수 객체의 생성자는 호출되지 않음 (복사 생성자가 실행됨)함수 종료매개 변수 객체의 소멸자 호출값에 의한 호출 시 매개 변수 객체의 생성자가 실행되지 않는 이유는? (복사 생성자 말하는 것이 아님)호출되는 순간의 실인자 객체 상태를 매개 변수 객체에 그대로 전달하기 위함 '값에 의한 호출' 방식으로 함수가 호출되는 과정매개 변수 객체 c 생성될 때는 복사 생성자가 실행됨  '값에 의한 호출'시에 생성자와 소멸자의 비대칭 실행매개변수로 받은 c에서 생성자가 실행되지 않..

공부/C++ 2024.05.14

7. 여러가지 객체의 생성방법

7.1 객체배열과 객체포인터객체 배열 및 포인터의 생성 및 사용객체 배열 선언 가능기본 타입 배열 선언과 형식 동일객체 배열 정의 시 따로 지정하지 않으면 항상 디폴트 생성자로 초기화Circle circleArraay[3]; // 디폴트 생성자로 초기화 객체 배열의 초기화배열의 각 원소 객체당 생성자 지정하는 방법{ } 안에 생성자 나열Circle circleArray[3] = {Circle(10), Circle(20), Circle()};- circleArray[0] 객체가 생성될 때, 생성자 Circle(10) 호출- circleArray[1] 객체가 생성될 때, 생성자 Circle(20) 호출- circleArray[2] 객체가 생성될 때, 생성자 Circle() 호출 객체 배열 생성시 디폴트 생성..

공부/C++ 2024.05.14

6. 접근지정자, const 객체, static 멤버

6.1 접근 지정자접근지정자캡슐화의 목적객체 보호, 보안C++에서 객체의 캡슐화 전략객체의 상태를 나타내는 데이터 멤버(멤버 변수)에 대한 보호중요한 멤버는 다른 클래스나 객체에서 접근할 수 없도록 보호외부와의 인터페이스를 위해서 일부 멤버는 외부에 접근 허용멤버에 대한 3가지 접근 지정자private: 디폴트동일한 클래스의 멤버 함수에만 제한함클래스 밖에서 직접 접근 불가protected클래스 자신과 상속받은 자식 클래스에만 허용public모든 다른 클래스에 허용, 클래스 밖에서 직접 접근 가능class Sample{private: // private 멤버 선언protected: // protected 멤버 선언public: // public 멤버 선언};접근 지정자해당 클래스의 멤버함..

공부/C++ 2024.04.18