0
我正在開發一個簡單的代碼,試圖學習一些OpenGL。我用GL_LINES
做了一個簡單的正方形,我試着用箭頭鍵旋轉它們。當它左右旋轉時,它會很順利,但如果我嘗試上下旋轉它,有時會跳躍。我知道錯誤在這一行,但我不知道如何解決它:if(beta>=PI*2.0 && beta<=0) beta=0;
。關於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();
}
我假設你想保持你的α和β角0到2 * pi之間,對不對?嘗試在角度值上使用餘數(%)運算符。如果你的角度大於2 * pi,則餘數(beta%2 * pi)將是正數,並且應該起作用。如果餘數爲負數(可能在負角度情況下出現),那麼只需將2 * pi加到餘數結果中! – CodeSurgeon
它不會幫助你解決問題,但是你可以將'DISTANCIA'定義爲'50.f',並使用'cosf'和'sinf'來移除轉換並提高可讀性。 – purplepsycho
@CodeSurgeon我不明白,對不起 –