개발하다가(6)
-
GPT가 나보다 낫네요?
가만 생각하면 당연한 소리긴 한데,,, 간혹 틀린 말 하는 것만 아니었으면 월 10만 원도 안 아깝겠는데요. (대학교가 월 100만 원 넘었던 것만 생각해도) Q1. dFdx가 이런 건가? Is my understanding right for GLSL dfdx/dfdy? "2x2 areas are guaranteed to be executed simultaneously for shader, and dfdx and dfdy peeks the adjacent pixel. If A B | C D is one of the blocks, both dfdx in A invocation yields B - A" A1. 응 Your understanding is mostly correct. GLSL has a buil..
2023.03.05 -
C++에서 템플릿 메타프로그래밍하다가 발생한 오류
이슈 저의 OAGLE에서는 정점 버퍼를 만드는 것을 캡슐화할 때 원래 한 종류의 정점 클래스만 사용하고 있었는데, 그것은 위치(3차원 실수 벡터), 법선(3차원 실수 벡터), 텍스처 좌표(2차원 실수 벡터), 법선을 위한 tangent와 bitangent(각각 3차원 실수 벡터인데, 탄젠트는 접선이란 뜻이지만, 엄밀히 말해 실질적 의미는 법선에 수직한 2개 그래디언트에 가까우므로 따로 번역하지 않음), 뼈 인덱스(4차원 정수 벡터), 대응 뼈 가중치(4차원 실수 벡터)로, 생각해 보면 이것저것 구현함에 있어 꽤나 무겁거나 뻣뻣한 느낌이 있습니다. 그리하여 템플릿 매개변수를 주기만 하면 그에 따라 알아서 VAO를 만들어 주는 클래스를 새로 추가했습니다. 바인드한 정점 데이터는 셰이더 코드에서 그에 맞게 읽..
2022.05.31 -
오버플로 없는 short int x 분수
이슈 저의 OAGLE에는 오디오 파일을 복호화해서 재생하는 부분이 있습니다. 단순히 재생하는 것 외에 대략적으로는 다음과 같은 기능적 요구 사항이 있습니다. 여러 개의 오디오 파일을 동시에 재생한다 각 재생 스트림의 볼륨을 따로 조정한다 마스터 볼륨 단순히 하나의 파일을 재생한다면 memcpy()의 최적화가 아주 훌륭하므로 복호화한 걸 그대로 링버퍼에 갖다가 붙이면 그만입니다. 전자는 PCM끼리 더하면 되고 후자는 PCM에 볼륨을 곱해야 합니다. 이 과정은 memcpy()에 비해 오래 걸립니다. 초당 44100 샘플이 필요하다면 SSE2 float 기준으로 초당 11025 x (n-1)회의 실수배와 벡터 합 연산이 필요한 셈입니다. 그럼에도 저는 프로그램 상의 샘플 기준으로 float를 쓰고 있었는데요,..
2022.05.25 -
1초당 목표 위치에 99% 다가가는 카메라
이슈 저는 카메라가 부드럽게 움직이게 하기 위해, 원하는 자리에 초당 99%만큼 도달하기를 원했습니다. (이것 외에도 부드럽게 움직이는 방법은 많습니다. 훅 법칙을 적용하는 경우도 있는 것으로 들었습니다.) 현재 위치가 P이고 도달해야 할 위치가 Q라면 1초 후에는 0.01P+0.99Q에 도달해야 한다는 말입니다. (Q가 정지해 있다면) 문제 단적으로 생각해서 답은 지수적인 것과 관련이 있을 것 같습니다. 문제는 구현이겠죠. 게임 프로그램에는 루프가 존재하고(보통 60fps, 144fps) 이 반복 간격은 일정하다고 보장할 수 없습니다. 가장 대표적 원인으로는 매우 사양이 낮은 기기 혹은 매우 바쁜 기기가 있겠죠. 이에 따라 각 프레임 간격이 합쳐져 눈에 띌 정도 시간인 T만큼이 흘렀을 때, g(T)만큼..
2022.05.22 -
원 모양 물체의 2차원 비탄성 충돌에 대한 고민
이슈 2차원 상 충돌을 간단하게 구현해 본다고 할 때, 원과 선분, 원과 원, 선분과 선분의 교점을 구하는 함수를 만들어 (여러 개면 그 평균, 즉 질량중심을) 작용점으로 사용하도록 했었습니다. 이후 해결해야 할 것이 하나 더 있으니 충격량 그 자체를 정하는 것입니다. 충격량 적용 그 자체는 간단한 편으로 볼 수 있습니다. inline void impulse(const vec2& force, const vec2& globalPoint) { velocity += inverseMass * force; angularVel += inverseMoment * cross2(globalPoint - transform->getGlobalPosition(), force); } 하지만 그 충격량을 구하려면 반발계수에 따른..
2022.05.10 -
동일 평면 상 원과 선분의 위치 관계, 선분과 선분의 위치 관계
이슈 평면 상의 간단한 충돌 알고리즘을 구현한다면, 선분과 선분의 위치 관계와 평면상 원과 선분의 위치 관계 정도가 대표적으로 필요할 겁니다. 겉보기에는 높아 봐야 고등학생 수준 알고리즘이고 실제로도 그렇습니다. 한국어로 치면 거의 안 나오지만 영어로 치면 많이 나오기는 하는데요, 뭔가 불만이 있다면 코드가 조금 오래 걸려 보인다는 거라든지 유도를 읽기 귀찮다는 거겠죠. 사실 후자가 큽니다. * 이 글은 고민하는 과정이 들어 있지, 정답 같은 걸 담고 있지 않습니다. 그래서 사실 오답을 담고 있을 수도 있습니다. 문제 1. 동일 평면상 원과 선분의 위치 관계 한국어로 구글에 '원과 선분의 교점'이라고 치면 이상하게 원과 직선의 교점이란 제목의 글들만 나옵니다. 아무튼, 보통 이렇게 4개의 입력이 주어질 ..
2022.05.09