3

画像を読み込んでプログラムのテクスチャとして使用することができないようです。画像のサイズは 512*512 で、何が間違っているのかわかりません。誰か助けてもらえますか?

主な機能:

int main(int argc, char** argv)
{
  glutInit (&argc, argv);
  glutInitWindowSize (800,600);
  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
  glutCreateWindow ("CS248 GLUT example");
  glutDisplayFunc (display);
  glutReshapeFunc (reshape);
  glutMainLoop ();
  return 0;
}

表示機能:

void display() {
    glClear(GL_COLOR_BUFFER_BIT);
    glEnable(GL_TEXTURE_2D);
    glColor3f(1.0f,1.0f,1.0f);
    texture = LoadTexture("space.bmp");
    glBindTexture(GL_TEXTURE_2D, texture);
    glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0); glVertex3f(-20.0,-20.0,0);
        glTexCoord2f(0.0, 1.0); glVertex3f(-20.0, 20.0, 0.0);
        glTexCoord2f(1.0, 1.0); glVertex3f(20.0, 20.0, 0.0);
        glTexCoord2f(1.0, 0.0); glVertex3f(20.0, -20.0, 0.0);   
    glEnd();
    glFlush();
}

そこで、GLuint テクスチャに対する loadtexture 関数を次のように呼び出します。

GLuint LoadTexture( const char* texture )
{
    GLuint textureID = SOIL_load_OGL_texture( texture, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS ); 
    glGenTextures(1,&textureID);
    glBindTexture( GL_TEXTURE_2D, textureID );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

    return textureID;
}

変形機能:

void reshape(GLsizei w, GLsizei h) {
glViewport(0, 0, 800, 600);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-20.0f, 20.0f, -20.0f, 20.0f, -20.0f, 20.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

含まれるものなど:

#include <glut.h>
#include <SOIL.h>

GLuint texture;
4

1 に答える 1

2
GLuint textureID = SOIL_load_OGL_texture( texture, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS ); 
glGenTextures(1,&textureID);

SOIL_load_OGL_texture OpenGL テクスチャ オブジェクトを作成します。すでに作成した後に新しいものを生成するglGenTexturesことは非生産的です。

その行を捨てれば、おそらく大丈夫でしょう。

ただし、すべてのディスプレイでテクスチャをリロードするべきではありません。初期化中にそのテクスチャを一度作成してから、glBindTexture呼び出しでテクスチャを使用する必要があります。

于 2013-05-04T14:01:14.403 に答える