проблема загрузки картинки в OpenGL
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) в чем проблема немойму потомучто прогама ето пример из книги. Помогите пожалуста хто может (((((
Я так и не увидел кода gltLoadTGA. Эта процедура в OpenGL не входит, ошибка в ней, ее и надо смотреть.
"gltLoadTGA" ето cтандартная функция библиотеки "GLTools" в моем коде она визивается в начале функции "RenderScene".А GLTools ето библиотека OpenGL
Надо спрашивать у автора этой библиотеки, если есть уверенность, что собственный код правилен.
А вообще, проще самому написать процедуру загрузки TGA, чем разбираться с чьими-то кривыми библиотеками.
Цитата:
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);
pImage = gltLoadTGA("fire.tga", &iWidth, &iHeight, &iComponents, &eFormat);
Функция gltLoadTGA скорее всего возвращает GLbyte *.
Лечим так:
Код:
GLbyte *pImage = NULL;
Или так:
Код:
pImage = (GLubyte *)gltLoadTGA("fire.tga", &iWidth, &iHeight, &iComponents, &eFormat);
ошибка таже !!а как хто вообще грузит текстури в OpenGL и что для етого нужно ???
Цитата: zhenya_NOV
ошибка таже !!
У тебя проблема не с OpenGL, а с C++.
Цитата: zhenya_NOV
а как хто вообще грузит текстури в OpenGL и что для етого нужно ???
Декодирование различных форматов файлов в OpenGL не предусмотрено. А вообще для работы с текстурами используются функции:
1) Для загрузки в видео память: glGenTextures и glTexImage2D
2) Для рисования текстуры на полигоне: glBindTexture и glTexCoord2f
Это базовые функции для наложения одной текстуры, есть доп расширения (ARB и т.п.), которые позволяют накладывать одновременно несколько текстур.
чего же книгу не читаем там все очень даже подробно
Цитата: zhenya_NOV
ошибка таже !!а как хто вообще грузит текстури в OpenGL и что для етого нужно ???
Нужно описание формата, на основании которого пишется загрузчик того или иного типа файлов.
Все форматы кроме jpg так и гружу. А для jpg использую Интеловскую библиотеку ijl15.dll.