Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема загрузки картинки в OpenGL

34K
09 февраля 2008 года
zhenya_NOV
6 / / 09.02.2008
вот казалось бы нету легше задачи чем загрузить а начел грузить а выбивает ошибка
Error 1 error C2440: '=' : cannot convert from 'GLbyte *' to 'GLubyte *'
компилятор (MVS 2005)
язык (С++)
//*******************************************************
код програмы :

#include "stdafx.h"
#include "NEW.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CWinApp theApp;
using namespace std;



#include <GL/glut.h>
#include <GL/GLtools.h>
#include <GL/OpenGLSB.h>
#define GL_PI 3.1415f

// Rotation amounts
#define NUM_SPHERES 50
GLTFrame spheres[NUM_SPHERES];
GLTFrame frameCamera;
// Called to draw scene

void SetupRC()
{
// Black background
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}


///////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
GLubyte *pImage = NULL;
GLint iWidth, iHeight, iComponents;
GLenum eFormat;

// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT);

// Targa's are 1 byte aligned
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

// Load the TGA file, get width, height, and component/format information
pImage = gltLoadTGA("fire.tga", &iWidth, &iHeight, &iComponents, &eFormat);

// Use Window coordinates to set raster position
glRasterPos2i(0, 0);

// Draw the pixmap
if(pImage != NULL)
glDrawPixels(iWidth, iHeight, eFormat, GL_UNSIGNED_BYTE, pImage);

// Don't need the image data anymore
free(pImage);

// Do the buffer Swap
glutSwapBuffers();
}


//////////////////////////////////////////////////////////////
// For this example, it really doesn't matter what the
// projection is since we are using glWindowPos
void ChangeSize(int w, int h)
{
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width).
if(h == 0)
h = 1;

glViewport(0, 0, w, h);

// Reset the coordinate system before modifying
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

// Set the clipping volume
gluOrtho2D(0.0f, (GLfloat) w, 0.0, (GLfloat) h);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

/////////////////////////////////////////////////////////////
// Main program entrypoint
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GL_DOUBLE);
glutInitWindowSize(512 ,512);
glutCreateWindow("OpenGL Image Loading");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);

SetupRC();
glutMainLoop();

return 0;
}
//*******************************************************
Ошыбка происходит с функцией gltLoadTGA (GLTools) в чем проблема немойму потомучто прогама ето пример из книги. Помогите пожалуста хто может (((((
1.9K
09 февраля 2008 года
andriano
474 / / 10.01.2008
Я так и не увидел кода gltLoadTGA. Эта процедура в OpenGL не входит, ошибка в ней, ее и надо смотреть.
34K
10 февраля 2008 года
zhenya_NOV
6 / / 09.02.2008
"gltLoadTGA" ето cтандартная функция библиотеки "GLTools" в моем коде она визивается в начале функции "RenderScene".А GLTools ето библиотека OpenGL
1.9K
10 февраля 2008 года
andriano
474 / / 10.01.2008
Нет в OpenGL такой библиотеки.
Надо спрашивать у автора этой библиотеки, если есть уверенность, что собственный код правилен.
А вообще, проще самому написать процедуру загрузки TGA, чем разбираться с чьими-то кривыми библиотеками.
353
11 февраля 2008 года
Nixus
840 / / 04.01.2007
Мдя ребят, вы сообщения об ошибке читаете?

Цитата:
Error 1 error C2440: '=' : cannot convert from 'GLbyte *' to 'GLubyte *'



Проблема в преобразовании типа при присваивании. Ищем где у нас используется GLubyte *. Так вот же он:

 
Код:
GLubyte *pImage = NULL;

и соответственно
 
Код:
// Load the TGA file, get width, height, and component/format information
pImage = gltLoadTGA("fire.tga", &iWidth, &iHeight, &iComponents, &eFormat);


Функция gltLoadTGA скорее всего возвращает GLbyte *.

Лечим так:
 
Код:
GLbyte *pImage = NULL;

Или так:
 
Код:
pImage = (GLubyte *)gltLoadTGA("fire.tga", &iWidth, &iHeight, &iComponents, &eFormat);
34K
12 февраля 2008 года
zhenya_NOV
6 / / 09.02.2008
ошибка таже !!а как хто вообще грузит текстури в OpenGL и что для етого нужно ???
353
12 февраля 2008 года
Nixus
840 / / 04.01.2007
Цитата: zhenya_NOV
ошибка таже !!


У тебя проблема не с OpenGL, а с C++.

Цитата: zhenya_NOV
а как хто вообще грузит текстури в OpenGL и что для етого нужно ???



Декодирование различных форматов файлов в OpenGL не предусмотрено. А вообще для работы с текстурами используются функции:

1) Для загрузки в видео память: glGenTextures и glTexImage2D
2) Для рисования текстуры на полигоне: glBindTexture и glTexCoord2f

Это базовые функции для наложения одной текстуры, есть доп расширения (ARB и т.п.), которые позволяют накладывать одновременно несколько текстур.

15K
14 февраля 2008 года
vja
85 / / 09.01.2007
GLTools это же с книгой Супер Библия OpenGL идет...
чего же книгу не читаем там все очень даже подробно
1.9K
15 февраля 2008 года
andriano
474 / / 10.01.2008
Цитата: zhenya_NOV
ошибка таже !!а как хто вообще грузит текстури в OpenGL и что для етого нужно ???

Нужно описание формата, на основании которого пишется загрузчик того или иного типа файлов.
Все форматы кроме jpg так и гружу. А для jpg использую Интеловскую библиотеку ijl15.dll.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог