2017-11-03 16 views
0

OpenGLテクスチャのレンダリングに問題があります。OpenGLテクスチャglTexCoord2dが描画されていません

私は私が使用しているパーサはここhttps://github.com/DavidEGrayson/ahrs-visualizer/blob/master/png_texture.cpp

char str[]="bottom2.png"; 
GLuint image = png_texture_load(str, NULL, NULL); 

そしてGLuint 61964157を返しているからであるPNG画像 からテクスチャをロードしようとしているので、動作しているようです。

だから、私のプログラムは、OBJを通過し、私の表示mehod呼び出しで

struct Vertice vertArrV[5000]; 
struct Vertice vertArrF[5000]; 
struct Vertice vertArrVT[5000]; 
struct Vertice vertArrVN[5000]; 

次に、配列の大きさのカウンターを種類に応じて、配列内の頂点を入れてもらう方法があります同じレポどのように初期化物事https://github.com/DavidEGrayson/ahrs-visualizer/blob/master/ahrs-visualizer.cpp#L339

その後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=1; 
    char str[]="knight.png"; 
    GLuint image = png_texture_load(str, NULL, NULL); 

    if (image == 0) 
    { 
     printf("\n error loading texture \n"); 
     return; 
    } 

    glClearColor(1.0, 1.0, 1.0, 0.0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 


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]; 


    glEnable(GL_TEXTURE_2D); 
    glBegin(GL_TRIANGLES); 
    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); 
    GLenum err = glGetError(); 
    while (err != GL_NO_ERROR) { 
     printf("%f %f %f\n ",verticeNormalLoop1.x,verticeNormalLoop1.y); 
     printf("%f %f %f\n ",verticeNormalLoop2.x,verticeNormalLoop2.y); 
     printf("%f %f %f\n ",verticeNormalLoop3.x,verticeNormalLoop3.y); 
     printf("%f %f %f\n ",verticeLoop1.x,verticeLoop1.y); 
     printf("%f %f %f\n ",verticeLoop2.x,verticeLoop2.y); 
     printf("%f %f %f\n ",verticeLoop3.x,verticeNormalLoop3.y); 
     printf("%f %f %f\n ",verticeTextureLoop1.x,verticeTextureLoop1.y); 
     printf("%f %f %f\n ",verticeTextureLoop2.x,verticeTextureLoop2.y); 
     printf("%f %f %f\n ",verticeTextureLoop3.x,verticeTextureLoop3.y); 
     printf("error "); 
     printf("%s\n %d \n",GetGLErrorString(err), i); 
     err = glGetError(); 
    } 

} 

    glScalef(0.02,0.02,0.02); 
    glRotatef(45,1,1,0); 


    glutSwapBuffers(); // Required to copy color buffer onto the screen. 

} 
によって呼び出さ一つであり、私の表示方法、中にもに似たすべてのことのOpenGL初期化子、

はまた、デバッグのために、私は、テクスチャ頂点にprintf関数を入れて、期待値

0.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 

Result when running

OpenGLのコールスタック

1: CGLChoosePixelFormat({kCGLPFAAllowOfflineRenderers}, 0x7fa96fd10c10, 2); 
2: CGLCreateContext(0x7fa96fd10c10, 0x00000000, 0x7fa971007600); 
3: glDrawBuffer(GL_FRONT); 
4: glReadBuffer(GL_FRONT); 
5: CGLSetParameter(0x7fa971007600, kCGLCPSwapInterval, {1}); 
6: CGLSetSurface(0x7fa971007600, {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(0x7fa96fd46710); 
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, 0x7fff59a00a08); 
23: glBindTexture(GL_TEXTURE_2D, 152813080); 
24: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, 0x10b856000); 
25: glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
26: glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
27: glClearColor(1, 1, 1, 0); 
28: glMatrixMode(GL_PROJECTION); 
29: glLoadIdentity(); 
30: glEnable(GL_TEXTURE_2D); 
31: glBegin(GL_TRIANGLES); 
32: glNormal3d(0.525731, 0.850651, 0); 
33: glTexCoord2d(0.730469, 0.257812); 
34: glVertex3d(3.48344, -1.48562, 24.4911); 
35: glNormal3d(-0.525731, 0.850651, 0); 
36: glTexCoord2d(0.992188, 0.277344); 
37: glVertex3d(3.73332, -1.23742, 20.78); 
38: glNormal3d(0.262866, -0.951056, -0.16246); 
39: glTexCoord2d(0.875, 0.328125); 
40: glVertex3d(4.60787, -3.71942, 22.2232); 
41: glEnd(); 
42: glDisable(GL_TEXTURE_2D); 
43: glGetError(); returns: GL_INVALID_OPERATION 
44: glGetError(); returns: GL_NO_ERROR 
45: glEnable(GL_TEXTURE_2D); 
46: glBegin(GL_TRIANGLES); 
47: glNormal3d(0.525731, 0.850651, 0); 
48: glTexCoord2d(0.730469, 0.257812); 
49: glVertex3d(3.48344, -1.48562, 24.4911); 
50: glNormal3d(-0.587785, 0.425325, 0.688191); 
51: glTexCoord2d(0.863281, 0.039062); 
52: glVertex3d(-1.76387, -0.741022, 22.2232); 
53: glNormal3d(-0.525731, 0.850651, 0); 
54: glTexCoord2d(0.992188, 0.277344); 
55: glVertex3d(3.73332, -1.23742, 20.78); 
56: glEnd(); 
57: glDisable(GL_TEXTURE_2D); 
58: glGetError(); returns: GL_NO_ERROR 
59: glEnable(GL_TEXTURE_2D); 
60: glBegin(GL_TRIANGLES); 
61: glNormal3d(-0.850651, -0.525731, 0); 
62: glTexCoord2d(0.992188, 0.09375); 
63: glVertex3d(-1.26412, -1.48562, 24.4911); 
64: glNormal3d(-0.442863, -0.238856, 0.864188); 
65: glTexCoord2d(0.863281, 0.09375); 
66: glVertex3d(-2.38855, -4.58812, 22.0171); 
67: glNormal3d(-0.587785, 0.425325, 0.688191); 
68: glTexCoord2d(0.992188, 0.039062); 
69: glVertex3d(-1.76387, -0.741022, 22.2232); 
70: glEnd(); 
71: glDisable(GL_TEXTURE_2D); 
72: glGetError(); returns: GL_NO_ERROR 
73: glEnable(GL_TEXTURE_2D); 
74: glBegin(GL_TRIANGLES); 
75: glNormal3d(1, 0, 0); 
76: glTexCoord2d(0.730469, 0.257812); 
77: glVertex3d(3.10864, -5.70501, 24.0788); 
78: glNormal3d(0.587785, 0.425325, 0.688191); 
79: glTexCoord2d(0.992188, 0.277344); 
80: glVertex3d(2.9837, -5.82911, 20.78); 
81: glNormal3d(-0.442863, -0.238856, 0.864188); 
82: glTexCoord2d(0.863281, 0.039062); 
83: glVertex3d(-2.38855, -4.58812, 22.0171); 
84: glEnd(); 
85: glDisable(GL_TEXTURE_2D); 
86: glGetError(); returns: GL_NO_ERROR 
87: glEnable(GL_TEXTURE_2D); 
88: glBegin(GL_TRIANGLES); 
89: glNormal3d(0.295242, 0, -0.955423); 
90: glTexCoord2d(0.863281, 0); 
91: glVertex3d(-1.63893, -4.09171, 24.4911); 
92: glNormal3d(-0.850651, -0.525731, 0); 
93: glTexCoord2d(0.992188, 0.09375); 
94: glVertex3d(-1.26412, -1.48562, 24.4911); 
95: glNormal3d(0.525731, 0.850651, 0); 
96: glTexCoord2d(0.730469, 0.472656); 
97: glVertex3d(3.48344, -1.48562, 24.4911); 
98: glEnd(); 
99: glDisable(GL_TEXTURE_2D); 
100: glGetError(); returns: GL_NO_ERROR 
+0

あなたの見出しの二重否定を修正しなければならなかった:何も描画していないということは、何かを描くことを意味する – Waslap

+0

あなたは正しいです、私はそれを訂正しました –

+0

あなたの "OpenGLコールスタック"を見てください: '27:glEnable(GL_TEXTURE_2D) '31:glBegin(GL_TRIANGLES);'と '' 41:glEnd(); 'には' 0'が与えられます。第2の '43:glBegin(GL_TRIANGLES);' til '53:glEnd();'ははるかに合理的ですが、テクスチャを無効にしてレンダリングします。私はあなたのループをデバッグしなければならないと思っています... – Scheff

答えて

2

としてglTexCoord2dを供給しているようですGLuint 61964157を返すので、動作しているようです。

いいえ、それは実際には動作しないことは非常に疑わしいです。このような奇妙な名前が正しく実装される可能性がありますが、実際の実装ではそのようなことはありません。

OpenGLのコールスタック

[...] 
21: glBegin(GL_TRIANGLES); 
22: glGenTextures(1, 0x7fff59a00a08); 
23: glBindTexture(GL_TEXTURE_2D, 152813080); 
すべてTOF

ファーズ、これはコールスタックではなく、OpenGLの一連のちょうどトレースは、アプリケーションがした呼び出します。

実際のエラーは、glBegin/glEndブロック内にテクスチャを作成しようとしていることです。これは許可されていません。その結果、glGenTexturesはGLエラーだけを生成し、テクスチャ名は初期化されずに残っています。その結果、スタックからのランダムな値がテクスチャ名として使用されます。

これらのエラーからAprart、あなたのコードは本当に恐ろしいです:

  1. GLコンテキストが作成された後、それは一度だけ呼び出されるべき間は、表示機能内部glewInitを呼んでいます。
  2. また、フレームごとにテクスチャを再読み込みしようとします。
  3. さらに悪いことに、古いテクスチャを削除することもないので、各繰り返しでテクスチャオブジェクト(およびメモリ)が漏れることになります。
  4. ディスプレイ機能の最後に、glRotateglScaleコールがあります。何も描画せずに、次の繰り返しでその状態をもう一度上書きしません。

そして、最悪の部分については、すべてのコードは完全に廃止されたOpenGLであり、最新のOpenGLコアプロファイルでは動作しません。これは十年以上前にのためにoutfdatedされました今、固定機能のパイプラインとBegin/EndとGLの行列スタックを使った即時モードのレンダリングを使用するだけでは、2017年に行く方法ではありません。

関連する問題