OpenGL로 간단하게 만들어본 '나름 로봇' 이다

키보드 값에 따라서 전체 몸통과 팔 그리고 목 회전을 컨트롤 할 수 있다.

주로 이동 및 회전 함수를 이용하여 구현하였다.

 

[참고]

void glTranslatef(GLfloat dx, GLfloat dy, GLfloat dx);

-> 좌표계를 x,y,z축 방향으로 dx,dy,dz 만큼 이동시킴.

 

void glScalef(GLfloat sx, GLfloat sy, GLfloat sz);

-> 좌표계 눈금을 x,y,z축 방향으로 sx,sy,sz 배만큼 조절.

 

void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);

-> angle 각도만큼 반 시계 방향으로 회전 시키며, x,y,z에 회전할 축을 설정함. 

 

 

 

초보티 팍팍 나는 예제 소스코드 첨부 ->  main.cpp

 

 

'탐구생활 > 깨알같은 공부' 카테고리의 다른 글

[ASP.NET 기초] 배너 출력  (1) 2012.12.21
OpenGL을 이용한 슬라이드 쇼  (0) 2012.06.24
Posted by miniature88
,

[ppt 첨부Observer.pptx

 

 

◈ Observer Pattern 정의

특정 데이터를 감시하고 있다가 변화 발생시,

시스템에 이를 알리고 연관된 객체들이 적절한 작

동일한 인터페이스를 이용하여 실행하도록 만들어주는 패턴.

 

객체1의 상태가 변하면 연관 객체 2,3,4에 사항을 알리고 자동적으로 수정!

 

 

 

이벤트 처리를 연상시킨다 !

 

◈ Observer Pattern 필요 이유

한 객체에 가해진 변경으로 다른 객체를 변경해야 하는 경우.

변경 되어져야 하는 객체수가 많은 경우! 번거로워지기 때문에.

옵저버 패턴을 이용하면 추후에 발생하는 불편함을 줄일 수 있다. 

 

 ◈ Observer Pattern 예제(C++)

 

성적 값이 변한경우, 성적값을 표시하는 표와 그래프 값이 변하게 되는데.

성적 값이 변할때마다 따로 처리해주면 번거롭지만 옵저버 패턴을 이용하면

보다 편하게 변한 성적 값에 따라 표와 그래프에 변경된 값을 반영할 수 있다.

 

[소스 코드 첨부]

main.cpp

 

#include <iostream>
#include <vector>
using namespace std;

class Observer{
public:
 virtual void Update(int 언어, int 수학, int 외국어)=0;
};

class Subject{
public:
 virtual void NotifyObserver()=0;
 virtual void AddObserver(Observer* input)=0;
};

class 성적Data : public Subject{
public:
 virtual void NotifyObserver(){
  for (unsigned int i=0; i<observerList.size();i++)
  {
   observerList[i]->Update(m_언어,m_수학,m_외국어);
  }
 }

 virtual void AddObserver(Observer* input){
  observerList.push_back(input);
 }

 void setData(int 언어, int 수학, int 외국어){
  m_언어=언어;
  m_수학=수학;
  m_외국어=외국어;
 }

private:
 vector<Observer*> observerList;

 int m_언어;
 int m_수학;
 int m_외국어;
};


class : public Observer{
public:
 virtual void Update(int 언어, int 수학, int 외국어){
  m_언어=언어;
  m_수학=수학;
  m_외국어=외국어;

  Print();
 }

private:
 void Print(){
  cout<<"언어: "<<m_언어<<endl;
  cout<<"수학: "<<m_수학<<endl;
  cout<<"외국어: "<<m_외국어<<endl;
 }

private:
 int m_언어;
 int m_수학;
 int m_외국어;
};

class 그래프 : public Observer{
public:
 virtual void Update(int 언어, int 수학, int 외국어){
  m_언어=언어;
  m_수학=수학;
  m_외국어=외국어;

  Print();
 }

private:
 void Print(){

  for (unsigned int i=0; i<m_언어;i++)
  {
   if (i==0)
   {
    cout<<"언어   ";
   }
   cout<<"□";

  }

  cout<<endl;

  for (int i=0; i<m_수학;i++)
  {
   if (i==0)
   {
    cout<<"수학   ";
   }
   cout<<"□";
  }

  cout<<endl;

  for (int i=0; i<m_외국어;i++)
  {
   if (i==0)
   {
    cout<<"외국어 ";
   }
   cout<<"□";
  }
  cout<<endl;
  
 }

private:
 int m_언어;
 int m_수학;
 int m_외국어;
};

void main(){

 성적Data* 성적=new 성적Data;
 표* 성적표=new 표;
 그래프* 성적그래프=new 그래프;
 
 cout<<"[갱신 1]"<<endl;
 성적->AddObserver(성적표);
 성적->setData(6,2,3);
 성적->NotifyObserver();

 

 cout<<"\n[갱신 2]"<<endl;
 성적->AddObserver(성적그래프);
 성적->setData(10,12,7);
 성적->NotifyObserver();
}

 

 

 

 

Posted by miniature88
,

◈ Iteratro Pattern 정의

복합 객체 요소들의 내부 표현 방식은 공개하지 않고,

순차적인 접근 방법을 제공하는 패턴.

 

◈ Iteratro Pattern 구현 방법

객체 집단을 특정객체(iterator)에 넣고, 동일한 방법으로 객체 집단 속 객체가

다뤄질 수 있도록 만들어 준다.

 

◈ Iteratro Pattern 예제(c++)

자판기에 음료를 추가하는 시나리오.

이터레이터 패턴을 이용해, 추가된 음료수에 보다 간편하게 접근.

[소스코드 첨부]

main.cpp

 

 

 

 

 

 

 

 

 

 

 

Posted by miniature88
,