분류 전체보기 (308) 썸네일형 리스트형 [그래픽스] Row-Major vs Column-Major 그래픽스에서 벡터와 행렬을 표현할 때 두가지 방식으로 표현할 수 있다. Row-Major(열 기준)와 Column-Major(행 기준)이다. 벡터를 표현할 때 첫번째처럼 행대로 늘어놓은 것이 벡터를 Row-Major로 표현한 것이고, 열로 세워놓은 것이 벡터를 Column-Major로 표현한 것이다. 벡터에 행렬을 곱할 때 Row-Major과 Column-Major별로 순서를 다르게 해줘야 한다. Row-Major은 벡터*행렬 순, Column-Major은 행렬*벡터 순. 행렬의 특성 때문에 순서는 다르지만 결과식은 같다. 하지만 잘 보면 곱해주는 행렬도 조금 다르다. 행렬을 표현할 때 Row-Major에서 벡터에 곱하는 행렬은 Column-Major과 전치행렬 관계이다. 행렬을 곱하는 순서가 다르기 때.. [그래픽스] Blinn Phong으로 lighting 계산하기(halfway vector) vec3 ComputeDirectionalLight(Light L, Material mat, vec3 normal, vec3 toEye) { // 계산에 사용하는 lightVector는 directional light가 향하는 방향의 반대 vec3 lightVec = -L.direction; float ndotl = glm::max(dot(lightVec, normal), 0.0f); vec3 lightStrength = L.strength * ndotl; // Luna DX12 책에서는 Specular 계산에도 // Lambert's law가 적용된 lightStrength를 사용합니다. return BlinnPhong(lightStrength, lightVec, normal, toEye, mat); .. [그래픽스] Perspective Projection 비율 문제 해결 지금까지 3차원의 물체를 2차원 좌표로 변환하기 위해 z 좌표를 없애버렸다. 이것을 Orthographic Projection(직교 투영)라고 하는데 이러면 원근감을 표현할 수 없다. 원근감을 표현하기 위해서는 Perspective Projection(원근 투영)을 이용해야 한다. 화면을 90도 돌려서 옆으로 봤을 때 그림이다. 원근감을 표현하기 위해 시점과 정점을 이었을 때 그 선 과 화면이 만나는 점에 해당 정점을 그리게 된다. 화면에 찍히는 정점의 좌표는 z축은 0, x와 y좌표는 비례를 이용해 위 그림의 식을 이용해 구할 수 있다. 그런데 그냥 이렇게만 좌표를 구하면 정점 내부의 픽셀들이 정상적으로 보이지 않는데, 현재는 정점 내부 픽셀을 무게 중심 좌표계를 이용해서 표현하는데, 3차원의 물체에서.. [그래픽스] 쉐이더(Shader) 개념 쉐이더는 픽셀의 색을 결정할 때 필요한 것 정도로 알고 있었다. 좁은 의미에서는 가상 공간에서 물체들을 현실처럼 음영처리를 하고 색을 표현할 수 있게 해주는 것을 쉐이더라고 한다. 하지만 현대 그래픽스에서는 그 의미가 확장되어 GPU에서 작동하는 여러 프로그램들을 일반적으로 쉐이더라고 한다. DirectX에서는 Vertex Shader와 Pixel Shader가 있다. for (size_t i = 0; i vertexBuffer.size(); i++) { VSInput vsInput; vsInput.position = mesh->vertexBuffer[i]; vsInput.color = mesh->colorBuffer[i]; vsInput.uv = mesh->uvBuffer[i]; auto.. 23. 05. 26 - 알파 블렌딩 vs 알파 테스트 알파 테스트 알파 테스트는 반투명이라는 개념이 없으며 기준 값보다 그리려는 픽셀의 알파 값이 더 클 경우에만 그린다. 깊이 테스트 또한 현재 픽셀의 깊이보다 큰 값은 그리지 않음으로써 가까이 있는 물체가 먼 물체를 가리는 것을 표현하는데, 그 원리와 비슷하다. 깊이 테스트보다 알파 테스트가 우선되어 알파 테스트를 통과한 픽셀들이 깊이 테스트를 하게 된다. 알파 블렌딩 알파 블렌딩은 알파 테스트처럼 기준값에 따라 표현하고 말고를 딱딱 나누는게 아니라 색을 섞는다는 개념이다. 반투명한 유리 뒤에 물체가 있다면 유리에 그 물체의 색이 희미하게 보일 것이다. 이런 것들은 알파 블렌딩으로만 표현이 가능하다. 반투명한 유리를 blend 객체, 그 뒤 물체를 nonblend 객체라고 할 때 nonblend 객체를 먼.. 23. 05. 25 - 정점 그리기 래스터라이즈 픽셀의 색을 최종 결정하는 단계가 아닌 정점 정보를 기반으로 픽셀의 정보를 만들어내기 시작한 것이다. 래스터라이즈 후 만들어진 픽셀을 픽셀 쉐이더를 통과시켜 픽셀의 색을 결정한다. 정점 버퍼의 생성 Vertex Buffer은 정점들을 담는 버퍼이다. CreateVertexBuffer함수로 만들 수 있다. HRESULT CreateVertexBuffer( UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pHandle ); Length - 정점 버퍼의 사이즈로, 정점 하나의 크기 * 정점 개수로 구할 수 있다. Usage - 0으로하면 버텍스 버퍼를 정적으로 생성한다.. [백준] 14002번 - LIS 구하는 다른 방법 https://cppking.tistory.com/220 기존에 LIS 문제에 대해 작성한 글인데 여기서는 특정 숫자부터 시작해서 끝까지 증가하는 수열을 셌을 때 길이를 cache에 저장했었다. 이 방법은 재귀를 사용하는데 계산이 많아지면 시간 초과 오류가 발생하므로 다른 방법도 알고 있어야 한다. https://cocoon1787.tistory.com/455 [C/C++] 백준 14002번 - 가장 긴 증가하는 부분 수열 4 (LIS) #include #include #include using namespace std; int N, A[1001], len; int index, tmp; int dp[1001]; vector v; int main() { cin >> N; for (int i = 1; i >.. 23. 05. 24 - 좌표 변환 로컬 -> 월드 기존에 로컬 좌표에서 월드 좌표로 변환할 때 월드 변환 행렬을 크기 X 자전 X 이동 X 공전 X 부모로 외웠다. 하지만 이번에 월드 좌표로 변환하는 다른 방법을 알려주셨다. 4x4 행렬에서 1행은 x축, 2행은 y축, 3행은 z축, 4행은 이동한 좌표를 의미한다. 그래서 x축 회전값을 1행에, y축 회전 값을 2행에, z축 회전 값을 3행에, 이동한 좌표를 4행에 넣는다. 그리고 크기는 4x4의 11,22,33번째 요소라고 오해하는 경우가 있는데, 각 축의 크기는 각 행의 길이다. (x축의 크기의 경우 첫번째 행의 길이) 월드 -> 뷰 월드 좌표로 변환한 후에는 카메라가 보는 시점으로 좌표를 전환해야 한다. 이것을 뷰 스페이스라고 한다. 그러기 위해서는 카메라가 좌표계의 원점에 있어야하.. 이전 1 ··· 6 7 8 9 10 11 12 ··· 39 다음