2012-03-22 184 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编程”),并仔细阅读第几章。这将帮助你远远超过你对你的问题的任何答案。你似乎还没有掌握基本概念。这绝不意味着没有人会因为这种知识而生出任何侮辱。

要将您想要做的事情归档,您可能需要特别注意:操作矩阵堆栈,场景图,对象空间与世界空间与相机空间以及一般转换。

干杯 凯

相关问题