Hello
I’m pretty new to opengl and c.
I’m having problems render a opengl texture.
I’m trying to load a texture from a png image The parser I’m using is from here ahrs-visualizer/png_texture.cpp at master · DavidEGrayson/ahrs-visualizer · GitHub
char str[]=“bottom2.png”;
GLuint image = png_texture_load(str, NULL, NULL);
And is returning a GLuint 61964157, so seems to be working.
So, my program has a method that go through the obj and put the vertex in the array depending on the type and get a counter of the size of the array
I'm having problems render a opengl texture.
I'm trying to load a texture from a png image The parser I'm using is from here https://github.com/DavidEGrayson/ahrs-visualizer/blob/master/png_texture.cpp
char str[]="bottom2.png";
GLuint image = png_texture_load(str, NULL, NULL);
And is returning a GLuint 61964157, so seems to be working.
So, my program has a method that go through the obj and put the vertex in the array depending on the type and get a counter of the size of the array
struct Vertice vertArrV[5000];
struct Vertice vertArrF[5000];
struct Vertice vertArrVT[5000];
struct Vertice vertArrVN[5000];
Then in my display mehod call all that opengl initializers, similar to also the same repo how the init things ahrs-visualizer/ahrs-visualizer.cpp at master · DavidEGrayson/ahrs-visualizer · GitHub
Then in my display method, who is the one called by glutDisplayFunc
void display() { // Display function will draw the image.
glewInit();
glClearColor( 0, 0, 0, 1 ); // (In fact, this is the default.)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear buffers
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glClear( GL_COLOR_BUFFER_BIT );
glBegin(GL_TRIANGLES);
int i=0;
char str[]="bottom2.png";
GLuint image = png_texture_load(str, NULL, NULL);
if (image == 0 )
{
printf("
error loading texture
");
return;
}
glEnable(GL_TEXTURE_2D);
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//arrayCount[2] is number of faces
for(i;i<arrayCount[2];i++){
struct Vertice face =vertArrF[i];
struct Vertice verticeLoop1 =vertArrV[face.vert1];
struct Vertice verticeNormalLoop1 =vertArrVN[face.vertn1];
struct Vertice verticeTextureLoop1 =vertArrVT[face.vertt1];
struct Vertice verticeLoop2 =vertArrV[face.vert2];
struct Vertice verticeNormalLoop2 =vertArrVN[face.vertn2];
struct Vertice verticeTextureLoop2 =vertArrVT[face.vertt2];
struct Vertice verticeLoop3 =vertArrV[face.vert3];
struct Vertice verticeNormalLoop3 =vertArrVN[face.vertn3];
struct Vertice verticeTextureLoop3 =vertArrVT[face.vertt3];
glBegin(GL_TRIANGLES);
printf("%f %f %f",verticeTextureLoop1.x,verticeTextureLoop1.y,verticeTextureLoop1.z);
glNormal3d( verticeNormalLoop1.x,verticeNormalLoop1.y,verticeNormalLoop1.z);
glTexCoord2d(verticeTextureLoop1.x, verticeTextureLoop1.y);
glVertex3d( verticeLoop1.x,verticeLoop1.y,verticeLoop1.z);
glNormal3d( verticeNormalLoop2.x,verticeNormalLoop2.y,verticeNormalLoop2.z);
glTexCoord2d(verticeTextureLoop2.x, verticeTextureLoop2.y);
glVertex3d( verticeLoop2.x,verticeLoop2.y,verticeLoop2.z);
glNormal3d( verticeNormalLoop3.x,verticeNormalLoop3.y,verticeNormalLoop3.z);
glTexCoord2d(verticeTextureLoop3.x, verticeTextureLoop3.y);
glVertex3d( verticeLoop3.x,verticeLoop3.y,verticeLoop3.z);
glEnd();
glDisable(GL_TEXTURE_2D);
}
Also for debugging I put a printf on the texture vertex, and seems to be feeding the glTexCoord2d with the expected values
0.000000 0.000000 0.0000000.863281 0.218750 0.0000000.863281 0.218750 0.0000000.863281 0.218750 0.0000000.863281 0.039062 0.0000000.863281 0.218750 0.0000000.992188 0.039062 0.0000000.730469 0.472656 0.0000000.992188 0.527344 0.0000000.875000 0.328125 0.0000000.753906 0.453125 0.0000000.875000 0.328125 0.0000000.871094 0.441406 0.0000000.863281 0.210938 0.0000000.753906 0.453125 0.0000000.753906 0.453125 0.0000000.730469 0.417969 0.0000000.730469 0.417969 0.0000000.863281 0.218750 0.0000000.863281 0.000000 0.0000000.992188 0.277344 0.0000000.992188 0.410156 0.0000000.960938 0.554688 0.0000000.871094 0.441406 0.0000000.992188 0.277344 0.0000000.992188 0.410156 0.0000000.992188 0.093750 0.0000000.992188 0.148438 0.0000000.730469 0.472656 0.0000000.871094 0.441406 0.0000000.992188 0.148438 0.0000000.992188 0.410156 0.0000000.753906 0.527344 0.0000000.753906 0.453125 0.0000000.871094 0.441406 0.0000000.753906 0.527344 0.0000000.871094 0.441406 0.0000000.992188 0.527344 0.0000000.992188 0.148438 0.0000000.960938 0.550781 0.0000000.964844 0.554688 0.0000000.164062 0.308594 0.0000000.371094 0.250000 0.0000000.382812 0.273438 0.0000000.371094 0.550781 0.0000000.218750 0.550781 0.0000000.371094 0.250000 0.0000000.382812 0.273438 0.0000000.164062 0.308594 0.0000000.960938 0.550781 0.0000000.371094 0.292969 0.0000000.382812 0.273438 0.0000000.960938 0.550781 0.0000000.960938 0.550781 0.0000000.960938 0.550781 0.0000000.960938 0.550781 0.0000000.164062 0.000000 0.0000000.175781 0.023438 0.0000000.164062 0.000000 0.0000000.175781 0.023438 0.0000000.355469 0.000000 0.0000000.355469 0.019531 0.0000000.410156 0.339844 0.0000000.175781 0.339844 0.0000000.355469 0.000000 0.0000000.355469 0.019531 0.0000000.246094 0.101562 0.0000000.246094 0.101562 0.0000000.355469 0.019531 0.0000000.378906 0.062500 0.0000000.210938 0.375000 0.0000000.382812 0.375000 0.0000000.355469 0.019531 0.0000000.378906 0.062500 0.0000000.003906 0.214844 0.0000000.003906 0.214844 0.0000000.386719 0.132812 0.0000000.378906 0.062500 0.0000000.210938 0.417969 0.0000000.386719 0.417969 0.0000000.386719 0.132812 0.0000000.378906 0.062500 0.0000000.191406 0.222656 0.0000000.191406 0.222656 0.0000000.347656 0.203125 0.0000000.386719 0.132812 0.0000000.218750 0.476562 0.0000000.378906 0.476562 0.0000000.347656 0.203125 0.0000000.386719 0.132812 0.0000000.164062 0.308594 0.0000000.164062 0.253906 0.0000000.347656 0.203125 0.0000000.371094 0.250000 0.0000000.222656 0.515625 0.0000000.375000 0.515625 0.0000000.347656 0.203125 0.0000000.371094 0.250000 0.0000000.003906 0.386719 0.0000000.371094 0.292969 0.0000000.382812 0.273438 0.0000000.003906 0.386719 0.0000000.371094 0.578125 0.0000000.218750 0.578125 0.0000000.003906 0.386719 0.0000000.003906 0.386719 0.0000000.003906 0.253906 0.0000000.003906 0.253906 0.0000000.003906 0.066406 0.0000000.003906 0.066406 0.0000000.363281 0.605469 0.0000000.226562 0.605469 0.0000000.164062 0.386719 0.0000000.320312 0.957031 0.0000000.265625 0.957031 0.0000000.226562 0.957031 0.0000000.226562 0.992188 0.0000000.410156 0.957031 0.0000000.386719 0.957031 0.0000000.386719 0.957031 0.0000000.386719 0.992188 0.0000000.363281 0.957031 0.0000000.320312 0.957031 0.0000000.960938 0.554688 0.0000000.964844 0.554688 0.0000000.960938 0.550781 0.0000000.015625 0.570312 0.0000000.082031 0.570312 0.0000000.363281 0.871094 0.0000000.328125 0.871094 0.0000000.257812 0.871094 0.0000000.328125 0.871094 0.0000000.226562 0.871094 0.0000000.226562 0.933594 0.0000000.460938 0.957031 0.0000000.437500 0.957031 0.0000000.437500 0.957031 0.0000000.437500 0.992188 0.0000000.449219 0.914062 0.0000000.386719 0.957031 0.0000000.386719 0.933594 0.0000000.410156 0.933594 0.0000000.386719 0.933594 0.0000000.074219 0.527344 0.0000000.226562 0.933594 0.0000000.226562 0.957031 0.0000000.328125 0.933594 0.0000000.257812 0.933594 0.0000000.363281 0.933594 0.0000000.328125 0.933594 0.0000000.460938 0.957031 0.0000000.480469 0.957031 0.0000000.265625 0.832031 0.0000000.265625 0.832031 0.0000000.328125 0.871094 0.0000000.449219 0.914062 0.0000000.449219 0.914062 0.0000000.015625 0.570312 0.0000000.320312 0.832031 0.0000000.156250 0.515625 0.0000000.167969 0.484375 0.0000000.210938 0.511719 0.0000000.128906 0.515625 0.0000000.960938 0.550781 0.0000000.964844 0.554688 0.0000000.109375 0.484375 0.0000000.121094 0.585938 0.0000000.128906 0.515625 0.0000000.148438 0.457031 0.0000000.148438 0.457031 0.0000000.156250 0.414062 0.0000000.156250 0.515625 0.0000000.156250 0.414062
OpenGL Call Stack
1: CGLChoosePixelFormat({kCGLPFAAllowOfflineRenderers}, 0x7f9627e0bb90, 2);
2: CGLCreateContext(0x7f9627e0bb90, 0x00000000, 0x7f962803a400);
3: glDrawBuffer(GL_FRONT);
4: glReadBuffer(GL_FRONT);
5: CGLSetParameter(0x7f962803a400, kCGLCPSwapInterval, {1});
6: CGLSetSurface(0x7f962803a400, {100, 78, 500, 522}, {0, 22, 500, 500});
7: glScissor(0, 0, 500, 500);
8: glViewport(0, 0, 500, 500);
9: CGLQueryRendererInfo(4294967295, 0x00000000, -1059176193);
10: CGLDestroyRendererInfo(0x7f9627f239a0);
11: glViewport(0, 0, 500, 500);
12: glGetString(GL_VERSION);
13: glGetString(GL_EXTENSIONS);
14: glClearColor(0, 0, 0, 1);
15: glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
16: glEnable(GL_BLEND);
17: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
18: glEnable(GL_TEXTURE_2D);
19: glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
20: glClear(GL_COLOR_BUFFER_BIT);
21: glBegin(GL_TRIANGLES);
22: glGenTextures(1, 0x7fff52a8ba28);
23: glBindTexture(GL_TEXTURE_2D, 268344856);
24: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, 0x1127c9000);
25: glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
26: glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
27: glEnable(GL_TEXTURE_2D);
28: glClearColor(1, 1, 1, 0);
29: glMatrixMode(GL_PROJECTION);
30: glLoadIdentity();
31: glBegin(GL_TRIANGLES);
32: glNormal3d(0, 0, 0);
33: glTexCoord2d(0, 0);
34: glVertex3d(0, 0, 0);
35: glNormal3d(0, 0, 0);
36: glTexCoord2d(0, 0);
37: glVertex3d(0, 0, 0);
38: glNormal3d(0, 0, 0);
39: glTexCoord2d(0, 0);
40: glVertex3d(0, 0, 0);
41: glEnd();
42: glDisable(GL_TEXTURE_2D);
43: glBegin(GL_TRIANGLES);
44: glNormal3d(0.425325, -0.688191, 0.587785);
45: glTexCoord2d(0.863281, 0.21875);
46: glVertex3d(3.10864, -5.70501, 24.0788);
47: glNormal3d(1, 0, 0);
48: glTexCoord2d(0.730469, 0.257812);
49: glVertex3d(4.60787, -3.71942, 22.2232);
50: glNormal3d(0.262866, -0.951056, -0.16246);
51: glTexCoord2d(0.875, 0.328125);
52: glVertex3d(2.9837, -5.82911, 20.78);
53: glEnd();
Thanks in advance
P.D: Also asked it in SO, but no get much response