使用本:
#include <stdio.h>
#include <gl/glut.h>
GLfloat rotation = 90.0;
float posX = 0, posY = 0, posZ = 0;
void reshape(int width, int heigth){
/* window ro reshape when made it bigger or smaller*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//clip the windows so its shortest side is 2.0
if (width < heigth) {
glOrtho(-2.0, 2.0, -2.0 * (GLfloat)heigth/(GLfloat)width, 2.0 * (GLfloat)heigth/(GLfloat)width, 2.0, 2.0);
}
else{
glOrtho(-2.0, 2.0, -2.0 * (GLfloat)width/(GLfloat)heigth, 2.0 * (GLfloat)width/(GLfloat)heigth,2.0 , 2.0);
}
// set viewport to use the entire new window
glViewport(0, 0, width, heigth);
}
void rect(){
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(-0.1, -0.2);
glVertex2f(-0.1, 0.2);
glVertex2f(0.1, 0.2);
glVertex2f(0.1, -0.2);
glEnd();
}
void display(){
//Clear Window
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(posX,posY,posZ);
rect();
glPopMatrix();
glFlush();
}
void init(){
// set clear color to black
glClearColor(0.0, 0.0, 0.0, 0.0);
// set fill color to white
glColor3f(1.0, 1.0, 1.0);
//set up standard orthogonal view with clipping
//box as cube of side 2 centered at origin
//This is the default view and these statements could be removed
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}
float move_unit = 0.1f;
void keyboardown(int key, int x, int y)
{
switch (key){
case GLUT_KEY_RIGHT:
posX+=move_unit;;
break;
case GLUT_KEY_LEFT:
posX-=move_unit;;
break;
case GLUT_KEY_UP:
posY+=move_unit;;
break;
case GLUT_KEY_DOWN:
posY-=move_unit;;
break;
default:
break;
}
glutPostRedisplay();
}
int main(int argc, char** argv){
//initialize mode and open a windows in upper left corner of screen
//Windows tittle is name of program
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0, 0);
glutCreateWindow("Practice 1");
glutDisplayFunc(display);
init();
glutSpecialFunc(keyboardown);
glutMainLoop();
}
您是否收到關鍵事件?怎麼了 ? – ixe013
1st:您需要告訴我們什麼不適用於您的解決方案。第二:嘗試將你的問題改爲一般問題,而不是「調試我的代碼」。 – Kromster
翻譯正在使對象在X軸上向上移動1個單位嗎?所以在「x」中多邊形的所有值都將上升一個單位而不是-0.1,圖像中的一個將爲0.0,0.1將爲0.2。我也發現奇怪的是,如果我按下右邊的按鈕,廣場將保持指向90度。哪種功能可以讓我在這種情況下向右轉90度,讓它指向0度?所有這些都沒有改變escene,因爲我認爲rotatef改變了視圖,而不是真正的對象的物理位置 –