2. Curly Hair Simulation - Hair model(Stretch spring)
·
Computer Graphics/Curly Hair Simulation
본 논문에서 제시한 헤어 모델은 총 세가지 mass-spring 구조로 이루어져 있다. 파티클 간의 거리를 유지하는 Stretch spring, 머리카락의 원본 컬을 유지해주는 bending spring, 머리카락의 세로방향 신축성을 제어해주는 core spring 으로 구성되어 있는데 이번 포스팅에서는 Stretch spring에 대해 알아보도록 하자. 1. Stretch spring 본 논문에서 제시한 Stretch spring의 공식이다. 해당 공식은 spring force + damping force로 나뉘며 앞 항이 spring force 뒤 항이 damping force이다. edges는 파티클과 파티클을 잇는 vector이며 (다음 파티클 위치) - (현재 파티클 위치)로 구할 수 있다. 본..
1. Curly Hair Simulation - Introduce
·
Computer Graphics/Curly Hair Simulation
본 포스팅은 Pixar의 "Artistic simulation of curly hair"를 바탕으로 제작한 프로젝트의 개발 일기이다. 본인이 수학에 대해 매우 견식이 좁으므로 반수포자인 본인이 이해한 내용이기 때문에 수학적으로 옳지 않을 가능성이 상당하다. 하지만 그런 본인도 이해 가능하도록 최대한 알기 쉽게 직관적으로 이해하도록 노력하였으며 다시 복습하는 마음으로 해당 포스트를 제작한다. 해당 논문에서는 곱슬머리를 구현하는데 "예술적 요구"를 충족하기 위해 몇가지 제한사항을 제시한다. 1. 큰 가속도에서도 머리카락의 원본 모습을 유지해야 할 것 2. 매개변수의 변경을 최소한으로 할 것 3. 머리카락이 늘어나지 않아야 할 것 4. 모든 제한사항을 준수하고 실시간으로 시뮬레이션이 가능해야 할 것 이 예술적..
[OPEN GL] 프로젝트 시작 전 사용 설정
·
C++
sanf_s 경고 문제 해결 프로젝트 속성 → C/C++ → 일반 → SDL검사 = 아니요 include 및 lib 이동 후 경로 설정 프로젝트 속성 → C/C++ → 일반 → 추가 포함 디렉터리 = ./include 프로젝트 속성 → 링커 → 입력 → 추가 종속성 = glew32.lib, glut32.lib 프로젝트 속성 → 링커 → 일반 → 추가 라이브러리 디렉터리 = ./lib "const char *" 형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다. 오류 해결 프로젝트 속성 → C/C++ → 언어 → 준수 모드 = 아니요
[Open GL] v/vt/vn 형식 OBJ 읽어오기
·
C++
온라인에서 쉽게 다운받을 수 있는 OBJ 파일의 f값들은 대게 v v v형식이 아니라 v/vt/vn 형식으로 이루어져있다. 그것도 3개의 v/vt/vn로 구성되어 있는 것이 아니라 v/vt/vn이 3개일수도 4개일수도 있다. 일반적인 OBJ파일은 위와 같은 형태로 OBJ의 face들이 3개 또는 4개의 v/vt/vn 형태로 구성되어 있는데 각각 v = vertex의 인덱스, vt = 텍스쳐, vn = 노말 정점 인덱스로 구성되어 있으며 오늘 알아볼 내용은 v/vt/vn 중 v값만을 사용하여 OpenGL에서 OBJ파일을 읽는 방법에 대해 알아보자 while (fgets(line, 256, fp) != NULL) { if (line[0] == 'f') { string line_s(line); vector d..
ImportError: cannot import name 'KafkaProducer'
·
Python
kafka-python을 다운받고 실행을 하다가 모듈 오류가 발생하였다. 가상환경 문제인줄 알고 다운받았다 지웠다를 수백번 반복하다가 문득 파이썬 파일이름과 모듈 이름이 동일하다는것을 깨달았다. 이래서 기본이 중요한 것 같다. import할 모듈 이름은 절때 스크립트 이름과 같으면 안된다...
Laplace equation in c++
·
C++
for(int i = 0; i < lattice.size(); i++){ for(int j = 0; j < lattice.[0].size(); j++){ potential = 0.25 * (lattice[j + 1][i] + lattice[j - 1][i] + lattice[j][i - 1] + lattice[j][i + 1]); } } C++에서 라플라스 방정식을 간단하게 구현한 코드이다. N*N의 Grid에서 상 하 좌 우에 해당하는 위치의 값을 더한 뒤 그 수만큼 1/n하여 나누어서 계산한다. 본인은 N*N의 Grid에서 해당 방정식을 사용하여 물리기반 번개 시뮬레이션을 하는데 사용하였다.
Mesh smoothing with cotangent weight
·
C++
각 Vertex에 대한 cotangent weight를 구하여 Laplace smooting를 적용해보자 Vec3 v1 = pos - vertices[i]->neighbor_vertices[p_prev]->pos; Vec3 v2 = vertices[i]->neighbor_vertices[j]->pos - vertices[i]->neighbor_vertices[p_prev]->pos; Vec3 v3 = pos - vertices[i]->neighbor_vertices[p_next]->pos; Vec3 v4 = vertices[i]->neighbor_vertices[j]->pos - vertices[i]->neighbor_vertices[p_next]->pos; double cotan_a = (v1.Dot(..