게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
opengl 질문 다시 드립니다.
게시물ID : programmer_13826짧은주소 복사하기
작성자 : 연한분홍
추천 : 0
조회수 : 676회
댓글수 : 5개
등록시간 : 2015/10/12 22:28:06
#include <glut.h>
#include <stdlib.h>

float vx = 0, vy = 0;
void MyDisplay() {

glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.5, 0.5, 0.5);
glBegin(GL_POLYGON);
glVertex3f(-0.5 + vx, -0.5 + vy, 0.0);
glVertex3f(0.5 + vx, -0.5 + vy, 0.0);
glVertex3f(0.5 + vx, 0.5 + vy, 0.0);
glVertex3f(-0.5 + vx, 0.5 + vy, 0.0);
glEnd();
glFlush();
}

void MyKeyboard(unsigned char key, int x, int y) {

switch (key) {
if (vx > 0.5 || vy > 0.5 || vx < -0.5 || vy < -0.5)
break;
case 'Q':
exit(0); break;
case 'q':
exit(0); break;
case 27:
exit(0); break;
case 'v':
case 'V':
if (vy >= 0.5)
break;
else
{
vy = vy + 0.1; break;
}
case 'f':
case 'F':
if (vx > 0.5)
break;
else
{
vx = vx + 0.1; break;
}
case 'a':
case 'A':
if (vx <= -0.5)
break;
else
{
vx = vx - 0.1; break;
}
case 'r':
case 'R':
if (vy <= -0.5)
break;
else
{
vy = vy - 0.1; break;
}
case 'g':
case 'G':
/*if (vx == )
for (; vx < 0.4;){
vx = vx + 0.1;
}
for (; vy > -0.4;){
vy = vy - 0.1;
}
for (; vx > -0.4;){
vx = vx - 0.1;
}
for (; vy < 0.4;){
vy = vy + 0.1;
}
break;*/
case 't':
case 'T':
if (vy != 0.5)
vy = vy + 0.1;
else if(vy == 0.5 && vx < 0.5)
vx = vx + 0.1;
else if(vx == 0.5&& vy!= -0.5)
vy = vy - 0.1;
else if (vy == -0.5 && vx > -0.5)
vx = vx - 0.1;
else if (vx == -0.5 && vy < 0.5)
vy = vy + 0.1;
else
break;
}
glutPostRedisplay();
}

void MySpecial(int key, int x, int y) {

switch (key) {
case GLUT_KEY_F1:
break;
case GLUT_KEY_LEFT:
if (vx < -0.4)
break;
else
{
vx = vx - 0.1; break;
}
break;
case GLUT_KEY_UP:
if (vy > 0.4)
break;
else
{
vy = vy + 0.1; break;
}
break;
case GLUT_KEY_DOWN:
if (vy < -0.4)
break;
else
{
vy = vy - 0.1; break;
}
break;
case GLUT_KEY_RIGHT:
if (vx > 0.4)
break;
else
{
vx = vx + 0.1; break;
}
break;
default:
break;
}
glutPostRedisplay();
}

void MyInit() {
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}

int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowSize(300, 300);
glutInitWindowPosition(0, 0);
glutCreateWindow("Keyboard Calback");
MyInit();
glutDisplayFunc(MyDisplay);
glutKeyboardFunc(MyKeyboard);
glutSpecialFunc(MySpecial);

glutMainLoop();
return 0;
}
g 및 G키를 누르면 4개의 Vertex좌표가 동일하게 시계 방향으로 0.1씩 연속적으로 이동하면서 Window를 한바퀴 회전
(4개의 Vertex좌표가 어디에 있든지 상관없이 구동)
Page Up키를 누르면 4개의 Vertex좌표로 이루어진 폴리곤이 각 방향으로 0.1씩 연속적으로 확대
(4개의 Vertex좌표가 어디에 있든지 상관없이 구동, 폴리곤의 크기가 가시적으로 최대 확대일 때 더 이상 확대가 안되게 고정)
위의 모든 경우에서 동일하게 4개의 Vertex좌표가 Window 영역을 벗어나지 말 것.

제 머리를 아무리 쥐어 짜도 저 이상 진전이 없습니다..ㅠ
과제같은건 아니고 수업시간에 지나간 부분인데 이해가 안돼서 혼자 해보는 중인데
붙잡고 있어봐야 나아지지도 않고 계속 제자리걸음만 하다보니 자괴감만 드네요...
물론 남이 알려주는거 그대로 받아들여봐야 도움 안된다지만
2주동안 이거 하나가지고 시간을 낭비하고 있는게 더 아니다 싶어서 질문글을 올리게 됐습니다.
작은 조언이라도 감사히 받겠습니다. 부탁드립니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호