PDA

View Full Version : glDrawElements (indices)



02-12-2002, 06:39 PM
For the love of god.. why doesnt this display
correctly? I know it has something to do
with the indices but I'm not sure whats wrong
with whats given..




float yrot=45;

float verts[] = { -100.0, -100.0, 0,
100.0, -100.0, 0,
-100.0,100.0, 0,
100.0,100.0, 0 };

unsigned int indices[] = { 2,0,3,
1,3,0 };

float norms[] = { 0.0,0.0,1.0,
0.0,0.0,1.0 };

void Init()
{
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glShadeModel(GL_FLAT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

glVertexPointer(3,GL_FLOAT,0,verts);
glNormalPointer(GL_FLOAT,0,norms);
}
void RenderScene()
{
glTranslatef(0,0,-300);

glRotatef(yrot,0,1,0);

glColor3f(1,0,1);
glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,indi ces);
}
void OnDraw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

RenderScene();

glFlush();
glutSwapBuffers();
}
void OnKeyDown(unsigned char key, int x, int y)
{

}

void OnAnimate(void)
{
if (animate) {
yrot+=0.01;
if (yrot>360.0f)
yrot=0.0f;

glutPostRedisplay();
}
}
void OnResize(int w, int h)
{
glMatrixMode (GL_MODELVIEW);
glViewport (0, 0, w, h);
glLoadIdentity();

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

float fAspect;
if (H > 0)
fAspect = GLfloat(w)/GLfloat(h);
else // Don't divide by zero, not that we should ever run into that.
fAspect = 1.0f;

float fNearPlane = 1.0f;
float fFarPlane = 1000.0f;

gluPerspective(45.0f, fAspect, fNearPlane, fFarPlane);
glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char *argv[])
{
glutInitDisplayMode(GLUT_DEPTH | GLUT_RGBA| GLUT_DOUBLE);
glutInitWindowSize(600, 400);
glutCreateWindow("GLUT template");

glutDisplayFunc(OnDraw);
glutKeyboardFunc(OnKeyDown);
glutReshapeFunc(OnResize);
glutIdleFunc(OnAnimate);

//glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);

Init();

glutSwapBuffers();
glutMainLoop();

return 0;
}

zed
02-13-2002, 01:42 AM
in what way doesnt it display correctly?

btw u have only 2 norms yet 6 vertices, they both should be 6

02-13-2002, 05:50 AM
Are you saying that glDrawElements is
expecting vertex normals instead of face
normals? Is there a way to specify face
normals with glDrawElements?

It displays with one face(the first one) un-lit. If I change the indices around it works
but I don't see why that makes a difference.

satan
02-13-2002, 05:30 PM
i am tired to death and did not take a too deep look at your code (i can't stand c anyway - esp not at 3.30h in the morning)
but if a change in indices corrects the problem it could have something to do with the orientation of your triangles

just a guess of someone to tired to think

zed
02-13-2002, 06:13 PM
>>s there a way to specify face
normals with glDrawElements?<<

no