0
저는 OpenGL을 배우려고 간단한 코드를 개발하고 있습니다. GL_LINES
으로 간단한 사각형을 만들었고 화살표 키로 회전하려고했습니다. 좌우로 회전하는 것이 좋을 때는 잘 돌아가지만, 회전 시키려고하면 가끔씩 점프합니다. 나는 실수가이 줄에 있다는 것을 알고 있지만, 그것을 고치는 방법을 모른다 : .OpenGL의 회전 정보
#include <windows.h>
#include <glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdio.h>
#include <math.h>
#define INCREMENTO .1
#define DISTANCIA 50
#define PI 3.1416
float alpha=0;
float beta =0;
void myCamara() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-100.0,100.0f,-100.0,100.0f,-100.0,100.0f);
gluLookAt(((float)DISTANCIA*(float)sin(alpha)*cos(beta)), ((float)DISTANCIA*(float)sin(beta)), ((float)DISTANCIA*cos(alpha)*cos(beta)), 0, 0, 0, 0, 1, 0);
}
void myTeclado(unsigned char tras,int x,int y)
{
switch (tras) {
case 'l':
break;
case 'c':
break;
case 'r':
break;
case 'p':
break;
default:
break;
}
glutPostRedisplay();
}
void myTeclasespeciales(int cursor,int x,int y)
{
switch(cursor)
{
case GLUT_KEY_F1:
break;
case GLUT_KEY_F2:
break;
case GLUT_KEY_F3:
break;
case GLUT_KEY_F4:
break;
case GLUT_KEY_F5:
break;
case GLUT_KEY_F6:
break;
case GLUT_KEY_UP:
beta-=INCREMENTO;
break;
case GLUT_KEY_DOWN:
beta+=INCREMENTO;
break;
case GLUT_KEY_RIGHT:
alpha-=INCREMENTO;
break;
case GLUT_KEY_LEFT:
alpha+=INCREMENTO;
break;
default:
break;
}
if(alpha>PI*2.0 && alpha<=0) alpha=0;
if(beta>=PI*2.0 && beta<=0) beta=0;
glutPostRedisplay();
}
입니까? 각도 값에 나머지 연산자 (%)를 사용해보십시오. 각도가 2 * pi보다 큰 경우 나머지 (베타 % 2 * pi)는 양수가되어 작동해야합니다. 나머지가 음수 인 경우 (음의 각도에서 발생할 수 있음), 나머지 결과에 2 * pi를 추가하십시오! – CodeSurgeon
문제는 도움이되지 않지만'DISTANCIA'를'50.f'로 정의하고'cosf'와'sinf'를 사용하여 캐스팅을 제거하고 가독성을 높일 수 있습니다. – purplepsycho
@ CodeSurgeon 나는 그것을 얻지 않는다, 미안하다 –