1

openGL で立方体をテクスチャリングしようとしています。私は GLUT と Visual C++ 2010 を使用しています。一般的なイメージローダー SOIL.h を使用しており、仲間のユーザーからのコードを使用しています。このコードは、テクスチャが適用された 3D 立方体を画面に描画するためのものです。VC++ のヘッダー ファイル フォルダーに SOIL.h を含めましたが、コンパイルするたびに次のエラーが発生します。

error LNK2019: unresolved external symbol _SOIL_load_OGL_texture referenced in function "int __cdecl LoadGLTextures(void)"

必要に応じて追加情報を提供します。

これが私のコードです:

#include <stdio.h>
#include <stdlib.h>
#include <glut.h>

#include "SOIL.h"

GLuint texture[6];//6 textures for 6 faces of the cube

GLfloat xRot,yRot,zRot;//control cube's rotation

int LoadGLTextures()
{
int Status = 0;
char *bmpFile[6]      {"BmpFile/1.bmp","BmpFile/2.bmp","BmpFile/3t.bmp","BmpFile/4.bmp","BmpFile/5.bmp","BmpFile/6.bmp"};

for (int i = 0;i < 6;++i){
    texture[i] = SOIL_load_OGL_texture(
        bmpFile[i],
        SOIL_LOAD_AUTO,
        SOIL_CREATE_NEW_ID,
        SOIL_FLAG_INVERT_Y);
    printf("texture[%d]: %d\n",i,texture[i]);
    if(texture[i] == 0){
        Status = 0;
    glBindTexture(GL_TEXTURE_2D,texture[i]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);}
}

return Status;
}

int init(){
    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f,0.0f,0.0f,0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
    return 1;
}

void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f,0.0f,-5.0f);
    glRotatef(xRot,1.0f,0.0f,0.0f);
    glRotatef(yRot,0.0f,1.0f,0.0f);
    glRotatef(zRot,0.0f,0.0f,1.0f);


    glBindTexture(GL_TEXTURE_2D,texture[0]);

    glBegin(GL_QUADS); 

    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_2D,texture[1]);
    glBegin(GL_QUADS);  
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_2D,texture[2]);
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_2D,texture[3]);
    glBegin(GL_QUADS); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_2D,texture[4]);
    glBegin(GL_QUADS); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); 
    glEnd(); 

    glBindTexture(GL_TEXTURE_2D,texture[5]);
    glBegin(GL_QUADS); 
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); 
    glEnd(); 

    xRot += 0.3f;
    yRot += 0.4f;
    zRot += 0.5f;

    glutSwapBuffers();
}

void reshape(int w,int h){
    glViewport(0,0,(GLsizei)w,(GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0f,(GLfloat)w / (GLfloat)h,1,100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

int main(int argc,char** argv){
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(400,400);
    glutInitWindowPosition(100,100);
    glutCreateWindow("Texture Map");
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();
    return 0;
}
4

1 に答える 1

1

リンカー設定で必要なライブラリを追加するのを忘れたようです。

Visual Studio リンカー設定に libsoil.lib フォルダー パスを追加します。

ライブラリがまだ提供されていない場合は、Windows 用のソースからライブラリをビルドする必要がある場合があります。

于 2013-11-14T01:18:39.010 に答える