본문 바로가기

Language/C++ & openGL36

그래픽스 함수 모음 openGL 그래픽스 함수 glColor3f(255,0,0) void MyTimer(int Value) { key == 'z'; if (key == 'z')zRotate -= 10; else if (key == 'Z') zRotate += 10; glutPostRedisplay(); glutTimerFunc(100, MyTimer, 1); } glutPostRedisplay() : 윈도우가 다시 그려져야 함을 표시 glutTimerFunc(100, MyTimer, 1) 메인{ gluKeyboardFunc(MyKeyboard); } 더블 버퍼링 (보류모드) 메인 : glutInitDisplayMode(GLUT_DOUBLE) void MyDisplay() { glutSwapBuffers(); } /*기준선*/ glBeg.. 2020. 7. 4.
그래픽스 정리 그래픽스 캐드/캠, 프레젠테이션, 가상현실, 미술, 애니메이션/게임, 교육 훈련, 자연과학 가시화, GUI 그래픽 구성 요소 : 모델링 , 렌더링 레스터 그래픽 장비 : 그래픽 디스플레이, 프레임 버퍼 벡터 그래픽 장비 : 프레임 버퍼 X 가산모델 RGB 보색 CMY 감산모델 CMY HSV : 색상, 채도, 명도 하프토우닝 : 점의 크기를 다양하게 함으로써 여러 가지 회색 레벨을 만들어내는 기법 디지털 하프토우닝 : 점의 개수로 조절 감마보정 : 비선형 전달 함수를 사용하여 빛의 강도 신호를 비선형적으로 변형 지엘 파이프라인 : 변환 – 절단 – 투상 - 래스터 프로세서 좌표계 지엘 실행모드 - 직접모드 : 화면 렌더링과 동시에 물체 정보 모두 파기, 다시 그리려면 전체 다시 실행 - 보류모드 : 이미 .. 2020. 6. 30.
오픈지엘 행렬스택 glPushMatrix/glPopMatrix, 시점변환gluLookAt, 평행|원근 투상 glOrtho/gluPerspective 오픈지엘 행렬스택 지엘 초기 실행시 WCS = MCS 이다. 이동변환을 하면 WCS와 MCS가 분리된다. 변환행렬을 통해 WCS와 MCS를 일치하게 된다. 함수 순서는 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt 물체생성함수{ //계층구조 모델링 glPushMatrix(); glColor3f(0, 0, 0); glTranslatef(1.5, -0.25, 0); glutSolidSphere(0.25, 18, 18); glPopMatrix(); } 모델변환에서 복합변환을 할때 행렬은 후위 곱셈을 하기 때문에 p' = I * S * R * P 물체 변환은 P R S 물체의 좌표는 물체의 중심이다. WCS가 MCS와 일치되며 따라가게 된다. 새로 물체를 생.. 2020. 6. 11.
오픈지엘 gluLookAt 시점 변환 모델 잘림 해결, 뷰포트 1. void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble atx, GLdouble aty, GLdouble atz, GLdouble upx, GLdouble upy, GLdouble upz); 2. Arguments A. 카메라 위치 : (eyex, eyey, eyez) B. 카메라가 바라보는 점 (초점의 위치) : (atx, aty, atz) C. 카메라 기울임(Orientation) : (upx, upy, upz) void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); gluLookAt(1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glColor3f(0.0f, 1.. 2020. 6. 5.
오픈지엘 이동 회전 크기 복합 변환 void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); /*기준선*/ glBegin(GL_LINES); glColor3f(1, 0, 0); // X glVertex3f(-1, 0, 0); glVertex3f(1, 0, 0); glColor3f(0, 1, 0); // Y glVertex3f(0, -1, 0); glVertex3f(0, 1, 0); glColor3f(0, 0, 1); // Z glVertex3f(0, 0, -1); glVertex3f(0, 0, 1); glEnd(); glTranslatef(0.7, 0.7, 0); glRotatef(45, 0, 0, 1); glScalef(2, 2, 2); /*P 사각형*/ glBegin(GL_POLYGON); glColor3.. 2020. 5. 23.
오픈지엘 마우스 클릭으로 다수의 선 그리기 마우스 클릭으로 다수의 선 그리기 GLint TopLeftX, TopLeftY, BottomRightX, BottomRightY; void MyDisplay() { glColor3f(255, 0, 0); glLineWidth(2.0); glBegin(GL_LINES); glVertex3f(TopLeftX / 300.0, (300 - TopLeftY) / 300.0, 0.0); glVertex3f(BottomRightX / 300.0, (300 - BottomRightY) / 300.0, 0.0); glEnd(); glFlush(); } void MyMouseClick(GLint Button, GLint State, GLint X, GLint Y) { if (Button == GLUT_LEFT_BUTTON.. 2020. 5. 21.
그래픽스 시작 OpenGL 프로그래밍을 위해서는 gl.h glu.h가 필요합니다. 또한, 콘솔 프로그래밍 등을 위해서는 OpenGL 프로그래밍을 지원해주기 위한 유틸리티 라이브러리인 glut.h 파일가 필요합니다. gl.h와 glu.h 파일은 보통 Visual Studio에 포함되어 있습니다.- Visual Studio 버전에 따라 다르겠지만 다음 그림 참조- 검색을 했는데 gl.h glu.h가 없는 경우 새로운 Visual Studio 설치가 가장 편리함 GLUT 설치는 2 페이지의 GLUT 설치 항목을 참고하기 바랍니다. 간단한 예제 (4, 5 페이지 참고)- 코드 1 또는 코드 2를 입력한 후에 Visual Studio에서 함수에 오류(빨간 밑줄)가 발생하면 안됨- 코드 중에서 gl로 시작하는 함수가 오류가 나는.. 2020. 5. 13.
openGL Retained mode(보류모드) / 디스플레이 리스트 보류모드 (Retained mode)에서는 미리 정의된 물체를 컴파일된 형태로 재사용을 수행함으로서 매번 그림을 그려내는 등의 반복적인 작업을 제거하여 계산 등의 속도 향상을 모색할 수 있다. OpenGL에서는 디스플레이 리스트를 만들어서 사용함으로서 보류모드를 구현할 수 있다. #include #include #include GLuint g_objectID = -1; GLint GenerateCallList() { GLint lid = glGenLists(1); glNewList(lid, GL_COMPILE); glColor3f(1.0f, 0.0f, 0.0f); glBegin(GL_POLYGON); glVertex3f(0.5, 0.5, 0.0); glVertex3f(-0.5, 0.5, 0.0); glV.. 2020. 5. 6.
openGL keyboad, timer / 키보드 콜백과 타이머 타이머를 이용하여 계속 회전 시키기 #include #include #include #include #include int zRotate = 0; unsigned char key = 'z'; void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); //이전 상태 초기화 후 변환 glRotatef(zRotate, 0.0, 0.0, 1.0); //z를 중심을 회전 glutWireTeapot(0.5); glFlush(); } void MyKeyboard(unsigned char KeyPressed, int X, int Y) { key = KeyPressed; switch (KeyPressed) { case 'Q':case'q': exit(0); b.. 2020. 5. 3.
openGL 더블 버퍼링 물체들을 프레임 버퍼에 그려내는 과정에서 미완성인 상태의 결과를 디스플레이 컨트롤러가 읽어서 화면에 그대로 출력하게 된다면 화면 상에는 그림이 이상하게 나타난다. 이를 해결하기 위한 방법이 프레임 버퍼를 2개 두고서 그리는 버퍼와 읽어가는 버퍼를 다르게 처리하고 두 버퍼를 교환(Swap)하는 방법을 적용하면 된다. 프론트 버퍼의 내용을 화면에 출력할 때 백 버퍼에 다음 그림을 그려주고 백 버퍼의 내용이 화면에 출력될 때는 프론트 버퍼에 그림을 그려주는 방식 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 사용 #include #include #include #include #include #include using namespace std; void MyDisplay() .. 2020. 5. 2.
외부라이브러리 추가하기, 헤더파일 추가하기 https://blessingdev.wordpress.com/2017/09/26/visual-studio%EC%97%90-%EC%99%B8%EB%B6%80-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0/ Visual Studio에 외부 라이브러리 추가하기 Visual Studio에서 외부 라이브러리를 연결하는 법을 스크린샷으로 하나씩 설명해 놓았습니다. blessingdev.wordpress.com 2020. 4. 28.
OpenGL 키보드 콜백 회전 회오리 #include #include #include #include #include #include using namespace std; int zRotate = 0; void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); //이전 상태 초기화 후 변환 glRotatef(zRotate, 0.0, 0.0, 1.0); //z를 중심을 회전 glutSolidTeapot(0.5); glFlush(); } void MyKeyboard(unsigned char KeyPressed, int X, int Y) { switch (KeyPressed) { case 'Q':case'q': exit(0); break; case 'Z': zRotate += 10; b.. 2020. 4. 25.