Re[3]: Проблема с Open GL-м
От: 8bit  
Дата: 25.04.08 08:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Этот пример не работает.

А>Это к вопросу о загрузке 2-х и более текстур.

Вот код который работает как Вам надо:

#include <windows.h>

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>

static unsigned int photo_tex;
static AUX_RGBImageRec* photo_image;

static unsigned int space_tex;
static AUX_RGBImageRec* space_image;

static void DrawRect(int x, int y, int w, int h)
{
    glBegin(GL_QUADS);
    glTexCoord2d(0,0); glVertex2d(x,   y+h);
    glTexCoord2d(0,1); glVertex2d(x,   y  );
    glTexCoord2d(1,1); glVertex2d(x+w, y  );
    glTexCoord2d(1,0); glVertex2d(x+w, y+h);
    glEnd();
}

static void CALLBACK resize(int width,int height)
{
    glViewport(0,0,width,height);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, width, height, 0, 0, 1);
    glMatrixMode(GL_MODELVIEW);
}

static void CALLBACK display(void)
{
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glEnable(GL_TEXTURE_2D);
    glColor3d(1,1,1);

    glBindTexture(GL_TEXTURE_2D, space_tex );
    DrawRect(25, 25, space_image->sizeX, space_image->sizeY);

    glBindTexture(GL_TEXTURE_2D, photo_tex);
    DrawRect(75, 75, photo_image->sizeX, photo_image->sizeY);

    glDisable(GL_TEXTURE_2D);

    auxSwapBuffers();
}

void main()
{
    auxInitPosition(50, 10, 400, 400);
    auxInitDisplayMode(AUX_RGB | AUX_DEPTH | AUX_DOUBLE);
    auxInitWindow("Texture");
    auxIdleFunc(display);
    auxReshapeFunc(resize);


    glDisable(GL_DEPTH_TEST);
    glDisable(GL_ALPHA_TEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);


    photo_image = auxDIBImageLoad("photo.bmp");
    space_image = auxDIBImageLoad("space.bmp");

    glGenTextures(1, &photo_tex);
    glGenTextures(1, &space_tex);

    glBindTexture(GL_TEXTURE_2D, photo_tex );
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glTexImage2D(GL_TEXTURE_2D, 0, 3,
    photo_image->sizeX,
    photo_image->sizeY,
    0, GL_RGB, GL_UNSIGNED_BYTE,
    photo_image->data);


    glBindTexture(GL_TEXTURE_2D, space_tex );
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glTexImage2D(GL_TEXTURE_2D, 0, 3,
    space_image->sizeX,
    space_image->sizeY,
    0, GL_RGB, GL_UNSIGNED_BYTE,
    space_image->data);

    auxMainLoop(display);
}


Обратите внимание на функцию resize в которой выставляется нужная проекция.
И так же на то что отключен DEPTH_TEST, ALPHA_TEST, материалы, освещение.
Для 2d это обычно не нужно.

А>Что требуется в идеале: из одного bmp-файла, представляющего из себя полоску 24*1, нужно загрузить 24 РАЗНЫХ квадратика с изображениями шашек и тенями, падающими в разные стороны (в зависимости от положения на поле фигуры меняется её текстура — иллюзия 3d


Прочтите про функцию glTexCoord2d внимательней. Это ключ к Вашей проблеме.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.