Hello,
excuse for my English.
I am learning OpenGL ES and I have a problem that I can’t solve. I have 2 boxes (buildings) and I “walk around” it. I move the camera in Z. When I arrive at the end of the first building, the building continue. If I continue, the building disappear then the scene change totally.
How could I insert screenshot from my computer ?
thanks
My code :
#pragma comment(lib, "libGLES_CM.lib")
#pragma comment(lib, "ug.lib")
#include "GLES/ug.h"
int w = 0;
int h = 0;
float X,Y,Z;
float Zinit = 0;
float Yinit = 2;
float Xinit = 4;
float XanglRight,XanglLeft;
GLuint texture[1];
GLfloat sol[] = {
-50,0,10,
-50,0,-100,
60,0,10,
60,0,-100,
};
GLfloat box1[] = {
// FRONT
0, 0, -10,
3, 0, -10,
0, 7, -10,
3, 7, -10,
// BACK
0, 0, -30,
3, 0, -30,
0, 7, -30,
3, 7, -30,
// LEFT
0, 0, -30,
0, 7, -30,
0, 0, -10,
0, 7, -10,
// RIGHT
3, 0, -30,
3, 7, -30,
3, 0, -10,
3, 7, -10,
// TOP
0, 7, -30,
3, 7, -30,
0, 7, -10,
3, 7, -10,
// BOTTOM
0, 0, -30,
3, 0, -30,
0, 0, -10,
3, 0, -10,
};
GLfloat box2[] = {
// FRONT
0, 0, -7,
3, 0, -7,
0, 5, -7,
3, 5, -7,
// BACK
0, 0, -9,
3, 0, -9,
0, 5, -9,
3, 5, -9,
// LEFT
0, 0, -9,
0, 5, -9,
0, 0, -7,
0, 5, -7,
// RIGHT
3, 0, -9,
3, 5, -9,
3, 0, -7,
3, 5, -7,
// TOP
0, 5, -9,
3, 5, -9,
0, 5, -7,
3, 5, -7,
// BOTTOM
0, 0, -9,
3, 0, -9,
0, 0, -7,
3, 0, -7,
};
GLfloat box3[] = {
// FRONT
0, 0, -10,
4, 0, -10,
0, 5, -10,
4, 5, -10,
// BACK
0, 0, -15,
4, 0, -15,
0, 5, -15,
4, 5, -15,
// LEFT
0, 0, -15,
0, 5, -15,
0, 0, -10,
0, 5, -10,
// RIGHT
4, 0, -15,
4, 5, -15,
4, 0, -10,
4, 5, -10,
// TOP
0, 5, -15,
4, 5, -15,
0, 5, -10,
4, 5, -10,
// BOTTOM
0, 0, -15,
4, 0, -15,
0, 0, -10,
4, 0, -10,
};
void draw();
void init(){
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glClearColor(0,0.6,1,1);//bleu
glClearDepthf(1);
glEnableClientState(GL_VERTEX_ARRAY);//pour desiner
glShadeModel(GL_FLAT); // enleve les dégradés de couleur
X = Xinit;
Y = Yinit;
Z = Zinit;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
ugluPerspectivef(45.0f, w/h, 1.0f, 100.0f);
//ugluPerspectivef(45, 1.0f * w / h, 0, 100.0);
//glOrthof(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 20.0f);
//glFrustumf(-3,16,-1,10,1,100);
}
void display(UGWindow uwin){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
ugluLookAtf(
X, Y, Z,
X, Y, Z-1,
0, 1, 0);
draw();
glFlush();
ugSwapBuffers(uwin);
}
void draw(){
glVertexPointer(3, GL_FLOAT, 0, sol);
glColor4f(1, 1, 1, 1);//blanc
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glVertexPointer(3, GL_FLOAT, 0, box1);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);//red
//glColor4f(0.8, 0.8, 0.8, 1.0f);//gris
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);//front
glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);//back
glDrawArrays(GL_TRIANGLE_STRIP, 8, 4);//left
glDrawArrays(GL_TRIANGLE_STRIP, 12, 4);//right
glDrawArrays(GL_TRIANGLE_STRIP, 16, 4);//top
glDrawArrays(GL_TRIANGLE_STRIP, 20, 4);//bottom
glTranslatef(5,0,0);
glVertexPointer(3, GL_FLOAT, 0, box2);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f); //green
//glColor4f(0.6, 0.6, 0.6, 1.0f);//
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);//front
glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);//back
glDrawArrays(GL_TRIANGLE_STRIP, 8, 4);//left
glDrawArrays(GL_TRIANGLE_STRIP, 12, 4);//right
glDrawArrays(GL_TRIANGLE_STRIP, 16, 4);//top
glDrawArrays(GL_TRIANGLE_STRIP, 20, 4);//bottom
glTranslatef(5,0,0);
glVertexPointer(3, GL_FLOAT, 0, box3);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//blue
// glColor4f(0.4, 0.4, 0.4, 1.0f);//
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);//front
glDrawArrays(GL_TRIANGLE_STRIP, 4, 4);//back
glDrawArrays(GL_TRIANGLE_STRIP, 8, 4);//left
glDrawArrays(GL_TRIANGLE_STRIP, 12, 4);//right
glDrawArrays(GL_TRIANGLE_STRIP, 16, 4);//top
glDrawArrays(GL_TRIANGLE_STRIP, 20, 4);//bottom
}
void keyboard(UGWindow uwin, int key, int x, int y){
switch(key){
case 'z' :
Z -= 1;
ugPostRedisplay(uwin);
break;
case 's':
Z += 1;
ugPostRedisplay(uwin);
break;
case 'q' :
X -= 1;
ugPostRedisplay(uwin);
break;
case 'd' :
X += 1;
ugPostRedisplay(uwin);
break;
case 'r' :
Y += 1;
ugPostRedisplay(uwin);
break;
case 'f' :
Y -= 1;
ugPostRedisplay(uwin);
break;
}
}
int main(){
UGCtx ug = ugInit();
w = 250;
h = 250;
UGWindow uwin = ugCreateWindow(ug, "", "proto", w, h, 100, 100);
init();
ugDisplayFunc(uwin, display);
ugKeyboardFunc(uwin, keyboard);
ugMainLoop(ug);
return 0;
}