목록컴퓨터 그래픽스 (45)
개발하는 리프터 꽃게맨입니다.
3D 카메라 수정제가 사용하는 3D 카메라 입니다. 카메라의 모델링 행렬로 부터 뷰 행렬을 얻어냅니다.뷰 행렬은 카메라 모델링 행렬의 역행렬이고, 이를 모든 오브젝트에 곱합니다. 이를 뷰 변환이라고 부릅니다. 윈도우 자체는 원점을 기준으로 그릴 것이므로카메라의 시점을 윈도우에 그리기 위해서는, 카메라가 변환된 만큼 월드를 역변환해야 합니다.그러면 카메라의 좌표, 회전, 크기변환 상태가 모두 원상태로 변환되며, 이에 맞추어 다른 물체들도 변환됩니다. 좌표계 설계에 따라서 다르겠지만제가 설정한 좌표계는 양의 Z축 방향에서 바라본다고 생각하고, 렌더링을 수행합니다. 그런데 이러면 카메라의 렌즈랑 마주보는 형태죠 카메라의 형태를 생각하면, 카메라의 후면에 맺힌 영상을 보는 것이 더 직관적일 겁니다. 그래서 ..
12개의 삼각형으로 이루어진 육면체를 그려보았습니다.3D 물체에는 보이는 면과 안보이는 면 2가지가 존재합니다. 보이는 면을 전면보이지 않는 면을 후면이라고 칭합니다. 전면과 후면을 판단해서 후면을 그리지 않는다면, 렌더링 성능이 더욱 향상될 것 입니다.이와같이 후면을 그리지 않는 작업을 백페이스 컬링이라고 합니다. 반시계 방향으로 정의된 삼각형이 있다고 가정합니다. 뷰행렬과 모델링 행렬을 이용해서 만들어진 최종적인 좌표의 경우의 수는 다음과 같습니다. 첫번째로, 변환된 정점을 연결했을 때, 반시계방향으로 그려질 때,두번째로, 변환된 정점을 연결했을 때, 시계방향으로 그려질 때 이때 반시계방향으로 정의된 삼각형만 그려지도록 하면 백페이스 컬링을 구현할 수 있습니다. 삼각뿔의 백 페이스 컬링 과정을..
현재까지 2D 렌더러를 탄탄하게 만들었습니다. 2D 메시 컴포넌트입니다.렌더링 하고자하는 게임 오브젝트에 해당 컴포넌트를 추가하여Mesh2D에 정점과 정점을 잇는 인덱스 정보를 저장하여정점 버퍼와 인덱스 버퍼를 만듭니다. 다음에는 RenderManager 라는 랜더링 코어 객체에 해당 오브젝트를 넘겨주어서 랜더링을 수행합니다. 저는 이 구조가 상당히 마음에 듭니다. 2D 객체를 그리는 시스템을 만들었으니 3D 객체도 만들어보겠습니다. 3D 객체를 만들기 위해서는 2D 시스템에서 사용하던 좌표 시스템의 차원을 한 단계씩 높여줘야 합니다. Vertex는 3차원으로 정의되어야 하고3차원에서 자유로운 선형 변환을 위해 3차원 벡터 및 4x4 정방행렬을 정의해야 합니다. 그러면 또 Vertex3D를 정의해줘..
카메라 + 삼각형 채움 + 색 보간 + 텍스처 매핑
아이디어 세 점이 주어졌을 경우 삼각형을 그릴 수 있습니다.그리고 세 점의 좌표를 시용해서 삼각형을 감싸는 가장 작은 직사각형을 정의할 수 있습니다.이 직사각형이 가지는 좌표는 for문 2개를 순회해서 모두 얻어낼 수 있습니다.그렇다면, 이렇게 얻어낸 좌표를 해당 삼각형이 포함하는지 아닌지 판단하고삼각형 내부에 있는 점만 찍어내면, 색칠될 삼각형을 얻어낼 수 있을겁니다. 삼각형 내부에 있는 점삼각형을 정의해보았습니다. 간단하게 람다 1, 람다 2를 t, s 로 바꿔서 식을 전개해보겠습니다. 어떤 점 Px 가 있고 P3->Px 벡터를 w라고 했을 때벡터 w가 s [0, 1]t [0, 1]s+t [0, 1]에 대해서 정의가 된다면, 삼각형 내부에 있다고 이해할 수 잇습니다. 그렇다면, s와 t의 값을 얻어..