분류 전체보기 (308) 썸네일형 리스트형 [C++] 포인터 비트 단위 이해 short sArr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int* pI = (int*)sArr; int iData = *((short*)(pI + 2)); cout [C++] 전역 변수, 정적 변수, 외부 변수 전역 변수 전역 변수는 함수 밖에 선언된 변수이다. 이름대로 전역에 영향을 끼치기 때문에 #include로 포함한 헤더파일의 같은 이름의 전역 변수가 있다면 중복 처리가 되어 링크 과정에서 오류가 발생한다. 정적 변수(static) 정적 변수는 말 그대로 정적이어서 본인의 영역에서 움직이지 않는다. 전역 변수처럼 다른 파일에 영향을 끼치지 않고 전역 변수가 선언된 파일에만 영향을 끼친다. 그러므로 전역 변수처럼 중복 때문에 오류가 발생하지 않는다. 그리고 함수 내부에서 선언하면 그 함수 안에서만 사용할 수 있지만 데이터 영역에 저장되어 함수의 호출 스택이 종료되어도 데이터 영역에 데이터가 남는다. 그렇다면 전역 변수를 쓰면 되지 무엇 때문에 정적 변수를 쓰는걸까? 아이러니하게도 함수 내부에서만 사용할 수.. [백준] 1753번 - 다익스트라 최단경로 가중치가 존재하는 정점들의 최단경로를 구해야 한다. 나는 블로그에 기록한 적이 있는 다익스트라 알고리즘을 이용했다. #include #include #include #include #include #include #include #include #include using namespace std; void Dijikstra(int here); int vertex, ganseon; int start; //비용, 도착정점 vector adjacent[20001]; int main() { cin >> vertex >> ganseon; cin >> start; for (int i = 0; i > u >> v >> w; adjacent[u].push.. [백준] 1707번 - 이분 그래프 판별 이 문제를 풀기 위해서는 이분 그래프를 알아야 한다. 위 그림은 간선이 여러개 있지만 모든 간선들은 빨간색 정점과 초록색 정점으로 이어져있다. 이렇게 모든 간선들이 다른 색의 정점으로 이어진 형태의 그래프가 이분 그래프이다. BFS, DFS 두 방식 모두 풀 수 있는데 지금까지 BFS를 많이 사용해서 DFS를 사용해 봤다. int main() { cin >> cases; for (int i = 0; i > vertex >> ganseon; adjacent.resize(vertex); visited.resize(vertex); for (int j = 0; j > n1 >.. [백준] 2206번 - 벽 부수고 최단 경로 찾기 BFS를 이용한 최단 경로를 찾는 문제이다. 그런데 벽을 부술 수 있는 한번의 기회가 있다. BFS 탐색을 할 때 벽을 부숴버리면 그 노드로부터 파생된 next 노드부터 더 이상 부수면 안된다. 그래서 노드 역할을 하는 Pos 구조체에 broken 이라는 bool형 변수를 추가한다. int nSearch() { q.push(Pos{ 1,1 }); while (q.empty() == false) { pos = q.front(); q.pop(); if (pos.x==m&&pos.y==n) return discovered[pos.y][pos.x][pos.broken] + 1; for (int i = 0; i < 4; i++) { Pos next = pos + front[i]; if (!CanGo(next)) .. [DX12] Animation 2D에서 애니메이션은 프레임마다 그림을 새로 그려 재생했을 때 움직이는 것처럼 보이게 만든다. 하지만 3D에서도 그런 방식을 채용하기에는 무리가 있다. 왜냐하면 수많은 정점들을 가지고 있는 Mesh들이 있는데 그것의 정점들을 하나하나 다 바꿔야 한다면 말도 안되게 데이터가 늘어날 것이다. 그래서 Skinning이라는 것을 이용한다. Skinning은 뼈대를 만들어 피부(정점)가 뼈에 붙어 뼈와 같이 움직인다. 뼈들은 계층 구조를 이루고 부모 뼈가 움직이면 자식 뼈도 움직인다. 즉 자식 뼈 기준에서 좌표가 변하지 않아도 부모 뼈 기준에서 좌표가 변할 수 있으므로 뼈마다 자신의 좌표계를 가지고 있다고 볼 수 있다. 자식뼈의 local 좌표계에서 부모뼈의 local좌표계로 올라가다보면 가장 최상위 부모의 lo.. [DX12] Picking 스타크래프트에서 유닛을 화면을 클릭해서 선택할 수 있는데, 사실 이것은 굉장히 신기한 것이다. 왜냐하면 2차원 화면을 클릭하는데 3차원 공간의 물체를 선택할 수 있는 것이기 때문이다. 그래서 물체를 선택하기 위해 raycast를 이용한다. 만약 중앙 지점을 클릭한다면 카메라 위치부터 중앙 지점까지 광선을 쏴서 물체에 히트 됐는지 체크한다. 그러기 위해서는 Screen부터 역으로 거슬러 올라가야 한다. Screen에서 Clip Space(NDC)로 바꾸려면 화면 해상도 크기 만한 화면을 (-1,-1) ~ (1,1)인 좌표로 바꿔야 한다. 위 그림의 식으로 바꿀 수 있다. (0,0) 집어 넣으면 (-1,1)이 나온다. NDC에서 View로 바꾸는 것은 View에서 NDC로 바꾸는 것을 생각했을 때 역으로 곱.. [DX12] Terrain Terrain은 Tessellation을 이용할 수 있는 대표적인 예시이다. Terrain은 배열처럼 무수히 많은 삼각형들의 모임이다. Terrain을 저장하는 법은 정점 전부를 저장하는 것보다 높이 값을 저장하는 방법을 이용한다. Terrain은 x축, y축 규격이 일정한 배열처럼 되어있기 때문이다. 그래서 높이 맵을 이용하는데 정점마다 높이 값을 Texture에 저장한다. shared_ptr Resources::LoadTerrainMesh(int32 sizeX, int32 sizeZ) { vector vec; for (int32 z = 0; z < sizeZ + 1; z++) { for (int32 x = 0; x < sizeX + 1; x++) { Vertex vtx; vtx.pos = Vec3(s.. 이전 1 ··· 15 16 17 18 19 20 21 ··· 39 다음