2009년 04월 27일
Openg Obect Render / Drawing (두개 객체 그리기와 이동) day_1
아래 소스 참조
1. Point와 Sphere를 같이 그리려구 했다. 그러나 같이 그려지지 않았다.
허나 놀라운 사실은 다시 그리니까 가능했다. ㅡ_ㅡ
2.이동할때 반드시
gl_MatrixMode( GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glPopMatrix();
glLoadIdentity();
이 셋트로 필요하다. 굳이 스택을 사용하지 않고도 LoadIdentuty()만으로도
행렬을 초기화시켜 개별이동이 가능하지만 비추
3.상대좌표를 절대 좌표식으로 사용하기 위해서는 결국 뷰포트나, 전체크기로
나누기 이 문제는 한번더 알아볼 필요가 있다.
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
static float movex = 1.0f; //이동용 변수
void MyDisplay( ){
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0,0,800,800);
glColor3f(0.5,0.0,0.5);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
//gluLookAt(0.0, 0.0, 0.0,0.0,0.0,-1.0,1.0,1.0,0.0);
glTranslatef(movex / 800,0.0f,0.0f);
glutWireSphere(0.2,15,15);
glPopMatrix();
glLoadIdentity();
glColor3f(0.5,23.0,1.0);
//glViewport(300,300,600,600);
glutWireSphere(0.1,15,15);
glLoadIdentity();
glTranslatef((movex + 10.0f)/ 800,0.0f,0.0f); // 800 화면크기를 나누어 절대좌표식으로 사용
glPointSize(5.0f);
glBegin(GL_POINTS);
glVertex2f(0.2, -0.3);
glEnd();
glFlush( ); // 버퍼에 있는 명령어를 프로세서에 전달하라는 강제 명령어
}
void Init()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void MyKeyboard(unsigned char KeyPressed, int X, int Y){
switch (KeyPressed){
case 'A':
movex = movex + 5; // A키를 눌러 좌표이동을 위해 추가했다.
break;
case 'a':
movex = movex + 5;
break;
case 'Q':
exit(0); break;
case 'q':
exit(0); break;
case 27: //'esc' 키의 아스키 코드 값
exit(0); break;
}
glutPostRedisplay();
}
int main( ){
glutInitWindowSize(800,800);
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow("OpenGL Drawing Example");
Init();
glutDisplayFunc(MyDisplay); //MyDisplay함수-callback함수로 등록
glutKeyboardFunc(MyKeyboard); //callback 함수 등록
glutMainLoop( ); //이벤트 loop를 ...
return 0;
}
# by | 2009/04/27 17:00 | OpenGL | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]