Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Текстура в OpenGL, Куда ложить картинки для текстур в OpenG 
:(
    Опции темы
Prolss
Дата 19.5.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



Помогите пожалуйсто. Скачал исходник с ним папка "Data" в ней файл .bmp  Куда кидать .bmp незнаю. Куда не пробовал ложить, не компилится..
Вот код:
Код
#include <windows.h>        // Заголовочный файл для Windows
#include <gl\gl.h>            // Заголовочный файл для OpenGL32 библиотеки
#include <gl\glu.h>            // Заголовочный файл для GLu32 библиотеки
#include <gl\glaux.h>        // Заголовочный файл для GLaux библиотеки

static HGLRC hRC;        // Постоянный контекст рендеринга
static HDC hDC;            // Приватный контекст устройства GDI

GLfloat    xrot;            // Вращение X
GLfloat    yrot;            // Y 
GLfloat    zrot;            // Z  

GLuint    texture[1];            // Место для одной текстуры

BOOL    keys[256];        // Массив для процедуры обработки клавиатуры

// Загрузка картинки и конвертирование в текстуру
GLvoid LoadGLTextures()
{
    // Загрузка картинки
    AUX_RGBImageRec *texture1;
    texture1 = auxDIBImageLoad("Data/NeHe.bmp");
    // Создание текстуры
    glGenTextures(1, &texture[0]);
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
}

GLvoid InitGL(GLsizei Width, GLsizei Height)    // Вызвать после создания окна GL
{
    LoadGLTextures();            // Загрузка текстур
    glEnable(GL_TEXTURE_2D);    // Разрешение наложение текстуры

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
                            // Очистка экрана в черный цвет
    glClearDepth(1.0);        // Разрешить очистку буфера глубины
    glDepthFunc(GL_LESS);    // Тип теста глубины
    glEnable(GL_DEPTH_TEST);// разрешить тест глубины
    glShadeModel(GL_SMOOTH);// разрешить плавное цветовое сглаживание
    glMatrixMode(GL_PROJECTION);// Выбор матрицы проекции
    glLoadIdentity();        // Сброс матрицы проекции
    gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
                            // Вычислить соотношение геометрических размеров для окна
    glMatrixMode(GL_MODELVIEW);// Выбор матрицы просмотра модели
}

GLvoid ReSizeGLScene(GLsizei Width, GLsizei Height)
{
    if (Height==0)        // Предотвращение деления на ноль, если окно слишком мало
        Height=1;

    glViewport(0, 0, Width, Height);
        // Сброс текущей области вывода и перспективных преобразований

    glMatrixMode(GL_PROJECTION);// Выбор матрицы проекций
    glLoadIdentity();            // Сброс матрицы проекции

    gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f);
        // Вычисление соотношения геометрических размеров для окна
    glMatrixMode(GL_MODELVIEW);    // Выбор матрицы просмотра модели
}

GLvoid DrawGLScene(GLvoid)
{
    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);        // Вращение по оси X
    glRotatef(yrot,0.0f,1.0f,0.0f);            // Вращение по оси Y
    glRotatef(zrot,0.0f,0.0f,1.0f);            // Вращение по оси Z
    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);    // Верх лево

                // Задняя грань
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);    // Низ лево

                // Верхняя грань
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);    // Верх право
        
                // Нижняя грань
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);    // Низ право

                // Правая грань
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);    // Низ лево

                // Левая грань
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+=1.3f;            // Ось вращения X
    yrot+=1.2f;                // Ось вращения Y
    zrot+=1.4f;                // Ось вращения Z
}

LRESULT CALLBACK WndProc(
                HWND    hWnd,
                UINT    message,
                WPARAM    wParam,
                LPARAM    lParam)
{
    RECT    Screen;        // используется позднее для размеров окна
    GLuint    PixelFormat;
    static    PIXELFORMATDESCRIPTOR pfd=
    {
        sizeof(PIXELFORMATDESCRIPTOR),    // Размер этой структуры
        1,                // Номер версии (?)
        PFD_DRAW_TO_WINDOW |// Формат для Окна
        PFD_SUPPORT_OPENGL |// Формат для OpenGL
        PFD_DOUBLEBUFFER,// Формат для двойного буфера
        PFD_TYPE_RGBA,    // Требуется RGBA формат
        16,                // Выбор 16 бит глубины цвета
        0, 0, 0, 0, 0, 0,// Игнорирование цветовых битов (?)
        0,                // нет буфера прозрачности
        0,                // Сдвиговый бит игнорируется (?)
        0,                // Нет буфера аккумуляции
        0, 0, 0, 0,        // Биты аккумуляции игнорируются (?)
        16,                // 16 битный Z-буфер (буфер глубины)  
        0,                // Нет буфера траффарета
        0,                // Нет вспомогательных буферов (?)
        PFD_MAIN_PLANE,    // Главный слой рисования
        0,                // Резерв (?)
        0, 0, 0            // Маски слоя игнорируются (?)
    };
    switch (message)    // Тип сообщения
    {
        case WM_CREATE:
        hDC = GetDC(hWnd);    // Получить контекст устройства для окна
        PixelFormat = ChoosePixelFormat(hDC, &pfd);
            // Найти ближайшее совпадение для нашего формата пикселов
        if (!PixelFormat)
        {
            MessageBox(0,"Can't Find A Suitable PixelFormat.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            // Это сообщение говорит, что программа должна завершится
            break;    // Предтовращение повтора кода
        }
        if(!SetPixelFormat(hDC,PixelFormat,&pfd))
        {
            MessageBox(0,"Can't Set The PixelFormat.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
        hRC = wglCreateContext(hDC);
        if(!hRC)
        {
            MessageBox(0,"Can't Create A GL Rendering Context.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
        if(!wglMakeCurrent(hDC, hRC))
        {
            MessageBox(0,"Can't activate GLRC.","Error",MB_OK|MB_ICONERROR);
            PostQuitMessage(0);
            break;
        }
        GetClientRect(hWnd, &Screen);
        InitGL(Screen.right, Screen.bottom);
        break;

        case WM_DESTROY:
        case WM_CLOSE:
        ChangeDisplaySettings(NULL, 0);

        wglMakeCurrent(hDC,NULL);
        wglDeleteContext(hRC);
        ReleaseDC(hWnd,hDC);

        PostQuitMessage(0);
        break;

        case WM_KEYDOWN:
        keys[wParam] = TRUE;
        break;

        case WM_KEYUP:
        keys[wParam] = FALSE;
        break;

        case WM_SIZE:
        ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
        break;

        default:
    return (DefWindowProc(hWnd, message, wParam, lParam));
    }
    return (0);
}

int WINAPI WinMain(
        HINSTANCE hInstance,
        HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine,
        int nCmdShow)
{
    MSG        msg;    // Структура сообщения Windows
    WNDCLASS    wc; // Структура класса Windows для установки типа окна
    HWND        hWnd;// Сохранение дискриптора окна

    wc.style            = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wc.lpfnWndProc        = (WNDPROC) WndProc;
    wc.cbClsExtra        = 0;
    wc.cbWndExtra        = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = NULL;
    wc.hCursor            = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground    = NULL;
    wc.lpszMenuName        = NULL;
    wc.lpszClassName    = "OpenGL WinClass";

    if(!RegisterClass(&wc))
    {
    MessageBox(0,"Failed To Register The Window Class.","Error",MB_OK|MB_ICONERROR);
    return FALSE;
    }

    hWnd = CreateWindow(
    "OpenGL WinClass",
    "Jeff Molofee's GL Code Tutorial ... NeHe '99",    // Заголовок вверху окна

    WS_POPUP |
    WS_CLIPCHILDREN |
    WS_CLIPSIBLINGS,

    0, 0,            // Позиция окна на экране
    640, 480,        // Ширина и высота окна

    NULL,
    NULL,
    hInstance,
    NULL);

    if(!hWnd)
    {
    MessageBox(0,"Window Creation Error.","Error",MB_OK|MB_ICONERROR); 
        return FALSE;
    }

    DEVMODE dmScreenSettings;            // Режим работы

    memset(&dmScreenSettings, 0, sizeof(DEVMODE));    // Очистка для хранения установок
    dmScreenSettings.dmSize    = sizeof(DEVMODE);        // Размер структуры Devmode
    dmScreenSettings.dmPelsWidth    = 640;            // Ширина экрана
    dmScreenSettings.dmPelsHeight    = 480;            // Высота экрана
    dmScreenSettings.dmFields    = DM_PELSWIDTH | DM_PELSHEIGHT;    // Режим Пиксела
    ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
    // Переключение в полный экран

    ShowWindow(hWnd, SW_SHOW);
    UpdateWindow(hWnd);
    SetFocus(hWnd);

    while (1)
    {
        // Обработка всех сообщений
        while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
        {
            if (GetMessage(&msg, NULL, 0, 0))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                return TRUE;
            }
        }

        DrawGLScene();                // Нарисовать сцену
        SwapBuffers(hDC);            // Переключить буфер экрана
        if (keys[VK_ESCAPE]) SendMessage(hWnd,WM_CLOSE,0,0);    // Если ESC - выйти
    }
}



 Вот ошибки:
Linking...
Source1.obj : error LNK2019: unresolved external symbol _auxDIBImageLoadA@4 referenced in function "void __cdecl LoadGLTextures(void)" (?LoadGLTextures@@YAXXZ)
D:\downloads\vs2008\vvss\opkart\Debug\opkart.exe : fatal error LNK1120: 1 unresolved externals

Это сообщение отредактировал(а) Prolss - 19.5.2011, 19:11
PM MAIL   Вверх
IMPERIAL
Дата 19.5.2011, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 15.10.2006

Репутация: нет
Всего: нет



#include <gl\glu.h>            // Заголовочный файл для GLu32 библиотеки
#include <gl\glaux.h>        // Заголовочный файл для GLaux библиотеки
#pragma comment(lib, "glaux.lib")
static HGLRC hRC;  
PM MAIL   Вверх
Prolss
Дата 19.5.2011, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



IMPERIAL,  Нет, не помогло.. Если бы кто сказал в какую папку кидать картинку, или её в ресурс добавлять, или и то и другое, или...
PM MAIL   Вверх
kvick
Дата 19.5.2011, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.5.2011
Где: Харьков, Украина

Репутация: нет
Всего: нет



Картинку положи в : директория_проекта/Data/
Но скорее всего ты так и сделал, по этому попробуй просто дописать литеру L перед адресом, выглядеть должно так:
texture1 = auxDIBImageLoad(L"Data/NeHe.bmp");

Добавлено через 5 минут и 31 секунду
Или, если юзаешь Visual Studio, зайди Проект - Свойства - Свойства и конфигурации - Общие - в поле набор символов измени на "использовать многобайтовую кодировку"
PM MAIL   Вверх
Prolss
Дата 19.5.2011, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



Про кодировку я знаю... А, не могли бы написать, в какую именно папку, а то например у меня: 
 D:\downloads\vs2008\vvss\OpenGLss/ ,   а потом  две папки: 1)/OpenGLss/Debug  и  2)/Debug . И я так понял что ложить 'кудато', надо папку "Data" в которой находится .bmp?
PM MAIL   Вверх
kvick
Дата 19.5.2011, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.5.2011
Где: Харьков, Украина

Репутация: нет
Всего: нет



D:\Visual Studio 2010\Projects\Tetris\Tetris тут у мну лежат текстуры, т.е. для вас первый вариант:
D:\downloads\vs2008\vvss\OpenGLss/OpenGLss/
точнее D:\downloads\vs2008\vvss\OpenGLss/OpenGLss/Data/

Это сообщение отредактировал(а) kvick - 19.5.2011, 22:54
PM MAIL   Вверх
Prolss
Дата 19.5.2011, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



Добавлено @ 23:50
> kvick,  Не чего не получается, всё тоже самое.. Спасибо что сказал куда картинки ложить, теперь хоть позориться не буду smile

Это сообщение отредактировал(а) Prolss - 19.5.2011, 23:51
PM MAIL   Вверх
kvick
Дата 20.5.2011, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.5.2011
Где: Харьков, Украина

Репутация: нет
Всего: нет



Возможно дело в объявленных переменных, посмотрел как сам делал, почти как у вас, но есть различия... попробуйте следующее:
1)GLuint    texture[1] заменить на  unsigned int texture[1];
2) AUX_RGBImageRec *texture1; вынести из функции, т.е. сделать глобальной;

P.S. Лучше сделать в обратной последовательности, сначала сделать глобальной (п.2) - откомпилировать, если не получится, то смотри пункт 1 =)

Это сообщение отредактировал(а) kvick - 20.5.2011, 00:05
PM MAIL   Вверх
Prolss
Дата 20.5.2011, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



>kvick,  Теже две ошибки при любых комбинациях.. Наверно что то не правильно делаю я, но что?
PM MAIL   Вверх
Prolss
Дата 20.5.2011, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



Если есть библеотеки OpenGL...То вот картинка и скопируйте код, может у вас получется:


Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  NeHe.rar 22,17 Kb
PM MAIL   Вверх
kvick
Дата 20.5.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.5.2011
Где: Харьков, Украина

Репутация: нет
Всего: нет



Что-то у меня тоже ничего не получилось... Вообще, уроки Nehe, бесспорно, штука хорошая, но начинать с них при изучении OpenGl, мне кажется не совсем правильным, ИМХО. Лично я, пользовался статьями от сюда - ссылка. Более подробно и доступным языком всё описано.
PM MAIL   Вверх
Prolss
Дата 20.5.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



 Спасибо за ссылку правда там ссылки на исходники не рабочие, но зато всё доходчиво написано smile буду учить..
 Плюсануть только жаль не могу, надо 100 постов, чтоб было :(
PM MAIL   Вверх
kvick
Дата 20.5.2011, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 19.5.2011
Где: Харьков, Украина

Репутация: нет
Всего: нет



Будет сотня - плюсанёшь =). Кстати, ссылки там рабочие...
PM MAIL   Вверх
Prolss
Дата 21.5.2011, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



 kvick,   Ты прав, ссылки там рабочии. Но теперь у меня другая проблема, в моей VS 2008 нет такого: 
    Build->Set Active Configuration 
 что мне нажимать у себя не могу понять.. Это там первый пример. Я и незнал что надо консоль "соединить" с win.(там вроде так надо сделать)
PM MAIL   Вверх
Prolss
Дата 28.5.2011, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 16.4.2011

Репутация: нет
Всего: нет



Ув. модераторы, удалите эту тему. Эта тема уже есть и там(в другой), вопрос уже решён.. 
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.