Здравствуйте, Аноним, Вы писали:
А>Этот пример не работает.
А>Это к вопросу о загрузке 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 внимательней. Это ключ к Вашей проблеме.