새소식

인기 검색어

게임 개발/그래픽스

2차원 애니메이션

  • -

void Rasterization::Render(vector<vec4> &pixels) {

    // 그래픽카드(GPU)의 특징
    // 1. GPU가 훨씬 빠릅니다. 가급적 GPU 사용
    // 2. CPU->GPU 복사가 느립니다. 한 번 넣어두고 반복 사용
    // 3. GPU->CPU 복사는 더 느립니다.

    // 태양 그리기
    this->vertexBuffer.resize(sun.vertexBuffer.size());
    for (size_t i = 0; i < sun.vertexBuffer.size(); i++) {
        this->vertexBuffer[i] = sun.vertexBuffer[i];
    }

    this->indexBuffer = sun.indexBuffer;
    this->colorBuffer = sun.colorBuffer;

    // 현재 버퍼로 삼각형 하나씩 그리기 (아래 for루프는 여러번 사용됨)
    for (size_t i = 0; i < this->indexBuffer.size(); i += 3) {
        DrawIndexedTriangle(i, pixels);
    }

    // 지구 그리기
    this->vertexBuffer.resize(earth.vertexBuffer.size());
    for (size_t i = 0; i < earth.vertexBuffer.size(); i++) {
        this->vertexBuffer[i] = RotateAboutZ(
            earth.vertexBuffer[i] + this->distSunToEarth, this->earthAngle);
    }

    this->indexBuffer = earth.indexBuffer;
    this->colorBuffer = earth.colorBuffer;

    for (size_t i = 0; i < this->indexBuffer.size(); i += 3) {
        DrawIndexedTriangle(i, pixels);
    }

    // 달 그리기
    this->vertexBuffer.resize(moon.vertices.size());
    for (size_t i = 0; i < moon.vertices.size(); i++) {
        this->vertexBuffer[i] = RotateAboutZ(
            RotateAboutZ(moon.vertexBuffer[i] + this->distEarthToMoon,
                         this->moonAngle) +
                this->distSunToEarth,
            this->earthAngle);
    }

    this->indexBuffer = moon.indexBuffer;
    this->colorBuffer = moon.colorBuffer;

    for (size_t i = 0; i < this->indexBuffer.size(); i += 3) {
        DrawIndexedTriangle(i, pixels);
    }
}

 

'게임 개발 > 그래픽스' 카테고리의 다른 글

쉐이더 개념  (0) 2023.11.08
깊이 버퍼 (Depth buffer / z-buffer)  (0) 2023.11.07
2차원 변환  (0) 2023.11.07
원 그리기  (0) 2023.11.07
삼각형 레스터화  (0) 2023.11.05
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.