목록전체 글 (140)
Graphics Programming
참고문헌: Richard O. Duda. Chapter 3: MLE and Bayesian Estimation In Pattern Classification 2ed (pp. 11-13) Bayes learning simulation - wonderfl build flash online 패턴 인식. 지금까지 학부 수업이 너무 쉽다고 투덜거린 나를 비참하게 만들고 있는 과목. 교재를 아무리 읽어도 너무 어렵다. 베이즈 매개변수 추정을 읽으며 이게 뭔소린가 끙끙 앓다가 코딩을 해보고 감을 잡았다. 일변수 확률 변수 X가 정규 분포를 따르고 펑균이 μ, 표쥰편차가 σ라 하자. μ는 모르고 σ는 아는 상황에서 μ를 추정하고자 한다. (별로 현실적이지 않은 가정으로, 학습을 위해 책에서 설정한 가장 단순한 문제다...
Johan Tibell의 ZuriHac 2015 발표: https://www.youtube.com/watch?v=_pDUq0nNjhI 그냥 동영상에 나오는 슬라이드 별로 요약한 것. 자세한 내용은 동영상 참조. ◎ 생성자의 헤더에 1워드, 필드에 1워드 소모 data Uno = Uno a -- 2워드 data Due = Due a b -- 3워드 예외: 필드 없는 생성자는 메모리 사용 X (Nothing, True 등) ◎ [1, 2] 의 메모리 표현 - 1박스 = 1워드 - 생성자마다 1워드의 오버헤드 (가비지 컬렉션 등에 이용) ◎ unboxed 타입 = 원시 기계 타입 - 관례에 의해 이름이 #로 끝난다 - 대부분 1워드를 소모 (예외: 32비트 기계에서 Double#) - unboxed 타입의 값..
원문: http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/AFP08-notes.pdf 요약 형식으로 번역. 1. 서문 다양한 반-암시적(semi-implicit) 병렬화와 쓰레드 기반 명시적 병렬화 기법들, 소프트웨어 트랜잭션 메모리, 중첩 데이터 병렬화 등을 다룬다. 독자가 하스켈의 지연 함수형 프로그래밍에 익숙하다고 가정. 2. 동시성과 병렬화의 응용 동시성 병렬 프로그램을 작성하는 것은 순차적 프로그램을 작성하는 것보다 어렵다. 하지만 그럴 만한 가치가 있다. 수행능력. 멀티코어 프로세서로 수행능력을 향상할 수 있다. 지연시간 감추기. 싱글코어 프로세서에서도 동시성으로 느린 I/O 작업의 지연시간을 숨길 수 있다. 소프트웨어..
http://codeonwort.tistory.com/235 평면 텍스처에 입체감을 주기 위해 가장 흔하게 사용하는 기법이며 튜토리얼도 수없이 많으나... 구현하는 것은 엄청 힘들었다. 셰이딩을 위해서는 법선, 탄젠트, 바이탄젠트, 광원 위치, 시선 벡터, 모델뷰 행렬 등 많은 매개변수가 필요한데, 각자 다른 좌표계에서 정의된 값들이고 이것들을 모두 탄젠트 공간으로 변환해서 계산하는 과정에서 엄청난 혼란을 겪었기 때문이다. 그렇다고 수많은 픽셀 중 하나의 값을 찍어볼 수도 없어서, C++ 코드로 똑같은 계산을 작성해서 콘솔에 찍어보며 디버깅을 했다. 철저히 검증했는데도 GPU와 CPU에서의 결과가 다르다면, 매개변수를 전달하는 과정에서 오류가 난 것이다. 실제로 프래그먼트 셰이더의 mat4 유니폼에 gl..
방향광(directional light)을 이용해 기초적인 그림자 매핑을 구현하고 나니 3년도 전에 본 그림이 생각났다. http://9gag.com/gag/1744243/lamp-level-asian 기본적인 그림자 매핑은 한 방향으로만 그림자를 그리기에 전방향으로 그릴 수가 없다. 점광원의 위치에서 여섯 방향으로 깊이 맵을 그리고 각각의 맵을 큐브맵의 여섯 면에 대응하면 되지 않을까 싶었고, 검색해보니 실제로 큐브맵을 이용해 전방향 그림자 매핑을 구현하는 것이 보편적이었다. 그림자 매핑을 여섯 번 하면 되는 아주 쉬운 작업이라고 생각하였으나 구현하는 과정에서 멘탈이 수없이 깨졌다. - 큐브맵 텍스처의 샘플링. 큐브맵 텍스처의 각 면(face)에 RGBA 텍스처가 아니라 깊이 텍스처를 붙이는 것이 가능..
하스켈로 채팅 봇을 작성하다 문제가 하나 발생했다. wuss는 secure 웹소켓 클라이언트를 만들기 위한 라이브러리다. 웹소켓 클라이언트를 생성하는 함수는 runSecureClient다. runSecureClient :: HostName -> PortNumber -> String -> ClientApp a -> IO a ClientApp은 별칭 타입이다. type ClientApp a = Connection -> IO a 따라서 실제로는 다음과 같이 사용한다. main = do runSecureClient "some_host" 443 "some_path" app app conn = do -- input and output through websocket app은 Connection만을 인자로 받는다. ..
blockwise DCT - wonderfl build flash online JPEG 압축에 쓰이는 discrete cosine transform을 구현했다. 이미지 가로, 세로 길이는 8의 배수라 가정하며 다음과 같이 작동한다. 1. 원본 이미지를 준비한다. 여기서는 간단히 펄린 노이즈를 생성했다. 2. DCT를 수행한다. 3. Quantization을 수행한다. 4. band cutting을 수행한다. 주파수 영역에서 정보가 손실될 때 복원률을 알아보기 위한 단계다. 5. IDCT를 수행한다. 6. 원본 이미지, 주파수 이미지, 복원 이미지를 화면에 그린다. DCT 이미지에 마우스를 올리면 마우스가 있는 블록의 주파수 값을 볼 수 있다. 이미지를 8x8 블록들로 나눠서 DCT를 수행하기 때문에 대응..
※ 예제 코드들은 OpenGL Super Bible에서 가져온 것입니다. - 컴퓨트 셰이더 스테이지는 별개의 파이프라인. OpenGL의 다른 셰이더들과 단절되어 있다 - 고정된 입출력이 없다 - 프로그래밍 관점에서는 다른 셰이더들과 같다 - GLSL로 작성, 셰이더 개체로 표현, 프로그램 개체에 링크됨 - 컴퓨트 셰이더는 다른 셰이더들과 섞일 수 없다 - 이미 정점, 단편 셰이더가 있는 프로그램에 컴퓨트 셰이더를 붙일 수 없음 (링크 실패) - 링크된 프로그램은 컴퓨트 셰이더만 포함하거나 그래픽스 셰이더들(정점, 테셀레이션, 기하, 단편)만을 포함한다 // 아무것도 안 하는 컴퓨트 셰이더#version 430 corelayout(local_sizee_x = 32, local_size_y = 32) in;..