OpenGL MFC Glut Tutorial Lesson1 + 상자 색 바꿔보기!

학교에서 컴퓨터 그래픽스 수업을 듣고 있습니다.

첫번째 과제는 GLUT를 이용한 선 그리기 + 삼각형 색 채우기 였는데요. 두번째 과제가 나올 듯 합니다.
Projection 관련 과제로 설명을 들었는데 교수님께서 연휴 때문인지 올리시질 않으시네요. 기한은 다가오는데….;;;

두 가지(Perspective/Orthogonal) Projection에 대해 구현해 가야 하므로 두 개를 내던가, 혹은 창 제어를 가능하게 해서 하나로 통합해서 내던가 둘 중 아무거나 선택해서 내면 될 거 같아서 교수님께서 언급하신 MFC로 제어하는 방법에 대해서 찾아보았는데요.
이 곳(http://www.kencocomputers.com/tutorials/)에 잘 설명되어 있네요^^

Lesson1을 따라해보다가 다이얼로그를 숨기지 않고 컨트롤들을 배치해서 값을 변경가능한가 테스트해보고 싶은 마음이 들어 박스의 색을 바꾸는 코드를 추가해서 한번 해 보았습니다.

일단 Lesson1을 따라해봅니다.
그리고 먼저 Play 버튼의 이벤트 핸들러 함수 내용 중 “this->ShowWindow(SW_HIDE)” 를 주석처리합니다.

void CGLUTLesson1Dlg::OnOK()
{
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);//set out options to RGB, double buffered and depth
    glutCreateWindow(“MFC Glut Lesson1”);//give the glut window a title
    // set glut callback functions
    glutDisplayFunc(display);//set our display callback
    glutReshapeFunc(resize);//set out resize callback
    //this->ShowWindow(SW_HIDE);// hide the mfc starter when the glut window opens
    glutMainLoop(); //start the glut main loop   

    CDialog::OnOK();
}

그리고 MFCOpenGL(원문에서는 MFCopenGL입니다.) 클래스에 float 형 변수 m_R, m_G, m_B를 추가해 줍니다.
이 값들을 다이얼로그에서 건드릴 것이므로 m_R, m_G, m_B 변수에 대한 Get/Set 함수를 추가하고, 세 개를 한꺼번에 바꾸는 SetColor 함수를 추가합니다. 그리고 m_R, m_G, m_B를 protected 속성으로 바꿉니다.

class MFCOpenGL 
{
public:
    …
    void SetColor(float r, float g, float b);

    void SetR(float r);
    void SetG(float g);
    void SetB(float b);

    float GetR();
    float GetG();
    float GetB();

protected:   
    float m_R;
    float m_G;
    float m_B;

};

뭐, 굳이 SetColor과 SetR/G/B, GetR/G/B 함수는 안써도 다 아시겠죠? ㅋㅋ

그리고 MFCOpenGL::display() 함수의 “glColor3f(1.0f, 0.0f, 0.0f);” 를 “glColor3f(m_R, m_G, m_B);”로 바꾸어 추가한 변수들로 그리도록 해줍니다.

void MFCOpenGL::display(void)
{
    glClearColor(0,0,0,0);//set the background color to black
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glColor3f(m_R, m_G, m_B); //set cube color
    glutWireCube(30); //use the premade glut function to draw a wire cube of size 30
    glutSwapBuffers();
}

원래 값이 각각 1.0f, 0.0f, 0.0f 였으므로 생성자에서 이 값들을 m_R, m_G, m_B 에 넣어주면 좋겠네요.

MFCOpenGL::MFCOpenGL()
{
    m_R    = 1.0f;
    m_G    = 0.0f;
    m_B    = 0.0f;
}

그리고나서 원래 다이얼로그에 에디트 창 3개를 추가하고 각각에 연결된 float형 변수(m_R/m_G/m_B)를 추가합니다. 또 각 변수들로 SetColor을 호출하고 다시 그려줄 버튼도 하나 추가해 줍니다.

사용자 삽입 이미지

창이 뜰 때 만들어질 창의 색 값이 써지면 좋겠군요. OnInitDialog 함수에서 GetR/G/B함수를 이용해서 얻어오죠~

BOOL CGLUTLesson1Dlg::OnInitDialog()
{
    …

    // TODO: Add extra initialization here
    m_R = gl.GetR();
    m_G = gl.GetG();
    m_B = gl.GetB();

    UpdateData(FALSE);
   
    return TRUE;  // return TRUE  unless you set the focus to a control
}

그리고, SetColor버튼을 눌렀을 때 SetColor 함수를 호출하면 될 것 같군요. 값을 얻어와서 호출한 후에 display함수를 호출해서 그려줍시다.

void CGLUTLesson1Dlg::OnButtonSetColor()
{
    UpdateData(TRUE);
   
    gl.SetColor(m_R, m_G, m_B);
   
    display();
   
}

어디 그럼 이제 띄워볼까요?

사용자 삽입 이미지
잘~ 되네요. 흐흐~

컴퓨터 그래픽스 두번째 과제가 나오면 이 걸 좀 이용해서 이런식으로 해서 내야겠습니다. 흐흐..

Xsupplicant 1.9.5(CVS) 소스 설치 on 우분투 8.04 beta

졸업작품 프로젝트로 xsupplicant 관련 작업을 하고 있습니다.
그를 위해서 리눅스 환경에서 xsupplicant 컴파일 작업이 필요해서 최신 버전을 CVS를 통해 받아와서 컴파일해보았습니다.
1.2.8 버전을 설치하려니 이것저것 건드려줘야 할 것들이 많아서 최신 버전을 빌드하는 것보다 더 힘들군요-_-
iwlib.h 를 찾을 수 없다는 에러부터.. linux/compiler.h 가 없다는 에러.. #define HEADER_KERNEL 을 지워줘야 한다는 이야기도 있고.. 아무튼 이래저래 삽질 중 최신버전 설치가 더 쉽게 되어 정리합니다.

설치는 우분투 8.04 beta를 VMWare 6.0.3 에서 설치한 후에 진행하였습니다.
회색배경은 직접 입력하는 부분이고, 노란배경은 화면 메시지 입니다.

1. 우분투 8.04 beta 설치

2. build-essential 설치
 – libc6-dev, libc-dev, gcc, g++, make, dpkg-dev

sudo apt-get install build-essential

3. CVS 설치

sudo apt-get install cvs

4. XSupplicant CVS 저장소 익명 로그인

cvs -d:pserver:anonymous@open1x.cvs.sourceforge.net:/cvsroot/open1x login
Logging in to :pserver:anonymous@open1x.cvs.sourceforge.net:2401/cvsroot/open1x
CVS password:
<ENTER>
cvs login: CVS password file /home/dasomoli/.cvspass does not exist – creating a new file

5. XSupplicant 소스를 CVS 에서 받아오기


cvs -z3 -d:pserver:anonymous@open1x.cvs.sourceforge.net:/cvsroot/open1x co -P xsupplicant

6. 받은 소스가 들어있는 디렉토리로 들어가기

cd xsupplicant

7. Autoconf 설치

sudo apt-get install autoconf

8. automake1.9 설치
 automake를 설치하면 1.10 버전이 설치되는데, 이 것으로 automake를 하면 되지 않더군요.

sudo apt-get install automake1.9

9. libssl-dev 설치

sudo apt-get install libssl-dev

10. libiw-dev 설치

sudo apt-get install libiw-dev

11. libxml2-dev 설치

sudo apt-get install libxml2-dev

11. configure와 make를 위해서..

automake –add-missing
autoreconf

12. configure

./configure –prefix=/usr

13. 컴파일

make

14. 설치

sudo make install

15. 설치 확인

xsupplicant
Starting XSupplicant v. 1.9.5.071009.080121
Found 0 other supplicants and wireless managers.
File /etc/xsupplicant.conf can’t be accessed
Tue Apr 15 00:25:17 2008 – File /etc/xsupplicant.conf can’t be opened.  Do you have rights to it?
Couldn’t read the configuration file.  Building defaults.

흐흐.. 이제 좀 건드려 볼 수 있겠군요.. 🙂

우분투 카운터!

우분투 8.04의 출시일이 얼마 남지 않았네요!

초보 리눅서님의 블로그에서 우분투 베타판 출시 소식과 함께 배너에 대한 이야기를 듣고 추가해 보았습니다. 🙂

왼쪽을 보니 오늘로써 29일 남았다고 나오네요. 흐흐.

흐흐.. 기대됩니다.

OOXML: 뭐가 그리 대단한가? (한글)

OOXML: 뭐가 그리 대단한가?

 위 글은 10여년 동안 ISO C 표준 위원회에 자원하여 활동한 경험이 있는 표준화에 관심이 많은 필자가 정치적인 입장이 아니라 기술적인 측면에서 OOXML을 표준으로 취급해서 안 되는 이유를 밝히는 글입니다.

 먼저 표준을 정립하는 목적을 상기시키고 나서.. OOXML 이 표준으로 채택될 수 없는 이유를 세 가지로 정리하여 밝힙니다. 그 이유는 다음과 같습니다.

  1. 불합리한 요구사항
  2. 불충분한 명세
  3. 고유한 기능

 1. 불합리한 요구사항의 요점은 스펙이 해석에 따라 다의적인 요구사항을 포함함으로써 구현을 불가능하도록 한다는 것입니다.
 2. 불충분한 명세의 요점은 구체적인 명세를 의도적으로 제공하지 않으므로써 구현을 불가능하게 한다는 것입니다.
 3. 고유한 기능-많은 표준 전문가들이 가장 분노한다는-의 요점은 마이크로소프트 오피스에만 종속적인 기능을 가지고 있다는 것입니다.

 마지막으로 XML이 문서 표준으로 적합하지 않은 것은 아니며, 가장 큰 경쟁자인 ODF에 대해서 소개하면서 문서 내용 자체를 기술하려고 한다는 점을 밝히고 있습니다.

 관심있으신 분은 전문을 한번쯤 읽어보시길 권합니다. 그리고! 반대 서명운동에 동참하세요! 🙂

OOXML 표준 채택 반대 두번째 서명 시작!

두번째 OOXML 서명 시작!

MS의 OOXML의 표준 채택 관련 반대에 대한 두번째 서명운동이 시작되었습니다.

링크한 글은 KLDP의 channy님의 글이고 실제 서명 페이지는 이 곳 입니다.

왼쪽의 배너를 누르시면 KLDP의 페이지로 연결됩니다.

설명이나 다른 분들의 반응들을 볼 수 있으니 참고하시라고 그 쪽으로 연결해 놨습니다.

한 번 보시고, 자신의 뜻에 맞으신다면 서명해 주세요.

우분투 7.10 설명서를 보면서… 에 대한 트랙백과 오해

어제 썼던 우분투 설명서에 대한 글을 트랙백하였더니 블로그 주인이신 분께서 이런 글을… -_-;;;

짜집기에 불과하다고 평가절하했다고 화가 나신 듯 한데..

‘우와… 여기저기 흩어져 있는 정보를 정말 잘 모아놓으셨네~’ 라고 쓴 부분 때문인 것 같다.

그러나, 설명서를 보면 글에서 쓰신 프로그램 실행과 순서에 대한 고민 뿐만 아니라 다른 세세한 부분에도 신경쓴 부분이 많다는 걸 알 수 있다.

그런 부분에 대해서 평가절하하거나 글쓴이의 수고를 무시하려 했던 것은 당연히 아니다. 저런 글을 블로그에 꾸준히 게재하는 것만으로도 많은 수고와 노력이 들어 갔음은 나 역시 잘 알고 있다.

내가 저 문구를 썼을 때의 원래 의도는 글쓴이가 잘 정리하고 쓴 팁이나 자료들 중 상당수가 이미 인터넷 상의 페이지나 포럼, 위키 등에 이미 있던 것들이지만, 그런 자료들을 찾아다닐 필요없이 저자가 정리한 우분투 설명서를 보면 될 정도로 정리가 잘 되어있다는 의미를 전달하고 싶었다.

인터넷의 자료들을 가져와서 자기 자료인양 사용하고 권리를 주장한다는 의미가 절대로 아닌데 마치 그런 의도로 내가 포스팅을 했다는 듯 내 블로그의 글 주소를 포함한 글을 보니 조금 당황스럽다.

내 블로그의 글에 sakuragi님과의 댓글 때문인지 권리에 대한 문제도 언급하고 있는데, 내용 중 언급된 부분들을 (저자가 모든 정보를 어떠한 글이나 웹페이지의 참고없이 적었다면 할 말이 없겠지만..) 자신이 정보를 얻거나 참고한 부분에 대해 언급해 주는 것이 바람직하다고 쓴 것이 그렇게나 잘못된 것인지 반문하고 싶다.

내가 라이센스를 CC-저자 표기를 썼다는 것 외에 저자가 다른 어떤 권리를 주장했다고 말한 적도 없는데 권리를 주장한다고 이야기하고 딴지를 거는 것으로만 보는 시선이 안타깝다.

내 글은 글쓴이를 독려하는 글은 아니었지만, 그렇다고 비판하거나 딴지를 걸려고 했던 글이 아니었다. 오히려 기본적으로 제공하는 우분투 한국팀에서 번역한 도움말도 많이 사용했으면 하는 바람과 저런 글이 많이 있을 수록  좋다는 것이 내 글의 주제였다.

내 의도와 다르게 오해가 생기고 저자의 기분을 상하게 하고, 나 역시 기분이 상한 것 같아 좋지 않다.

블로그의 문구 하나하나가, 말 하나하나가 어떤 오해를 낳게 하는지 뼈저리게 느끼는 새벽이다.

p.s : 나 역시 이런 댓글은 당연히 기분이 좋지 않다. 인신공격에다 하지도 않은 이야기라니.. 내가 언제 무엇을 자랑했단 말인가.

우분투 7.10 설명서를 보면서..

우분투 7.10 설명서

쭈욱 흟어보면서 든 생각은.. ‘우와… 여기저기 흩어져 있는 정보를 정말 잘 모아놓으셨네~’ 다.

여기저기 인터넷에 흩어져 있는 우분투 관련 자료들을 체계적으로 잘 정리해놓으신 것 같다.

우분투를 처음 사용하는 사용자들이 여기저기 떠돌면서 보지 않아도 될 만큼 잘되어있다.

하지만…

우분투 한국팀인 나로서는…

많은 분의 수고가 담긴(저는 별로..ㅠ) 우분투 기본 도움말(시스템-도움말 및 지원)도 많은 사용자들이 보아줬으면 좋겠다는 바람이다.

웬만한 것들은 다 있는데..

우분투 포럼 게시판의 질답란을 본 경험으로는 사용자들이 인터넷을 찾아보는 습관 때문인지 기본 도움말보다는 먼저 웹브라우저에서 검색 또는 질문만을 한다는 느낌이었다.(도움말에 있는 내용을 질문하는 분들이 참 많았던 듯 하다)

아무튼, 자료가 많을수록 사람들은 더 잘 쓸 수 있겠지.. 흐흐.. 🙂

Ctags + T(ag)list

 졸업논문 세미나를 하면서 제가 맡았던 부분인 ctags + taglist 플러그인에 대한 발표자료를 거의 그대로 옮긴 것입니다. 형식을 보시면 아시겠지만 ppt를 그대로 옮겼어요. 말로 때웠던 부분들도 글로 써두고 싶지만 귀찮아진 관계로 나중에… -_-;;;;

Ctags 소개

    여러 Source 파일들의 index(tag)를 생성하는 프로그램
    함수, 변수, 클래스 멤버, 매크로 등을 indexing함.
    생성된 tag는 여러 Text editor에서 사용가능
    현재는 exuberant-ctags라는 별도 프로젝트로 분리되었음.
    공식 홈페이지 : http://ctags.sourceforge.net

Ctags 구하기

    Source 또는 패키지 다운로드
        http://ctags.sourceforge.net
            Source 압축파일
            Source RPM
            Fedora 7 binary RPM
            윈도우즈 용 Source와 Binary

Ctags를 쓰기 위한 준비

    소스 파일이 있는 디렉토리의 최상단에서 tag 생성 -> “tags” 파일이 생성됨.

ctags -R *

    VI 설정파일(.vimrc)에 tag를 찾기 위해 다음을 추가

set tags+=./tags,../tags,../../tags,../../../tags,tags

VI + Ctags 사용 – :ts

    :ts <symbol> – <symbol>이 있는 위치를 선택하여 이동, Symbol 위에서 “g + ]” 해도 동일한 효과

:ts ctx

사용자 삽입 이미지   

VI + Ctags 사용 – :ta, ctrl-t, :tags

    :ta <symbol> – <symbol>을 찾아 이동, 소스파일의 찾을 symbol 위에서 ctrl-] 해도 됨
    :tags – 현재 tag 스택을 보여줌.

사용자 삽입 이미지

    Ctrl-t – tag 스택의 상위로(이전 위치로) 이동

taglist 소개 및 기능

    vim의 소스 코드 브라우저 플러그인
    Vim 창 안에서 함수, 클래스, 구조체, 열거형(enumeration),  매크로 정의 등을 보여줌
    Tag 창에서 tag를 선택하면, 해당 tag의 정의로 커서가 이동
    Ctags가 생성하는 tag 파일에 의존적
    공식 홈페이지 : http://vim-taglist.sourceforge.net/

Taglist 다운로드

    Sourceforge
        http://sourceforge.net/projects/vim-taglist/download

    VIM 공식 홈페이지의 스크립트
        http://vim.sourceforge.net/scripts/script.php?script_id=273

Taglist를 쓰기 위한 준비

    .vimrc 파일에 필수적으로 추가할 내용

filetype on

    .vimrc 파일에 선택적으로 추가할 내용

let Tlist_Ctags_Cmd=”/usr/bin/ctags“
let Tlist_Inc_Winwidth=0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Auto_Open=1

    더 많은 정보는 매뉴얼(http://vim-taglist.sourceforge.net/manual.html) 참고

Taglist 화면(:TlistToggle)

사용자 삽입 이미지

Taglist 단축키

    <CR> – tag의 정의로 이동
    <SPACE> – tag 의 prototype을 표시
    u – tag 목록을 갱신
    x – tag list 창을 확대/축소
    + – 플딩 열기 (* – 모든 폴딩 열기)
    – – 폴딩 접기 (= – 모든 폴딩 접기)
    [[ 또는 <BACKSPACE> – 이전 파일의 시작위치로
    ]] 또는 <TAB> – 다음 파일의 시작위치로
    q – taglist 창 닫기
    <F1> – 도움말

MS에서 웹하드 5G를 무료로 쓰래요.

저는 쓸데없는 이메일 구독이 꽤 많은 편입니다. ㅋㅋ

전자신문도 구독 중인데 몇 개월을 읽지 않다가 오늘자 뉴스레터를 읽어봤더니 아래와 같은 기사가 있네요.

한국 MS “무료 웹하드 쓰세요”

MS의 스카이드라이브(http://skydrive.live.com/)에서 5기가 웹하드를 무료로 38개국에서 제공한다는 기사인데 사용자로서는 꽤 반가운 기사입니다. ㅎㅎ

뭐 지금까지 써온 방법- E-Mail 등을 이용해서 개인 자료를 보관하던) -도 나쁘지 않지만 전용 서비스를 이용하는 것도 좋은 방법이겠죠.

관심있으신 분들은 한 번 둘러보시는 것도 괜찮겠습니다. 흐흐

제목보고 낚인 글.. 고흐 VS 고갱 – 둘도 없는 친구이자 경쟁자

네이버에 들어갔다가 제목을 보고 낚인 글.

미술에 대해 잘 알지 못하는 나이지만, 고흐와 고갱이 둘도 없는 친구이자 경쟁자란 생각은 절대 들지 않는다.

오히려 고흐는 고갱에게 무시당하는 존재 같은 느낌이다.

글쓴이 역시 그런 것들을 알고 쓴 듯한데.. 왜 저런 낚시성 제목을 붙인 것인지..

제대로 낚인 기분에 왠지 씁쓸하고 기분이 나쁘다.

게다가 가장 아래에는 저런 제목으로 유명해진 것에 대해 감격하기까지.. -_-;;;

그림에 대해서 잘은 몰라도.. 고흐는 좋아하기에..

그냥그냥..