C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
[Linker Error], auxDIBImageLoadA'
.piero
  Отправлено: 06.07.2004, 19:16


Дежурный стрелочник

Группа: Участник
Сообщений: 62



Уважаемые программисты, помогите бездари...

Пытался налепить картинку на кубик:
CODE

AUX_RGBImageRec *texture1;
texture1 = auxDIBImageLoad("Cube.Bmp");


но при компиляции оно мне открытым текстом:

[Linker Error] Unresolved external 'auxDIBImageLoadA' referenced from Е:\!!!CPP\3D_OGL\ASD.OBJ

вся проблема в том, что сначала он ругается, мол там константа должна быть, при обьявлении констанатой говорит, мол где ж ты гадость такая, чилсо забыл, которого там и в помине не было, а при #define... он эту гадость тоже выдаёт.

Отредактировано .piero — 06/07/2004, 20:20
.piero
Отправлено: 11.07.2004, 13:57


Дежурный стрелочник

Группа: Участник
Сообщений: 62



Вот весь Исходник, может хоть кто-нить разберётся. Ну не может же быть так, чтобы на весь рунет ни одного программиста по опенглу толкового не было...
CODE

#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 — выйти
}
}



или файлик прилагается...

User Attached Image Скачать файл
TExture.cpp


Shura
Отправлено: 14.07.2004, 14:49


Дежурный стрелочник

Группа: Участник
Сообщений: 45



просто подключи к проекту бибилиотеку glaux.lib
.piero
  Отправлено: 19.07.2004, 09:20


Дежурный стрелочник

Группа: Участник
Сообщений: 62



QUOTE
просто подключи к проекту бибилиотеку glaux.lib


Интересно... а где его откопать?? я пол-нета излазил, вторую половину уже в дом как-то....
Shura
Отправлено: 19.07.2004, 09:39


Дежурный стрелочник

Группа: Участник
Сообщений: 45



Я думал, что она с билдером идет. Если нет, то не пользуй ее. вместо auxDIBImageLoad() напиши свою функцию загрузки bmp — формат довольно простой — разберешься.
.piero
Отправлено: 20.07.2004, 18:14


Дежурный стрелочник

Группа: Участник
Сообщений: 62



С билдером она не идёт, а найти её можно сдесь:::
nehe.gamedev.net, просто скачайте 6 и 7-ой уроки в левой части страницы...

Вернуться в Вопросы программирования в C++Builder