전체 글 118

EC2 인스턴스를 활용한 서버 구축 및 외부 접속 작업

AWS에서 EC2 인스턴스 머신을 임대하고, 도메인을 구매해서 외부 접속이 가능한 간단한 채팅 서버를 구현해보았다 EC2 서버머신  Client1 Client2    UI 작업을 아예 안해서 솔직히 채팅 프로그램이라고 하기는 좀 그렇지만 어쨌든 AWS EC2 를 활용하면서 도메인을 통한 퍼블릭 IP를 뽑아내서 외부 접속을 가능하게 한 데에 의미가 있는 것 같다

공부/그 외 2024.07.14

Picking을 위한 Screen 공간 -> 뷰 공간으로 역변환

Reference https://mycom333.blogspot.com/2013/07/picking.html?m=0 Picking 마우스 혹은 기타 입력 장치로 모니터 화면의 좌표를 지정하면 3D 세계에 있는 오브젝트를 선택할때 사용된다. 화면의 좌표는 2D, 세계는 3D인 경우 오브젝트의 선택 방법을 만들어야 한다. 먼저 mycom333.blogspot.com 6.6 Picking - Essential Mathematics for Games & Interactive Applications Second Edition https://www.slideshare.net/QooJuice/picking-129456487 Picking Picking 쿠재아이 김재경 www.slideshare.net https://..

포워드 렌더링(Forward Rendering) vs 디퍼드 렌더링(Deferred Rendering)

포워드 렌더링 물체를 그리고 그 물체에 대한 라이팅을 적용하는 순서로 렌더링. N개의 광원과 M개의 물체가 있는 씬에서 NxM번의 드로우 콜이 필요하다. 그래서 물체가 많을 때에는 성능 저하가 심하다 디퍼드 렌더링 포워드 렌더링을 사용함으로써 생기는 성능 저하를 방지하게 위해 멀티 렌더 타겟(MRT)를 지원하는 경우 사용할 수 있다. N개의 광원과 M개의 물체가 있는 씬에서 N+M번의 드로우 콜이 필요 과정 1. 모든 물체에 대해 화면 해상도 크기의 렌더 타겟에 물체 고유의 색상(라이트를 적용하기 전 색상을 의미. Material 자체의 Diffuse, Emmisivem, Ambient, Specular 색상), 깊이 값, 노말 벡터 등을 저장 2. 똑같은 크기의 다른 렌더 타겟에 Light를 누적시킨 ..

remove와 remove_if

template ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& val); template ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p ); 제목에서부터 알 수 있듯이 소개할 remove와 remove_if 함수는 특정 원소를 지워주는게 아니라, 3번째 인자 뒤에 존재하는 3번째 인자에 해당하지 않는 값으로 덮어써서 3번째 인자를 뒤로 몰아줄 뿐이다. 따라서 찾은 값을 지우고 싶다면 반드시 erase함수를 한번 더 호출해줘야 한다. 찾은 값을 뒤의 값으로 덮어 써..

공부/C || C++ 2022.09.30

계산 셰이더(Compute Shader)

계산 셰이더(Compute Shader) DirectX가 제공하는 프로그램 가능 셰이더 중 하나 렌더링 파이프 라인 외부에 따로 존재한다 => 그럼에도 화면에 렌더링하지 않고도 GPU 자원에 읽고(Read) 쓰는게(Write) 가능하다 병렬적 알고리즘 구현에 용이하다 => GPGPU 프로그래밍에 유용하다 계산 셰이더의 출력 결과를 렌더링 파이프라인에 다시 바인딩 할 수 있다 GPGPU(General Purpose GPU) 프로그래밍 GPU를 비그래픽 분야에 응용하는 것. 장점 : 많은 양의 데이터를 병렬적으로 처리할 수 있다 ex) 파티클 시스템 단점 : 그래픽 연산과 달리 GPU의 연산 결과를 다시 CPU로 보내야 한다(물론 GPU를 통한 연산으로 보는 이득이 더 크다) 지금은 계산 셰이더로 하는 계산..

상수 버퍼, 구조화 버퍼, D3D11_BUFFER_DESC

상수 버퍼 : CPU에서 write해서 GPU로 보내주면 GPU에서는 Read만 가능 구조화 버퍼 : CPU에서 접근 가능 여부를 설정해줄 수 있으며, 이에 따라 바인딩해줘야 하는 자원 뷰(Resource View)가 다르다. 사용자 정의 구조체로 구성할 수 있으며, 대용량 버퍼를 셰이더로 넘겨줘야 할 때 적합 D3D11_USAGE enumeration 설명 D3D11_USAGE_DEFAULT GPU Read & Write -> RWStructuredBuffer에 사용 D3D11_USAGE_IMMUTABLE Only GPU Read(CPU Access, GPU Write 불가) D3D11_USAGE_DYNAMIC CPU Write, GPU Read만 가능 -> 상수 버퍼와 StructuredBuffer에..

함수형 프로그래밍(Functional Programming)

함수형 프로그래밍이란? 순수 함수들로만 조합해서 프로그램을 완성하는 프로그래밍 패러다임. 여기서 순수 함수란 내부 상태를 갖지 않아서 같은 입력에 대해서 항상 같은 출력을 보장하는 함수 함수형 프로그래밍의 특징 및 장단점 불변성을 추구 불변성을 지향하는 프로그래밍 패러다임이다. 즉 변경 가능한 상태를 최대한 제거하려고 하는 언어. 다른 말로 순수 함수를 지향하는 프로그래밍 언어라고 하기도 하는데, 순수 함수란 위에서 언급했듯이 내부 상태를 갖지 않아서 같은 입력에 대해 항상 같은 출력이 보장되는 함수이다. 또 다른 표현으로는 side effect가 없는 함수라고 한다. side effect가 없는 함수의 예시로는 삼각 함수가 있다. 삼각 함수는 내부 상태가 없으며, 같은 입력이면 항상 같은 출력을 보장한..

공부/그 외 2022.09.26

C++ std::list vs std::vector

vector list 원소를 contiguous memory에 저장 -> cache friendly할 것임 원소를 non-contiguous memory에 저장 내부적으로 동적 배열로 구현 내부적으로 doubly linked list로 구현 default size가 있으며 그 default size를 넘어갈 때 추가 할당을 위한 비용이 크다 default size가 없다 원소 하나 저장하는데 원소 크기만큼만 필요 원소 하나 저장하는데 원소 크기와 더불어 next, previous 포인터에 대한 메모리도 필요 Random access가능 doubly linked list로 구현되어 있어서 Random access가 불가능해서 iterator로 순회해야함 Reference: https://www.educba..

공부/C || C++ 2022.09.26

std::sort와 list::sort는 왜 따로 있을까?

std::vector는 std::sort로 정렬되지만 std::list처럼 전용 sort함수가 없다. 반대로 std::list는 전용 sort가 있지만 std::sort는 사용할 수 없다. 그러면 왜 std::list는 std::sort를 사용할 수 없을까 알아봤다 stackoverflow를 찾아보니 std::sort는 랜덤 엑서스가 가능한 std::vector나 std::deque만 사용 가능하다고 한다. 그래서 당연하게도 연관 컨테이너(Associative Container)에도 사용이 불가능하다 std::sort는 quick sort, heap sort, Insertion sort를 조합한 알고리즘인 Intro sort를 사용해서 내부적으로 구현되어 있다. std::list::sort는 구현에 따라..

공부/C || C++ 2022.09.25