1

SDL ライブラリを使用してテクスチャをロードする際に問題があります。

通常は Linux でプログラムを作成しますが、Visual Studio と互換性のあるコードを作成するようにしています。Linux では問題ありませんが、Visual Studio では glTexImage2D(...) 関数の "GL_UNSIGNED_SHORT_5_6_5" でクラッシュします。

以下は、このチュートリアルに触発された、私がやりたいことに関する一般的なアイデアです。

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>
//#include <GL/glext.h> 
#include "SDL.h"

int brick;
float c=0.5;
float rx_min=0, ry_min=0;
float rx_max=1, ry_max=1;

unsigned int LoadTexture(const char* filename);
void DrawTexture(int object);
void setupmywindow();
void myDrawing();


void setupmywindow()
{
    glClearColor(1.0,1.0,1.0,0);  
    glColor3f(0.0, 0.0, 0.0);     
    glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
    gluOrtho2D(rx_min,ry_min, rx_max, ry_max);  
    brick = LoadTexture("brick.bmp");
}

void DrawTexture(int object)
{
    glBindTexture(GL_TEXTURE_2D, object);
    glColor3f(c,c,c);
    glBegin(GL_QUADS);
        glTexCoord2f(0., 1. );
        glVertex2f( rx_min , ry_min );
        glTexCoord2f(0., 0. );
        glVertex2f( rx_min, ry_max );
        glTexCoord2f(1., 0. );
        glVertex2f( rx_max , ry_max );
        glTexCoord2f(1., 1. );
        glVertex2f( rx_max , ry_min );
    glEnd();
}
unsigned int LoadTexture(const char* filename)
{
    SDL_Surface* img=SDL_LoadBMP(filename);
    unsigned int id;
    glGenTextures(1, &id);
    glBindTexture(GL_TEXTURE_2D,id);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->w, img->h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, img->pixels);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    SDL_FreeSurface(img);
    return id;
}

void myDrawing()
{    
    glClear(GL_COLOR_BUFFER_BIT);   
    DrawTexture(brick);

    glFlush();

}

int main(int argc, char **argv)
{

    printf("AUTH Computational Physics - Computer Graphics\n");
    printf("Project >>TestTexture.cpp\n");
    printf("--------------------------------------------------------\n");

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 
    glutInitWindowPosition(50,50);
    glutCreateWindow("Texture Test");

    setupmywindow();        
    glutDisplayFunc(myDrawing);  

    glutMainLoop();

    return 0;
}

エラーは次のとおりです。

エラー C2065: 'GL_UNSIGNED_SHORT_5_6_5': 宣言されていない識別子

これが私が読み込もうとしている画像で、GIMP 2.8でビットマップ(8ビット5 6 5)として構成されています

: Linux では不要な#include < GL/glext.h >のコメントを外すと、上記のメッセージが表示されます。

一般に、ビットマップ イメージを (ペイントなどで) 保存する場合、入力するタイプ (GL_UNSIGNED_SHORT_5_6_5、GL_UNSIGNED_BYTE など) をどのように理解できますか?

4

2 に答える 2