상명대학교 컴퓨터과학전공 재학 중
컴퓨터 그래픽스 렌더링 분야와 Unity를 활용하여 2D/3D 개발하는 것에 관심이 많습니다.
OpenGL과 Unity 기반으로 다양한 프로젝트를 수행했습니다.
C++ & C# Unity 2D/3D Rest API React
“평소 생각했던 그래픽을 제가 직접 구현해 현실로 만들고자 합니다.”
OpenGL 기반 렌더링부터 Unity 3D를 활용한 내비게이션 시스템까지 설계 및 제작하는 과정을 통하여,
애니메이션 적용, 사설 경로 탐색 & 향상된 3D 시각화 시스템 생성, 그리고 인터랙션 설계 분야를 경험했습니다.
| 항목 | 내용 |
|---|---|
| 💬 개발 언어 | C++, C#, HLSL, Python |
| 🖥️ 개발 환경 | Visual Studio 2022, Visual Studio Code |
| 🔧 도구 | Unity 2D/3D, OpenGL, DirectX |
| 💡 강점 | 빠른 학습력, 코드 흐름 파악 능력, 인터랙션 설계, 원인 분석 및 조치 능력 |
| 👥 팀 프로젝트 | 2회 진행 |
C++, OpenGL, Bullet Physics, Skeletal Animation 기반 3D 물리 시뮬레이션 게임
// ======== 메인 렌더링 루프 ========
while (!glfwWindowShouldClose(window))
{
// 1) 초당 프레임 계산
float currentFrame = static_cast(glfwGetTime());
if (!VSYNC && currentFrame - lastFrame <= frameTime) continue;
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
// 2) 카메라 및 투영행렬 갱신
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom),
(float)WINDOW_WIDTH / (float)WINDOW_HEIGHT, 0.1f, frustum_far);
glm::mat4 view = camera.GetViewMatrix();
// 3) 물리 시뮬레이션 진행
dynamicsWorld->stepSimulation(deltaTime);
// 4) 플레이어 위치 갱신
btTransform trans;
characterBody->getMotionState()->getWorldTransform(trans);
btVector3 btPos = trans.getOrigin();
character->position = glm::vec3(
btPos.getX(),
btPos.getY() - gTotalColliderHeight * 0.5f + 0.05f,
btPos.getZ());
// 5) 사용자 입력 처리
processInput(window, defaultAnimations, runAnimations);
// 6) 충돌 상태 확인
// ... // 지면 충돌, 슬로프 감지, 오브젝트 접촉 여부 등을 계산함
// 7) 애니메이션 갱신
glm::mat4 model = glm::mat4(1.0f);
animator.updateAnimation(deltaTime);
updateNodeTransformations(root, model);
auto transforms = animator.getFinalBoneMatrices();
// 8) 루트 렌더링
renderNode(root);
// 9) Line Debug & GUI
// ... // ImGui 패널
// 10) 프레임 마무리
glfwSwapBuffers(window);
glfwPollEvents();
}
🛠️ 담당 역할: 물리 시스템 설계, 애니메이션 최적화, 로직 개선
🔗 깃허브 링크: 'The Rolling Stone' 게임 저장소
Unity 3D, Firebase, OpenAI API를 활용한 3차원 캠퍼스 내비게이션 시스템
📸 데모 하이라이트
(1) 회원가입
(2) 로그인
(3) 길찾기(Go)
(3-1) 경로 시각화(Go)
(4) 챗봇 질의응답(Talk)
📁 시스템 개발 개요
🔧 기술 세부 사항
// ================= PATH3 (Dijkstra)=================
public List<Vector3> Dijkstra(string startNode, string endNode)
{
Dictionary<string, float> distances = new();
Dictionary<string, string> previous = new();
List<string> unvisited = new(nodes.Keys);
foreach (var node in nodes.Keys)
distances[node] = float.MaxValue;
distances[startNode] = 0;
while (unvisited.Count > 0)
{
// 1. 현재까지 거리 중 최소 노드 선택
string current = unvisited.OrderBy(n => distances[n]).First();
unvisited.Remove(current);
// 2. 목적지 도달 시 종료
if (current == endNode)
break;
// 3. 인접 노드 탐색
foreach (var neighbor in nodes[current].neighbors)
{
float alt = distances[current] + Vector3.Distance(
nodes[current].position, nodes[neighbor].position);
if (alt < distances[neighbor])
{
distances[neighbor] = alt;
previous[neighbor] = current;
}
}
}
// 4. 최단 경로 역추적
List<Vector3> path = new();
string nodeTrace = endNode;
while (previous.ContainsKey(nodeTrace))
{
path.Insert(0, nodes[nodeTrace].position);
nodeTrace = previous[nodeTrace];
}
path.Insert(0, nodes[startNode].position);
// 5. 시각화
pathLineDrawer3.DrawPath(path);
UIDebugTextAnimator.Instance.debugTextMsg.text = "Dijkstra Path Complete";
UIDebugTextAnimator.Instance.AnimateAll();
return path;
}
🛠️ 담당 역할
✨ 특이사항
🔗 깃허브 링크: 대학교 캠퍼스 맵 3차원 내비게이션 시스템 저장소
NPU(Neural Processing Unit) 칩이 탑재된 에지 카메라에 YOLOv5s 모델 경량화 및 포팅 수행
🛠️ 담당 역할: 모델 경량화, 포팅, 실시간 인퍼런스 검증
🌐 개발 환경: PyTorch 1.7.1+cu110 · TorchVision 0.8.2 · ONNX 1.13.0 · Docker Desktop 4.30.0 · Kneron Toolchain WebGUI · KL630 NPU · PuTTY 0.83 · VLC 3.0.20
✨ 특이사항: 회사 내부 매뉴얼을 기반으로 진행된 프로젝트로, 보안상의 이유로 아이디 및 인물 정보를 모두 모자이크 처리
Unity 3D 기반 GoldMetal 튜토리얼을 바탕으로 제작한 3D 미니게임
🎮 게임 요약
🛠️ 담당 역할: 단독 개발
🔗 깃허브 링크: 3D 공 굴리기 수집 게임 저장소 (깃허브)
📝 노션 링크: 3D 공 굴리기 수집 게임 노트 (노션)
Unity 2D 기반 GoldMetal 튜토리얼을 바탕으로 제작한 소규모 2D 게임
🎮 게임 요약
🛠️ 담당 역할: 단독 개발
🔗 깃허브 링크: 2차원 코인 먹기 게임 저장소 (깃허브)
📝 노션 링크: 2차원 코인 먹기 게임 노트 (노션)