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);
}
}