Im using Vincent Implementation… i tried use Rasteroid but i get the same problem
The variable Vertex im allocating and getting the vertex at runtime.
The normal im calculating and normalizing the calculated values.
#pragma comment(lib, "libGLES_CM.lib")
#define GLUTES_STATIC
#include <GLES/glutes.h>
#include <GLES/glues.h>
#include <GLES/glues.c>
#include "main.h"
//CONST
const GLfloat PI = 3.14159265f;
const int TAM = 60;
int VerticeCount = 0; //Vertex count of the scene
GLfloat* Vertex; //VerticeCount*3
GLfloat* Normal;
int regiaoAtual[] = {-1, -1, -1};
GLfloat xrot = 0;
GLfloat yrot = 0.0f;
GLfloat transx = 0.0f;
GLfloat transy = 0.0f;
GLfloat transz = 0.0f;
bool backFace = true;
char* windowCaption = "Wendel - OpenGL ES ";
void init()
{
/*-=-=-=-=-=-=-=[ Lights ]=-=-=-=-=-=-*/
GLfloat matAmbient[] = { 0.6f, 0.6f, 0.6f, 1.0f };
GLfloat matDiffuse[] = { 0.8f, 0.4f, 0.4f, 1.0f };
GLfloat lightAmbient[] = { 0.8f, 0.6f, 0.6f, 1.0f };
GLfloat lightDiffuse[] = { 0.6f, 0.3f, 0.3f, 1.0f };
//SPOT LIGHT
GLfloat lightPos1[]= { 20.0, 20.0, 20.0,1.0};
GLfloat lightPos2[]= {-20.0, 20.0, 20.0,1.0};
GLfloat lightPos3[]= { 20.0, 20.0,-20.0,1.0};
GLfloat lightPos4[]= {-20.0, 20.0,-20.0,1.0};
GLfloat spotDir1[]= {-0.5f,-0.5f,-0.5f};
GLfloat spotDir2[]= { 0.5f,-0.5f,-0.5f};
GLfloat spotDir3[]= {-0.5f,-0.5f, 0.5f};
GLfloat spotDir4[]= { 0.5f,-0.5f, 0.5f};
glLightfv(GL_LIGHT0, GL_AMBIENT , lightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE , lightDiffuse);
glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos1);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir1);
glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 40.0); // set cutoff angle
glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0); // set focusing strength
glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos2);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir2);
glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 40.0); // set cutoff angle
glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0); // set focusing strength
glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos3);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir3);
glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 40.0); // set cutoff angle
glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0); // set focusing strength
glLightfv(GL_LIGHT1, GL_DIFFUSE , lightDiffuse);
glLightfv(GL_LIGHT1, GL_AMBIENT , lightAmbient);
glLightfv(GL_LIGHT1, GL_POSITION, lightPos4);
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spotDir4);
glLightf (GL_LIGHT1, GL_SPOT_CUTOFF, 40.0); // set cutoff angle
glLightf (GL_LIGHT1, GL_SPOT_EXPONENT, 30.0); // set focusing strength
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matAmbient);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matDiffuse);
glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, 20.0f);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHT2);
glEnable(GL_LIGHT3);
/*-=-=-=-=-=-=-=[ init ]=-=-=-=-=-=-*/
timePrev = GetTickCount();
glDepthFunc(GL_LEQUAL);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
if (backFace){ glCullFace(GL_BACK); glEnable(GL_CULL_FACE); }
// Clear
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepthf(1.0f);
glVertexPointer(3, GL_FLOAT, 0, Vertex);
glNormalPointer(GL_FLOAT, 0, Normal);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
}
void display()
{
// Clear
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepthf(1.0f);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
// rotation
GLfloat dx = (GLfloat)sin(yrot*PI/180.0f);
GLfloat dz = (GLfloat)cos(yrot*PI/180.0f);
GLfloat dy = (GLfloat)sin(xrot*PI/180.0f);
GLfloat dz2= (GLfloat)cos(xrot*PI/180.0f);
// Camera
glLoadIdentity();
gluLookAtf(
transx , transy , transz, //Eye
transx-dx , transy+dy, transz-dz-dz2+1.0f, //Center
0.0f , 1.0f, 0.0f ); //Up
// draw
glDrawArrays(GL_TRIANGLES, 0, VerticeCount);
glFlush();
glutSwapBuffers();
}
void idle()
{
glutPostRedisplay();
}
void special(int key, int x, int y)
{
GLfloat passo = 0.5f;
GLfloat rotacao = 10;
GLfloat dx = (GLfloat)sin(yrot*PI/180.0);
GLfloat dz = (GLfloat)cos(yrot*PI/180.0);
switch(key)
{
case GLUT_KEY_F1 : yrot += rotacao; break;
case GLUT_KEY_F2 : yrot -= rotacao; break;
case GLUT_KEY_HOME : transy += passo; break;
case GLUT_KEY_END : transy -= passo; break;
case GLUT_KEY_LEFT :
transx -= passo*dz;
transz += passo*dx;
break;
case GLUT_KEY_RIGHT :
transx += passo*dz;
transz -= passo*dx;
break;
case GLUT_KEY_UP :
transz -= dz*passo;
transx -= dx*passo;
break;
case GLUT_KEY_DOWN :
transz += dz*passo;
transx += dx*passo;
break;
}
glutPostRedisplay();
}
void reshape(int width, int height)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (!height)
height = 1;
glViewport(0, 0, width, height);
gluPerspectivef(45.0f, 1.0f * width / height, 1.0f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void freememory(){
delete[] Vertex;
delete[] Normal;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE);
glutCreateWindow(windowCaption);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutSpecialFunc(special);
glutIdleFunc(idle);
glutCreateMenu(menu);
glutAddMenuEntry("Quit", 1);
glutAttachMenu(GLUT_LEFT_BUTTON);
glutMainLoop();
freememory();
return 0;
}
void menu(int entry)
{
switch(entry)
{
case 1 : exit(0); break;
}
}