-
-
Save ashuatz/fde778e98f9dba9fac0e91fe54c1e03d to your computer and use it in GitHub Desktop.
5 week assignment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "Precompiled.h" | |
#include "SoftRenderer.h" | |
#include <random> | |
using namespace CK::DD; | |
// 격자를 그리는 함수 | |
void SoftRenderer::DrawGizmo2D() | |
{ | |
auto& r = GetRenderer(); | |
const auto& g = Get2DGameEngine(); | |
// 그리드 색상 | |
LinearColor gridColor(LinearColor(0.8f, 0.8f, 0.8f, 0.3f)); | |
// 뷰의 영역 계산 | |
Vector2 viewPos = g.GetMainCamera().GetTransform().GetPosition(); | |
Vector2 extent = Vector2(_ScreenSize.X * 0.5f, _ScreenSize.Y * 0.5f); | |
// 좌측 하단에서부터 격자 그리기 | |
int xGridCount = _ScreenSize.X / _Grid2DUnit; | |
int yGridCount = _ScreenSize.Y / _Grid2DUnit; | |
// 그리드가 시작되는 좌하단 좌표 값 계산 | |
Vector2 minPos = viewPos - extent; | |
Vector2 minGridPos = Vector2(ceilf(minPos.X / (float)_Grid2DUnit), ceilf(minPos.Y / (float)_Grid2DUnit)) * (float)_Grid2DUnit; | |
ScreenPoint gridBottomLeft = ScreenPoint::ToScreenCoordinate(_ScreenSize, minGridPos - viewPos); | |
for (int ix = 0; ix < xGridCount; ++ix) | |
{ | |
r.DrawFullVerticalLine(gridBottomLeft.X + ix * _Grid2DUnit, gridColor); | |
} | |
for (int iy = 0; iy < yGridCount; ++iy) | |
{ | |
r.DrawFullHorizontalLine(gridBottomLeft.Y - iy * _Grid2DUnit, gridColor); | |
} | |
ScreenPoint worldOrigin = ScreenPoint::ToScreenCoordinate(_ScreenSize, -viewPos); | |
r.DrawFullHorizontalLine(worldOrigin.Y, LinearColor::Red); | |
r.DrawFullVerticalLine(worldOrigin.X, LinearColor::Green); | |
} | |
// 게임 오브젝트 목록 | |
// 최초 씬 로딩을 담당하는 함수 | |
void SoftRenderer::LoadScene2D() | |
{ | |
// 최초 씬 로딩에서 사용하는 모듈 내 주요 레퍼런스 | |
auto& g = Get2DGameEngine(); | |
} | |
// 게임 로직과 렌더링 로직이 공유하는 변수 | |
float currentDegree = 0.f; | |
float currentMultiple = 1.f; | |
// 게임 로직을 담당하는 함수 | |
void SoftRenderer::Update2D(float InDeltaSeconds) | |
{ | |
// 게임 로직에서 사용하는 모듈 내 주요 레퍼런스 | |
auto& g = Get2DGameEngine(); | |
const InputManager& input = g.GetInputManager(); | |
// 게임 로직의 로컬 변수 | |
static float rotateSpeed = 180.f; | |
static float multipleSpeed = 0.01f; | |
float deltaDegree = input.GetAxis(InputAxis::WAxis) * rotateSpeed * InDeltaSeconds; | |
float deltaMultiple = input.GetAxis(InputAxis::ZAxis) * multipleSpeed * InDeltaSeconds; | |
// 물체의 최종 상태 설정 | |
currentDegree += deltaDegree; | |
currentMultiple += deltaMultiple; | |
} | |
// 렌더링 로직을 담당하는 함수 | |
void SoftRenderer::Render2D() | |
{ | |
// 렌더링 로직에서 사용하는 모듈 내 주요 레퍼런스 | |
auto& r = GetRenderer(); | |
const auto& g = Get2DGameEngine(); | |
// 배경에 격자 그리기 | |
DrawGizmo2D(); | |
// 렌더링 로직의 로컬 변수 | |
static float halfSize = 360.0f; | |
static float YAxisScale = 100.0f; | |
static std::vector<Vector2> graph; | |
// 사각형을 구성하는 점을 생성 | |
if (graph.empty()) | |
{ | |
for (float x = 0; x <= Math::Rad2Deg(Math::TwoPI); x += 0.01f) | |
{ | |
graph.push_back(Vector2(x * 100,0.f)); | |
} | |
} | |
// 원을 구성하는 점을 그린다. | |
HSVColor hsv(0.f, 1.f, 0.85f); | |
for (auto const& v : graph) | |
{ | |
Vector2 polarCoord; | |
polarCoord.Y = Math::Deg2Rad(v.X); | |
polarCoord.X = 100 * sin(currentMultiple * Math::Deg2Rad(v.X)); | |
r.DrawPoint(polarCoord.ToCartesianCoordinate(), hsv.ToLinearColor()); | |
} | |
// 현재 각도를 화면에 출력 | |
r.PushStatisticText(std::string("Degree : ") + std::to_string(currentDegree)); | |
r.PushStatisticText(std::string("Multiple : ") + std::to_string(currentMultiple)); | |
} | |
// 메시를 그리는 함수 | |
void SoftRenderer::DrawMesh2D(const class DD::Mesh& InMesh, const Matrix3x3& InMatrix, const LinearColor& InColor) | |
{ | |
} | |
// 삼각형을 그리는 함수 | |
void SoftRenderer::DrawTriangle2D(std::vector<DD::Vertex2D>& InVertices, const LinearColor& InColor, FillMode InFillMode) | |
{ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment