Hello,
I’ve been working with OpenGL off and on and I needed a program to read my data files and display them on the screen. I do have one that was fixed by someone in this help forum and I’ve been using that so far.
I now need the code to work on any number of files by reading the images one at a time instead of loading them into an array and then reading them out. I was told by someone that all I needed was space for one image and I could use that to cycle through my data files and display them on the screen. The program does display something but there’s a lot of flickering and you can’t see anything at all.
If someone could point out what is wrong, I would be very grateful. Here’s the code for the animation display.
/* Movie player: plays movies with an indeterminate number of files */
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
GLint counter = 0;
GLuint *image;
GLfloat s;
GLint n = 296;
GLint m = 128;
GLint k = 255;
void myidle()
{
counter++;
fprintf(stderr, "counter is %d
", counter );
glutPostRedisplay();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glRasterPos2i(0, 0);
glDrawPixels(n, m, GL_RGB, GL_UNSIGNED_INT, image);
glutSwapBuffers();
}
void bitmap()
{
FILE *fd;
int k, nm;
int one;
char filename1[20];
int i;
int red, green, blue;
fprintf(stderr,"counter is %d
", counter );
nm = n*m;
sprintf(filename1,“nldat/%05d.dat”, counter );
while ( ( fd = fopen( filename1, “r”) ) != NULL ) {
image = malloc(3*sizeof(GLuint)*nm);
s = 255./k;
for(i = 0; i < nm; i++)
{
fscanf(fd, "%d
", &one );
red = one;
blue = one;
green = one;
image[3i + 3] = red;
image[3i + 2] = green;
image[3*i + 1] = blue;
}
}
}
void myreshape(int h, int w)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, (GLfloat) n, 0.0, (GLfloat) m);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0, 0, h, w);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(n, m);
glutInitWindowPosition(0, 0);
glutCreateWindow(“image”);
glutReshapeFunc(myreshape);
bitmap();
glutDisplayFunc(display);
glutIdleFunc(myidle);
glPixelTransferf(GL_RED_SCALE, s);
glPixelTransferf(GL_GREEN_SCALE, s);
glPixelTransferf(GL_BLUE_SCALE, s);
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);
glClearColor(1.0, 1.0, 1.0, 1.0);
glutMainLoop();
return 0;
}
Thanks a lot in advance.