Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2012, 10:36   #1
Fabeldyr
Пользователь
 
Аватар для Fabeldyr
 
Регистрация: 25.10.2011
Сообщений: 14
По умолчанию не получается загрузка текстур

решил тут вспомнить OpenGL, в качестве помощи использую уроки от NeHe, дошёл до наложения текстур на объект - как это делается описано на множестве ресурсов и везде примерно одинаково, но вот в чём проблема - когда компилирую вылезают ошибки:
"error c2065: AUX_RGBImageRec: необъявленный идентификатор"
"error c3861: auxDIBImageLoad: идентификатор не найден"
что делать? может надо какую библиотеку подключить для работы с текстурами?
Fabeldyr вне форума Ответить с цитированием
Старый 31.01.2012, 13:09   #2
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Могу свой вариант для загрузки текстуры предложить,
Код:
#include "texture.h"
#include <Windows.h>
#include <iostream>
#include "glut.h"

int num_texture=-1; 
int LoadBitmap(char *filename) 
{
    int i, j=0; //Index variables
    FILE *l_file; //File pointer
    unsigned char *l_texture; //The pointer to the memory zone in which we will load the texture
     
    // windows.h gives us these types to work with the Bitmap files
    BITMAPFILEHEADER fileheader; 
    BITMAPINFOHEADER infoheader;
    RGBTRIPLE rgb;

    num_texture++; // The counter of the current texture is increased

    if( (l_file = fopen(filename, "rb"))==NULL) return (-1); // Open the file for reading
    
    fread(&fileheader, sizeof(fileheader), 1, l_file); // Read the fileheader
    
    fseek(l_file, sizeof(fileheader), SEEK_SET); // Jump the fileheader
    fread(&infoheader, sizeof(infoheader), 1, l_file); // and read the infoheader

    // Now we need to allocate the memory for our image (width * height * color deep)
    l_texture = (byte *) malloc(infoheader.biWidth * infoheader.biHeight * 4);
    // And fill it with zeros
    memset(l_texture, 0, infoheader.biWidth * infoheader.biHeight * 4);
 
    // At this point we can read every pixel of the image
    for (i=0; i < infoheader.biWidth*infoheader.biHeight; i++)
    {            
            // We load an RGB value from the file
            fread(&rgb, sizeof(rgb), 1, l_file); 

            // And store it
            l_texture[j+0] = rgb.rgbtRed; // Red component
            l_texture[j+1] = rgb.rgbtGreen; // Green component
            l_texture[j+2] = rgb.rgbtBlue; // Blue component
            l_texture[j+3] = 255; // Alpha value
            j += 4; // Go to the next position
    }

    fclose(l_file); // Closes the file stream
     
    glBindTexture(GL_TEXTURE_2D, num_texture); // Bind the ID texture specified by the 2nd parameter

    // The next commands sets the texture parameters
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // If the u,v coordinates overflow the range 0,1 the image is repeated
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // The magnification function ("linear" produces better results)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); //The minifying function


    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); // We don't combine the color with the original surface color, use only the texture map.

    // Finally we define the 2d texture
    glTexImage2D(GL_TEXTURE_2D, 0, 4, infoheader.biWidth, infoheader.biHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, l_texture);

    // And create 2d mipmaps for the minifying function
    gluBuild2DMipmaps(GL_TEXTURE_2D, 4, infoheader.biWidth, infoheader.biHeight, GL_RGBA, GL_UNSIGNED_BYTE, l_texture);

    free(l_texture); // Free the memory we used to load the texture

    return (num_texture); // Returns the current texture OpenGL ID
}
А вообще это библиотека glaux кажется, точно не помню
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 06.02.2012, 11:45   #3
Fabeldyr
Пользователь
 
Аватар для Fabeldyr
 
Регистрация: 25.10.2011
Сообщений: 14
По умолчанию

спасибо
да, это действительно glaux - у меня её не было и я её поэтому не подключил (да и где-то вычитал, что она старая и её можно не использовать) - виноват
теперь всё работает, но тоже не корректно
с текстурами я разобрался - для правильного их отображения нужно сперва окрасить объект в белый цвет
а вот те объекты, на которые текстуры не надо накладывать - просто раскрасить отображаются так, будто на них поверх окраски наложена полупрозрачная текстура
я так понимаю нужна команда типа "конец использования текстуры" или "не использовать текстуры", но вот как это сделать - не нашёл =((
Fabeldyr вне форума Ответить с цитированием
Старый 07.02.2012, 09:17   #4
Fabeldyr
Пользователь
 
Аватар для Fabeldyr
 
Регистрация: 25.10.2011
Сообщений: 14
По умолчанию

всё, разобрался - нужно перед раскрашиванием написать:
glBindTexture(GL_TEXTURE_2D, 0);
Fabeldyr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка множества текстур. OpenGL Asker13 Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 17.04.2011 13:10
Загрузка текстур alexprey Мультимедиа в Delphi 0 21.03.2011 22:14
наложение текстур в OpenGL FJFray Мультимедиа в Delphi 1 23.10.2010 12:40
Сборка текстур. Adler Общие вопросы Delphi 0 19.03.2009 15:23
Создание текстур KLOP Мультимедиа в Delphi 12 28.01.2009 22:36