중괄호 등을 통해서 코드를 작성할 때 중괄호가 [] 이렇게 두개 자동으로 생성되는데요. 이외에도 '' 등 두개씩 자동으로 만들어줘서 코드를 작성하는데는 편리한데 'LEE' 등 코드를 쓰고 EE에서 '를 넘어 가기 위해 방향키를 눌러줘야 하는 불편함이 있습니다. 혹시 빠르게 작성하기 위해 단투키 같은게 별도로 있을지 문의드립니다
유니티에서 회전행렬을 확인 해보고자 출력을 했을 때. 이렇게 출력을 하였습니다. Transform을 해당 값으로 맞춰놓고 작업을 하였는데 Log 값은 이렇게 출력되었습니다. 여기서 의문점인경우가 Z축 회전 행렬을 적용하면 C -S 0 0 S C 0 0 0 0 0 1 0 0 0 1 이 적용이 되어야 하는데 Log 값으로 출력되는것을 보면 Sin값 적용부분에서 C -S S C 가 아닌 C S -S C 로 적용되는걸 알 수 있는데 왜 이렇게 값이 나오는 것인지 궁금합니다. (부호가 왜 바뀌어서 나오는지 궁급합니다.) X축 , Y축 , Z축 동일하게 출력을 해 보았으나 모두 다 같습니다...
SwapChain에 대해서 제대로 알고있는게 맞는지 개념 확인좀 부탁드립니다. SwapChain 사용 이유 SwapChaine을 생성할시 프론트버퍼와 백버퍼가 생성이되고 프론트버퍼에 있는 데이터가 모니터로 복사가되고 백버퍼에 다음 장면을 렌더링 하는식으로 돌아가게 된다. 이렇게 하는 이유는 버퍼에서 모니터로의 비트 데이터 복사 속도가 매우 느리기 때문에 버퍼를 하나만 쓰다간 모니터에 모든 버퍼의 데이터가 복사되기 전에 먼저 다음 프레임의 비트 데이터가 버퍼에 갱신되어서 모니터에 이전 프레임의 비트 데이터가 복사되던 도중 갑자기 갱신된 현재 프레임의 비트 데이터 복사될수도 있기 때문이다. SwapChain Present 동작 원리 비트 데이터를 전부 화면에 복사한 프론트버퍼를 가리키는 포인터와 현재 프레임의 비트 데이터로 갱신된 백버퍼의 포인터가 서로 가리키고 있는 버퍼를 교체하면서 화면 복사와 다음 프레임 데이터 갱신을 이어나가게 한다. SwapChain을 만들때 BufferCount를 1개로 설정해주던데 이거는 백버퍼의 개수이고 프론트 버퍼는 개수를 지정해줄 수 없고 자동으로 한개만 생성된다
안녕하세요 ConstantBuffer에 관련되어 강의를 듣는도중 질문이 3가지 정도 생겼습니다. VertexBuffer에 있는 내용을 직접 변경해서 다시 랜더링하기 위해선 처음 설정할때 GPU에서 초기화하고 읽기 전용으로만 생성했기때문에 VertexBuffer를 다시 생성하고 GPU로 다시 복사해줘야 한다고 말하셨는데 GPU에서 읽기, 쓰기 둘다 가능한 D3D11_USAGE_DEFAULT 타입으로 생성해준 뒤 GPU내부에 VertexBuffer를 다시 생성할 필요가 없이 쓰기 작업만 해주면 안되는 건가요? 1번 경우가 어떤 이유때문에 안될것이지만 왜 저렇게 하면 안될까 이유가 궁금해서 쓴 것이고 VertexBuffer를 ReadOnly로 설정하고 Offset을 더해주어 모델링이 움직일때 이러한 개념으로 생각해도 되나요? 우선 현재 렌더링 되고있는 Enemy 100마리가 존재하고 100마리 전부의 위치를 각기 다르게 수정해준다고 가정. 2-1. VertexBuffer를 통해 위치 정보를 직접 수정하는 경우 첫 번재, 현재 VRAM에 100마리 만큼의 모델링 정보가 있는 상태에서 100마리 만큼의 위치변환 정보만 전송해주는 방법. 두 번째, CPU가 GPU로 정보를 보내줄때 아예 그냥 100마리만큼의 모델링 정보 + 100마리 만큼의 위치변환 정보를 전부 전달해주는 방법. 이 있는데 첫 번째 경우로 한다하면 VRAM에 100마리 만큼의 모델링 정보를 감당할 메모리가 존재하지 않아 불가능하고 두 번째 경우로 한다면 보내주는 용량이 너무 많아 전송 시간이 너무 오래 걸리기 때문에 힘들다라고 이해했습니다. 그래서 제가 이해해본 강사님께서 말한 방식이 2-2 방법인데 2-2. ConstantBuffer를 통해 위치 정보를 간접 수정하는 경우 CPU에서 GPU로 정보를 보내줄때 100마리의 위치 정보만 보내주고 VRAM에 존재하는 하나의 모델링에 100개의 각기 다른 위치 정보를 더해주어 렌더링함으로써 C++에서 l-value 하나에 여러 상수를 더하면서 여러 r-value를 쓰듯이 사용하는 방법. 이 경우를 통해 1개의 모델링과 100개의 위치변화 정봅만 있으면 100개의 Enemy를 렌더링 할 수 있다 라고 이해했습니다 혹시 이게 맞나요? 마지막 질문입니다 Update 함수에서 memcpy를 사용해서 subResource.pData에 들어온 데이터를 통해 constantBuffer의 상수 데이터를 변경시킨다고 알고 있는데 이 함수 내용에선 직접적으로 constantBuffer에 subResource.pData의 데이터를 할당하는 부분이 없는데 어디서 할당이 되는 건가요? 혹시 몰라서 subResource.pData와 constantBuffer.Get()의 포인터 정보도 찍어봤는데 서로 다른 곳이였어서 deviceContext에서 자동으로 알아서 전달해주는 건가요? 제가 궁금한게 생기면 못 넘어가는 성격이라 질문이 길어서 죄송합니다.
RenderBegin()과 RenderEnd() 사이의 렌더링 파이프라인 단계를 거쳐서 다 그리고 나면은 _swapChain→Present함수 호출을 통해 ‘고속복사’가 발생한다고 강의에서 말씀하셨는데 조금 이해가 안되었던 부분이 매 틱마다 RenderBegin() → RenderingPipeLine → RenderEnd()를 거치게 되는 버퍼가 _swapChain의 front buffer ↔ back buffer로 순서가 왔다 갔다 바통터치 하듯이 바뀌면서 렌더링 파이프라인이 진행되는 것인가요? 아니면 전면버퍼는 모니터 화면에 계속보여주고 backbuffer가 매틱마다 RenderBegin() → RenderingPipeLine → RenderEnd()거쳐서 다 그려진 완성물(보여줄 데이터)을 front Buffer에 ‘고속 복사’를 하는 방식인가요? 문서를 보면 포인터로 빠르게 front buffer, back buffer를 왓다 갔다 한다는데 햇갈리네요…
애니메이션 보간 결과물이 너무 어색해 생각해보니 각 키프레임 데이터에서 꺼내온 SRT를 보간 한 후에 애니메이션 트랜스폼을 결정해줘야 의도처럼 되더라구요. 근데 애니메이션의 Transform을 SRV로 만들어 셰이더로 던져줘서 보간 계산을 할 수 있는 적절한 위치를 모르겠습니다. 셰이더에서 하기에는, BONE INDEX를 처음부터 돌면서 현재 프레임의 Transform을 구하는 동일한 과정을 vertex마다 계속 하게되고, CPU에서 처리하기에는 텍스처를 사용하는 의미가 퇴색되는 것 같아 질문드립니다. Transform을 Texture화 하면서 정확한 보간을 할 수 있는 방법이 있나요
안녕하세요. 이번에 신규가입 얼리버드 25% 할인으로 DirectX11 강의를 구매해서 수강 중인 학생입니다. 강의를 들어보니 Windows API와 STL 부터 선행이 필요하다고 생각이 들어 [게임 프로그래머 입문 올인원] 강의도 수강하려고 했는데 할인 기간이 종료되었더군요... 혹시 [게임 프로그래머 입문 올인원] 할인쿠폰을 받아 수강할 수는 없는 지 문의드립니다.
안녕하세요 저는 강사님 강의로 공부하고 파이썬으로 코테를 준비하고 있습니다. 저와 같은 상황에 계신분들과 공유하고 싶어 글을 올립니다. 파이썬 풀이에서 부족한 부분 알려주시면 수정하겠습니다.~ import sys sys.setrecursionlimit(10 ** 6) N, M = map(int, sys.stdin.readline().split()) MAX = 1000 + 10 graph = [[False for in range(MAX)] for in range(MAX)] visited = [False for in range(MAX)] for in range(M): x, y = map(int, sys.stdin.readline().split()) graph[x][y] = True graph[y][x] = True def dfs(idx): visited[idx] = True for j in range(1, N + 1): if not visited[j] and graph[idx][j]: dfs(j) cnt = 0 for i in range(1, N + 1): if not visited[i]: dfs(i) cnt += 1 print(cnt)
강의를 보다 렌더링 될때 입력될 Vertex 데이터가 그래픽 카드 내부에 있는 VRAM 내부에 생성된다는 사실을 알게되었니다. 그래서 궁금한게 생겼는데 혹시 Swap Chain이 만들어질때 생성되는 백 버퍼들또한 VRAM 내부에 만들어지는 건가요? 아니면 RAM에 만들어지는 건가요?
강의를 듣고 있는 도중 질문이 하나 생겼습니다 강의 16:05 부분입니다. 강사님께서 CreateInputLayout을 하기 위해 이전 작업으로 D3D11_INPUT_ELEMENT_DESC라는 구조체를 만드셨고 내부의 요소로 UINT AlignedByteOffset; 이러한 변수가 있었습니다. 강의에서 강사님께서 이 부분은 변수가 시작되는 지점을 적는 변수라고 알려주시고 Color가 시작되는 지점이 12Byte라고 하셨는데 이 D3D11_INPUT_ELEMENT_DESC라는 구조체로 설명하려하는 것이 이 전에 선언해두었던 struct Vertex { Vec3 position; Color color; }; 라는 구조체였다면 구조체의 메모리 패딩에 따라 제일 큰 변수의 메모리 크기씩 영역이 쪼개져서 16Byte씩 끊어지니깐 position은 0 ~ 12구간 그리고 12 ~ 16 구간은 메모리 패딩으로 인해 비어져 있고 16 ~ 32까지가 color가 있는 구간으로 알고있었습니다 그래서 제가 잘못 생각하고 있는건가해서 12대신 16을 넣어봤는데 정상적인 색이 안나오지 않더라고요. 제가 개념을 잘못 알고있는건가 아니면 제대로 알고 있는데 이 부분만 특수한 케이스로 12라고 입력이 된건가를 잘 모르겠어서 개념을 확실히 잡고 가야된다고 생각해서 질문 드립니다 혹시 어디가 잘못된 건지 알려주실 수 있으신가요?
완전탐색 강의 마지막 문제 1090번 문제 풀이 방법에 의문이 생겨서 질문 올려봅니다. 강의에서는 우리의 집 중에서 한 곳에 모이면 된다고 풀이를 하셨는데, 예시에 나온 4 15 14 15 16 14 15 16 15 4명이 모이기 위한 최적의 장소는 (15,15)입니다. 백준에서도 이것이 정답 좌표이고. 그래서 혹시 제가 1번 2번 3번 아이디어를 이해하는데에서 잘못 이해한 부분이 있을까 싶어 질문을 올립니다. (15 14) (15 16) (14 15) (16 15) 중에 하나에 모인다는 말이 아닌것인가요?
tessilation 을 통해서 displacement mapping 을 좀 복잡한 mesh 에 적용을 해봤는데 gpu 가 갈리는 소리가 나서요. 아무래도 삼각형 개수가 기하급수적으로 늘다보니 gpu load 가 클거 같은데 tessilation 이 실제로 필요사양이 높은가요? 그리고 현업에서도 tessilation 사용하는데 제약이 많은지 궁금합니다.