Author Archives: cardcaptor

CMake: การเรียกใช้ไลบรารีภายนอก กรณีศึกษา OpenGL และ GLUT

แม้ปัจจุบันมีไลบรารีภาษา C/C++ ที่สามารถใช้ได้บนแพลตฟอร์มพลายแพลตฟอร์มอยู่มากมาย แต่การใช้ไลบรารีเหล่านั้นพัฒนาโปรแกรมยังเป็นเรื่องที่ยุ่งยาก เนื่องจากแพลตฟอร์มต่างๆ เก็บไลบรารีเหล่านี้ไว้ที่ไดเรคต่างๆ กัน CMake มีสคริปต์สำหรับค้นหาแตำแหน่งของไลบรารีที่ได้รับความนิยมอยู่หลายๆ ไลบรารี ทำให้การใช้ไลบรารีเหล่านี้เขียนโปรแกรมที่ใช้ได้หลายๆ แพลตฟอร์มเป็นเรื่องง่าย (แต่ก็ยังมีรายละเอียดมากพอสมควร) ในบทความนี้เราจะมาศึกษาวิธีการเรียกใช้สคริปต์เหล่านี้โดยใช้ไลบรารี OpenGL และ GLUT เป็นตัวอย่าง

Posted in c++, programming | Tagged , , , , , | Leave a comment

CMake: config.h และการตรวจสอบแพลตฟอร์ม

เราเคยกล่าวไปแล้วในบทความการใช้ CMake เบื้องต้น ว่าปัญหาหนึ่งที่โปรแกรมเมอร์ภาษา C++ ที่ต้องการเขียนโปรแกรมให้รันได้ในหลายแพลตฟอร์มเจอคือการที่แพลตฟอร์มต่างๆ มีไลบรารีและฟังก์ชันให้เรียกใช้ไม่เหมือนกัน ตัวอย่างหนึ่งคือฟังก์ชันสำหรับคืนชื่อไดเรคทอรีที่โปรแกรมทำงานอยู่ปัจจุบัน (current working directory) ซึ่งในระบบปฏิบัติการที่สืบเชื้อสายมาจาก Unix จะมีชื่อว่า getcwd และต้อง include ไฟล์ unistd.h เพื่อใช้งาน แต่ใน Windows ฟังก์ชันนี้กลับมีชื่อว่า _getcwd และต้อง include ไฟล์ direct.h แทน

Posted in c++, programming | Tagged , , , , , | Leave a comment

CMake: เมื่อโปรเจคมีหลาย “เป้าหมาย”

ในโปรเจคซอฟต์แวร์หนึ่งๆ อาจมีการสร้างโปรแกรมที่สามารถนำไปรันได้โดยตรง (executable) หรือไลบรารี (library) มากกว่าหนึ่งอันขึ้นไป (เพื่อให้ง่ายต่อการเขียน ผู้เขียนจะเรียกไฟล์ที่คอมไพเลอร์ภาษา C++ สร้างว่า target ตามที่ Xcode เรียก) ซึ่งอาจจะเป็นเพราะ target เหล่านี้เป็นโปรแกรมซึ่งทำงานสนับสนุนซึ่งกันและกัน หรือ target บางตัวเป็นไลบรารีซึ่ง target ตัวอื่นเรียกใช้ ในโพสต์นี้เราจะมาพูดถึงการเขียน CMakeLists.txt เพื่อสร้าง target หลายๆ target ในการ build ครั้งเดียว วิธีการเขียน CMakeLists.txt ให้บรรลุวัตถุประสงค์ข้างบนมีหลายวิธี เราจะนำเสนอวิธีการต่างๆ จากง่ายไปยาก โดยวิธีการที่ง่ายๆ นี้หมายความถึงวิธีการที่เขียนไฟล์ง่ายๆ สั้นๆ ไม่ต้องเสียแรงมาก … Continue reading

Posted in c++, programming | Tagged , , , | Leave a comment

การใช้ CMake เบื้องต้น

CMake (http://www.cmake.org/ และ http://en.wikipedia.org/wiki/Cmake) เป็นซอฟต์แวร์สำหรับสร้าง build script (ไฟล์ที่นิยามวิธีการคอมไพล์และลิงก์โปรแกรมและไลบรารีที่เขียนด้วยภาษา C++) ที่สามารถใช้ร่วมกับเครื่องมือพัฒนาโปรแกรมที่ได้รับความนิยมหลายๆ ตัว อาทิ Microsoft Visual C++, GNU Compiler Collection, Xcode, และ Eclipse CDT เป็นต้น การใช้ CMake ช่วยให้เรากำหนดซอฟต์แวร์ที่เราต้องการสร้างเพียงครั้งเดียว หลังจากนั้นเราสามารถพัฒนามันโดยใช้เครื่องมือที่เราชอบบนแพลตฟอร์มใดๆ ก็ได้ CMake จึงอำนวยช่วยความสะดวกให้กับโปรแกรมเมอร์ภาษา C++ ที่ต้องการสร้างซอฟต์แวร์ที่รันบนหลายๆ แพลตฟอร์มอย่างมาก ในบทความนี้เราจะกล่าวถึงวิธีการใช้งาน CMake จัดการซอฟต์แวร์โปรเจคง่ายๆ เป็นการปูพื้นฐานก่อนจะกล่าวถึงการใช้งานที่สลับซับซ้อนขึ้นต่อไป

Posted in c++, programming | Tagged , , , | 3 Comments

Exploiting Inter-pixel Coherence II

Let’s come back to the discussion on compressive sensing applied to light transport problem. We will talk about two approaches to exploit inter-pixel coherence today. The first is described to in the paper Compressive Light Transport Sensing by Peers et … Continue reading

Posted in computer graphics | Tagged , , , | Leave a comment

Tensor unfolding with numpy

We switch gear to some easy programming today. Let’s write a routine to unfold a tensor. We’ll use numpy to store tensor as it’s the only linear algebra library that features multi-dimentional array.

Posted in programming | Tagged , , , | 6 Comments

Exploiting Inter-pixel Coherence

Recall the measurement equation from last time: Suppose again that the responses of the pixels to each light source are coherent. That is, we may hope that there is a basis such that the columns of are sparse. Then, we … Continue reading

Posted in computer graphics | Tagged , | Leave a comment

Compressive Sensing and Precomputed Radiance Transfer?

Following the development in Peers et. al.’s Compressive Light Transport Sensing (download), the light transport problem can be described by the following matrix equation:

Posted in computer graphics | Tagged , , | Leave a comment

More Tensor Lingo

Continuing from last time, we will be talking more about tensor notations.

Posted in math | Tagged , , | Leave a comment

เทนเซอร์

เราทราบกันดีว่าสเกลาร์คือตัวเลขหนึ่งตัว หากเรามีตัวเลขหลายตัวเรียงกันเป็นแถว เราสามารถแทนมันด้วยเวกเตอร์ และถ้าเรามีเลขหลายตัวที่สามารถเรียงกันเป็นตารางสี่เหลี่ยมได้ เราสามารถแทนชุดตัวเลขนี้ด้วยเมตริกซ์ ในกรณีที่เรามีตัวเลขหลายตัวที่สามารถเรียงกันได้เป็นปริซึมในสามมิติ หรือเป็นปริซึมในปริภูมิที่มีมิติมากกว่าสาม เราจะแทนตัวเลขเหล่านั้นด้วยวัตถุทางคณิตศาสตร์ที่เรียกว่าเทนเซอร์ Continue reading

Posted in math | Tagged , , | Leave a comment