2012-03-22 250 views
-1

我用幾個對象(房屋,建築物)創建了一個程序。我想移動一個對象(方形)而不影響其他對象,但是當我做其他對象消失時。在不影響其他對象的情況下移動對象(使用opengl)

如何在不導致現有對象消失的情況下移動對象?

#include <glut.h> 
#include <stdlib.h> 

float wall1[4][2] = {{100,200},{100,100},{300,100},{300,200}}; 
float roof1 [3][2] = {{100,200},{200,250},{300,200}}; 
float door1 [4][2] = {{175,100},{175,150},{225,150},{225,100}}; 

float wall2 [4][2] = {{500,600},{500,500},{700,500},{700,600}}; 
float roof2 [3][2] = {{500,600},{600,650},{700,600}}; 
float door2 [4][2] = {{575,500},{575,550},{625,550},{625,500}}; 

float wall3[4][2] = {{100,1000},{100,900},{300,900},{300,1000}}; 
float roof3 [3][2] = {{100,1000},{200,1050},{300,1000}}; 
float door3 [4][2] = {{175,900},{175,950},{225,950},{225,900}}; 

float wall4[4][2] = {{900,200},{900,100},{1100,100},{1100,200}}; 
float roof4 [3][2] = {{900,200},{1000,250},{1100,200}}; 
float door4 [4][2] = {{975,100},{975,150},{1025,150},{1025,100}}; 


float wall5[4][2] = {{200,1300},{200,1200},{400,1200},{400,1300}}; 
float roof5 [3][2] = {{200,1300},{300,1350},{400,1300}}; 
float door5 [4][2] = {{275,1200},{275,1250},{325,1250},{325,1200}}; 

float wall6[4][2] = {{1100,700},{1100,600},{1300,600},{1300,700}}; 
float roof6 [3][2] = {{1100,700},{1200,750},{1300,700}}; 
float door6 [4][2] = {{1175,600},{1175,650},{1225,650},{1225,600}}; 


float build1[4][2]={{1000,1000},{1100,1000},{1100,1400},{1000,1400}}; 
float build2[4][2]={{1100,1000},{1200,1000},{1200,1300},{1100,1300}}; 



void myinit() 

{ 
glClearColor(0.0,1.0,0.0,1.0); 
glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0,1500,0,1500); 
} 

void drawhouse() 

{ 

int i; 
glColor3f(1,1,0); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(wall1[i]); 
glEnd(); 
glColor3f(10,0,0); 
glBegin(GL_POLYGON); 
for(i=0;i<3;i++) 
    glVertex2fv(roof1[i]); 
glEnd(); 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(door1[i]); 
glEnd(); 
glColor3f(1,1,0); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(wall2[i]); 
glEnd(); 
glColor3f(10,0,0); 
glBegin(GL_POLYGON); 
for(i=0;i<3;i++) 
    glVertex2fv(roof2[i]); 
glEnd(); 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(door2[i]); 
glEnd(); 
glColor3f(1,1,0); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(wall3[i]); 
glEnd(); 
glColor3f(10,0,0); 
glBegin(GL_POLYGON); 
for(i=0;i<3;i++) 
    glVertex2fv(roof3[i]); 
glEnd(); 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(door3[i]); 
glEnd(); 

glColor3f(1,1,0); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(wall4[i]); 
glEnd(); 
glColor3f(10,0,0); 
glBegin(GL_POLYGON); 
for(i=0;i<3;i++) 
    glVertex2fv(roof4[i]); 
glEnd(); 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(door4[i]); 
glEnd(); 
glColor3f(1,1,0); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(wall5[i]); 
glEnd(); 
glColor3f(10,0,0); 
glBegin(GL_POLYGON); 
for(i=0;i<3;i++) 
    glVertex2fv(roof5[i]); 
glEnd(); 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(door5[i]); 
glEnd(); 
glColor3f(1,1,0); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(wall6[i]); 
glEnd(); 
glColor3f(10,0,0); 
glBegin(GL_POLYGON); 
for(i=0;i<3;i++) 
    glVertex2fv(roof6[i]); 
glEnd(); 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(door6[i]); 
glEnd(); 
glutPostRedisplay(); 

} 

void company() 

{ 

int i; 
glColor3f(0,0,1); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(build1[i]); 
glEnd(); 
glColor3f(0.5,0,0.5); 
glBegin(GL_POLYGON); 
for(i=0;i<4;i++) 
    glVertex2fv(build2[i]); 
glEnd(); 
glutPostRedisplay(); 

} 

void path1(int value) 

{ 

float i; 

for(i=0;i<270;i=i+0.1) 
{ 
glColor3f(1.0,0.0,0.0); 
glBegin(GL_POLYGON); 
glVertex2f(1000.0+i,1000.0-i); 
glVertex2f(1050.0+i,1000.0-i); 
glVertex2f(1050.0+i,1050.0-i); 
glVertex2f(1000.0+i,1050.0-i); 
glEnd(); 
glClear(GL_COLOR_BUFFER_BIT); 
glutTimerFunc(200000,drawhouse, 0); 
glFlush(); 

} 

} 



void display() 

{ 

glClear(GL_COLOR_BUFFER_BIT); 
drawhouse(); 
company(); 
glPushMatrix(); 
path1(0); 
glPopMatrix(); 

glFlush(); 
glutSwapBuffers(); 

} 

void main(int argc,char** argv) 

{ 

glutInit(&argc,argv); 
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
glutInitWindowSize(800,800); 
glutInitWindowPosition(0,0); 
glutCreateWindow("House "); 
myinit(); 
glutDisplayFunc(display); 
glutMainLoop(); 

} 
+1

我沒有downvote,但我有一種感覺,它可能爲代碼轉儲。只發布相關的代碼是一個很好的練習,原因有兩個1)它表明你已經嘗試了不同的技術來解決問題,並在一定程度上確定了有問題的領域,2)它使得閱讀更容易。 – 2012-03-22 16:18:55

+1

並且爲了使它更易於閱讀,正確的縮進也有所幫助。 – Bart 2012-03-22 19:51:50

+0

你是什麼意思移動一個對象?你想製作像相機嗎? – Aleks 2012-03-23 02:34:11

回答

2

去當地的圖書館,並獲得通常的OpenGL的書籍之一(例如,「開始的OpenGL編程」),並仔細閱讀第幾章。這將幫助你遠遠超過你對你的問題的任何答案。你似乎還沒有掌握基本概念。這絕不意味着沒有人會因爲這種知識而生出任何侮辱。

要將您想要做的事情歸檔,您可能需要特別注意:操作矩陣堆棧,場景圖,對象空間與世界空間與相機空間以及一般轉換。

乾杯 凱

相關問題