본문 바로가기
728x90

전체 글86

[OpenGL] Z-buffer method 경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다. 게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다. 이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다 ​ ​ ​ OpenGL을 이용하여 2개의 traingle을 그렸을 때 겹치는 부분이 생긴다고 가정하자. 그럼 2개의 Draw과정이 생기는데 이는 무조건 나중에 그린 삼각형이 먼저 그린 삼각형을 덮게 된다. (깊이 정보을 주지않았다는 가정하에) ​ 이러한 깊이 문제를 다루기 위해 왼손좌표계를 사용한다. 왼손 좌표계에서의 깊이(z)는 카메라에서의 거리가 멀어질 수록 값이 커지고, 가까울 수록 값이 작아진다. [-1.0 , +1.0] https://stackoverflow.com/questions/54138412.. 2023. 6. 10.
[OpenGL] Double Buffering 경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다. 게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다. 이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다 ​ ​ Why ?​ Frame buffer는 화면과 1대1 대응관계이다. 컴퓨터가 이미지를 화면에 출력할 때 모두 지웠다 출력을 빠르게 반복한다. 이러한 원리 때문에 이미지가 빠르게 변화하는 상황에서 일부만 업데이트 되거나, 깜빡임 또는 찢어짐 현상이 발생한다. 그래서 하나의 화면을 두고 그림이 다 그려지면 우리에게 보여질 화면으로 넘기는(베끼는) 것이다. ​ ​ ​ How ? 2개의 버퍼를 용도를 다르게 해놓고 완성되면 즉시 버퍼를 바꾸는 개념이다. 2개의 프레임버퍼인 back buffer, front b.. 2023. 6. 10.
[OpenGL] Graphic Pipeline - Programmable Pipeline 경북대 '컴퓨터그래픽스' 강의 백낙훈 교수님의 강의를 듣고 복습하기 위한 게시글입니다. 게시글의 내용은 강의 또는 구글링을 통해 공부하였습니다. 이미지 자료는 출처를 밝히거나 직접 그려 사용하였습니다. ​ 프로그래머블 파이프 라인은 아래 그림과 같은 구조를 가진다. ​ ​ ​ 예전에는 vertext shader, fragment shader 단계에서 모두 shader 개념이 없는 vertex processing, fragment processing 으로 fixed VLSI 칩으로 구현되었다. 이러한 fixed pipeline은 이후 수정이 불가하다는 단점을 가진다. 이후 VLSI 를 shader로 대체해 위와 같은 과정으로 진행된다. ​ 요즘은 모든 단계에서 병렬 처리로 진행된다. shader는 GPU에.. 2023. 6. 10.
c++ 백준_10830_"행렬 제곱" https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net ​ 문제 11444 를 풀고 나서 바로 행렬 제곱이 눈에 보이길래 해결하였다. ​ 근데 문제를 풀 때 자꾸 특정 퍼센트에서 틀리길래 뭐지 싶었는데 제일 처음 원소값으로 1000이 입력되고 만약 B가 1이라면 해당 원소값은 0이 되어야하는데 1000이 그대로 나왔다. ​ 해당 처리를 안해서 몇번 틀렸다. #include #include using namespace std; typedef unsigned long .. 2023. 6. 9.
c++ 백준_2096_"내려가기" https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net 아래에서 위로 올라가며 살펴보았다. ​ 제일 아래 현재 위치와 그 양쪽, 총 3칸을 살펴보며 해당 바로 위층(i-1)의 값과 더했을 때 최소, 최대가 되는 것을 DP 배열에 삽입하였다. ​ 계산에 편리하기 위해 무조건 현재 위치, 현재에서 왼쪽위치, 현재에서 오른쪽 위치를 검사하였다. 그러면 한 행에 총 5칸이 필요하다. ​ 최대값을 구할 때는 전역으로 DP를 뒀으니 자동으로 빈 칸은 0이 들어가 최대값을 구하.. 2023. 6. 9.
c++ 백준_17144_"미세먼지 안녕!" https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net ​ 시키는 대로 하면 되었다. ​ 먼지가 퍼질 때는 하나하나 다~ 퍼지고 난 뒤에! 새롭게 퍼진 먼지를 합쳐야 된다. ​ 그래서 구현 순서대로 1. 먼지 확산 2. 공기청정기 작동 구현했다. ​ * update된 , 먼지가 확산된 것을 저장하는 배열을 따로 만들고 매번 초기화했는데 memset을 사용할 때는 까먹지말자. #include #include using namespace std; int.. 2023. 6. 9.
728x90