Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Не отображаются текстуры


Автор: Joil 28.10.2009, 13:55
Привет всем!
Проблема в следующем: делаю лабу по OpenGL взял код из примера (он правда кривой, но рабочий), запустил на своей машине, оказалось что текстуры не отображаются, а вот на чужой машине все работает отлично... В чем может быть проблема, что то с видеокартой? Драйвера поставились вместе с вистой, видеокарта ATI RADEON XPRESS 1100. Скачал драйвера на оф сайте, поставил и сейчас проект при запуске вылетает сразу... Что делать? 
Вот код на всякий случай:
lab.h
Код

// включаем файл для работы с Windows
#include <windows.h>
// подключаем заголовочные файлы библиотеки OpenGL
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>
// запрещаем вывод предупреждений о преобразовании данных
#pragma warning(disable : 4305)     // 
#pragma warning(disable : 4244)     // 
static void Init(void ); // функция инициализации
//функция отслеживание изменения размеров окна
static void CALLBACK Reshape(int width,int height); 
static void CALLBACK Draw(void ); //функция рисования
static void CALLBACK KeyDown() {}; //функция обработки нажатия клавиши


lab.cpp
Код

//подключаем заголовочный файл проекта
#include "laba_4.h"
#include "3dmath.h"
#include <math.h>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glaux32.lib")

 GLint windW, windH; 
 AUX_RGBImageRec *back_img; 
 AUX_RGBImageRec * photo_img; 
 unsigned int photo_tex; 
 unsigned int back_tex; 
 // Функция, которая инициализирует все параметры 
 static void Init(void) 
 { 
 back_img=auxDIBImageLoad("back.bmp"); 
 photo_img=auxDIBImageLoad("photo.bmp"); 
 glGenTextures(1,&photo_tex); 
 glGenTextures(1,&back_tex); 
 glBindTexture(GL_TEXTURE_2D, photo_tex); 
 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
 glTexImage2D(GL_TEXTURE_2D, 0, 3, photo_img->sizeX, photo_img->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, photo_img->data); 
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 
 glBindTexture(GL_TEXTURE_2D, back_tex); 
 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
 glTexImage2D(GL_TEXTURE_2D, 0, 3, back_img->sizeX, back_img->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, back_img->data); 
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); 
 } 
 // Функция исполняемая при изменении окна 
 static void CALLBACK Reshape(int width, int height) 
 { 
 windW = (GLint)width; 
 windH = (GLint)height; 
 glViewport(0,0,width,height); 
 glMatrixMode( GL_PROJECTION ); 
 glLoadIdentity(); 
 glOrtho(-5,5, -5,5, -10,12);    
 gluLookAt( 0,0,5, 0,0,0, 0,1,0 ); 
 glMatrixMode( GL_MODELVIEW ); 
 glLoadIdentity(); 
 glPushMatrix(); 
 } 
 // Функция визуализации рисунка 
 static void CALLBACK Draw(void) 
 {  
 glEnable(GL_CULL_FACE); 
 glLoadIdentity(); 
 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 glEnable(GL_TEXTURE_2D); 
 glColor3d(1,0,0); 
 glBindTexture(GL_TEXTURE_2D, back_tex); 
 glBegin (GL_QUADS);
     glTexCoord2d(0,0);
     glVertex3d(-5,-5,-1); 
     glTexCoord2d(1,0);
     glVertex3d( 5,-5,-1); 
     glTexCoord2d(1,1);
     glVertex3d( 5, 5,-1); 
     glTexCoord2d(0,1);
     glVertex3d(-5, 5,-1); 
 glEnd(); 
 GLUquadricObj *quadObj; 
 quadObj = gluNewQuadric(); 
 glPopMatrix(); 
 glBindTexture(GL_TEXTURE_2D, photo_tex); 
 gluQuadricTexture(quadObj, GL_TRUE); 
 gluQuadricDrawStyle(quadObj, GLU_FILL); 
 glColor3d(0,0,1); 
 glRotated(1,-1,1,1); 
 gluSphere(quadObj,2,20,20); 
 gluDeleteQuadric(quadObj); 
 glDisable(GL_TEXTURE_2D); 
 glDisable(GL_CULL_FACE); 
 glPushMatrix(); 
 auxSwapBuffers(); 
 } 

 // главная функция - точка входа в программу 
 void main(int argc, char **argv) 
 { 
 windW = 512; 
 windH = 512; 
 auxInitPosition(10, 10, windW, windH); 
 auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE ); 
 if(auxInitWindow("Лабораторная работа НАЛОЖЕНИЕ ТЕКСТУР") == GL_FALSE)  {
 auxQuit();} 
 Init(); 
 auxIdleFunc(Draw); 
 auxReshapeFunc((AUXRESHAPEPROC)Reshape); 
 auxMainLoop(Draw); 
}[S][/S]

Автор: Alexeis 28.10.2009, 14:05
Цитата(Joil @  28.10.2009,  12:55 Найти цитируемый пост)
сейчас проект при запуске вылетает сразу... Что делать? 

  Дебажить. В каком месте летит? Думаю что проблема не в дровах. Если бы в драйвере, то вылетела бы не программа, а винда.

Автор: Joil 28.10.2009, 14:13
Цитата(Alexeis @  28.10.2009,  14:05 Найти цитируемый пост)
Дебажить. В каком месте летит? Думаю что проблема не в дровах. Если бы в драйвере, то вылетела бы не программа, а винда.


Да не Alexeis, тут помоему именно что то с видеокартой потому как этот же код работает на 4 других машинах, работает прекрасно.

Автор: Alexeis 28.10.2009, 14:54
Joil, статистика плохой помощник в программировании. На какой строчке летит? 

Автор: Joil 28.10.2009, 22:56
вылетает в строке  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

Автор: Alexeis 28.10.2009, 23:30
Мде... можно попробовать поменять разрешение буфера глубины.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)