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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [OpenGL] текстуры, и опять вернемся к нашим баранам 
:(
    Опции темы
Solomon
  Дата 3.5.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем добрый день
Столкнулся вот с какой проблемой.
есть картинка 2D(рис 1 в прикрепленном файле) 
После её прорисовки получаеться непонятный глюк (рис 2. в прикрепленном файле)
если же увеличить размер по X на 2 и более пикселей, то все рисуеться отлично, если уменьшаем по х то получаеться таже муть...
может кто сталкивался с данной проблемой и может помочь..

p.s. Да, я знаю что OpenGL работает со степенями 2-х, но надо такие размерности



Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  resource.zip 14,35 Kb


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
FIaR
Дата 3.5.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А так по идее и должно рисоваться  smile   А кто мешает текстуру сделать размером 128x128, например просто растянуть(наверное самый легкий вариант), или не растягивая поиграться с текстурными координатами. 
--------------------
Шуруп забитый молотком, держится лучше, чем гвоздь закрученый отверткой.  
PM MAIL   Вверх
just_geek
Дата 4.5.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Воспользоватся расширением http://www.nvidia.com/dev_content/nvopengl...ower_of_two.txt

Замечу, что хоть ссылка и ведет на сайт nvidia это ARB расширение, должно работать на картах ATI и прочих.

Это сообщение отредактировал(а) just_geek - 4.5.2008, 11:02
PM MAIL   Вверх
Solomon
Дата 5.5.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



FIaR, это почему так должно рисоваться? можно причину?
И всмысле поиграться с текстурными координатами? Если начну  и играться другие будут криво рисоваться.... 


just_geek, Спасибо.. посмотрю


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Solomon
Дата 5.5.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



just_geek, одна проблемка.. проекты у меня казуалки... и как то использовать расширения стремновато, так как наиболее часто в казуалки играют на стареньких тачках... Да я соглсен что уже расширение ARB это стандарт и поддерживаеться почти на 100% машин.. но все же... если например на машине не будут стоять дрова старенькие на видио, то хрен оно его захавает...

Это старенький движок я правлю, корпоративный, там народ раньше юзал какието либы стандартные, но с ними вечно были проблемы, типа зеркально отображенных картинок али вообще чудных багов которых вообще страшно вспоминать... подключил свою загрузку к их движки.. и начали вылазить такие глюки.. так как я когда писал свои загрузчики, я расчитывал только на стандартное разрешение(степень двойки) и не тестил на таких разрешениях. И теперь вот мучаюсь в догадках как все настроить... все работает.. и спрайтовые анимации и и большенство картинок... а вот некоторые парит и [censored 6] :(     


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
just_geek
Дата 6.5.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну тогда просто грузи как обычно и настраивай текстурные координаты, чтоб только прямоугольник этот рисовался.
PM MAIL   Вверх
AI0
Дата 22.5.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет. У меня проблема при отображении текстуры. Делал я всё по примеру, но так как под Linux нет библиотеки glaux я написал функцию считывания матрицы bmp. Но при запуске программы вместо картинки появляется белый квадрат. Может сцена инициализирована не так, чтобы можно было отображать текстуры? . Исходные коды вот:

imgread.c - содержит функцию чтения
Код


#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>

GLubyte* imgr(const char* filename)
{
    GLsizei width=0, height=0, size=0;
    GLubyte *RGBmas, *RGBmas_i;
    
    
    char sign[2];
    char color[3];
    FILE* file=fopen(filename,"rb");
    fseek(file,2,0);
    fread(&size, 4,1, file);
    fseek(file,18,0);
    fread(&width, 4,1, file);
    fread(&height, 4,1, file);
    
    int n;
    n=3*width*height;
    
    int m_size;
    m_size=sizeof(GLubyte)*n;
    RGBmas=(GLubyte*)malloc(m_size);
    RGBmas_i=(GLubyte*)malloc(m_size);
    fseek(file, 54, 0);
    fread(RGBmas,sizeof(GLubyte),n, file);
        
    fclose(file);
    
for(int j=0;j<=n-3;j=j+3)
{
    for(int i=0; i<=2;i++)
    {
        RGBmas_i[(2+j)-i]=RGBmas[j+i];

        
    }
}
    return RGBmas_i;
}


и morda.c - вся сцена
Кстати, размеры картинки я здесь установил явно.
Код

#include <GL/glut.h>
#include <GL/gl.h>
#include <math.h>
#include <stdio.h>
#include <GL/gl.h>
#include <stdlib.h>
extern GLubyte* imgr(const char* filename);
/*  Initialize material property and light source.
 */
float r=0;
float rot[5]= {0,0,0,0,0};
float a=0;
int speed=0;
bool automated=0;
bool paused=1;

struct cubik
{
float size;
float x;
};

//picture's params

unsigned int photo_tex;
GLubyte* photo_image;



void init (void)
{
   glClearColor (0.3, 0.3, 0.3, 0.0);
   
   
  // GLfloat light_ambient[] = { 1, 1, 1, 0.0 };
   //GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 0.0 };
  // GLfloat light_specular[] = { 1.0, 0.0, 0.0, 0.0 };
/*    light_position is NOT default value    */
   GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };

  // glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient);
   //glLightfv (GL_LIGHT0, GL_EMISSION, light_diffuse);
  // glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular);
   //glLightfv (GL_LIGHT0, GL_POSITION, light_position);

   //glEnable (GL_LIGHTING);
   //glEnable (GL_LIGHT0);
   //glEnable(GL_DEPTH_TEST);
     glEnable(GL_COLOR_MATERIAL);
 
}

void display (void)
{
static float time, time2=0;
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//glPushMatrix();
//glRotatef(rot[1],rot[2],rot[3],0);
glEnable(GL_TEXTURE_2D);
 //glColor3d(1,1,1);

 glBindTexture(GL_TEXTURE_2D, photo_tex );
  glBegin(GL_QUADS);
     glTexCoord2d(0,0); glVertex3d(-1,-1, -0.1);
     glTexCoord2d(0,1); glVertex3d(-1, 1, -0.1);
     glTexCoord2d(1,1); glVertex3d( 1, 1, -0.1);
     glTexCoord2d(1,0); glVertex3d( 1,-1, -0.1);
  glEnd();
 glDisable(GL_TEXTURE_2D);
//glPopMatrix();



    glutSwapBuffers();    

if(paused==0)
    {
    time=time+speed;

    }
if(automated==1)
{
time2+=1;
    rot[2]=(time2);
    if(rot[3]>=10000)
    {
rot[3]-=1;
rot[2]+=1;}
    if(rot[3]<=10000)
    {rot[3]+=1;
rot[2]-=1;}
        
        rot[1]=rot[1]+(sin((time2)/3000))/10;
}

}


void reshape(int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   gluPerspective(65.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glTranslatef (0.0, 0.0, -5.0);
   /*glViewport (0, 0, (GLsizei) w, (GLsizei) h);
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   if (w <= h) 
      glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w, 
               2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
   else 
      glOrtho (-2.5*(GLfloat)w/(GLfloat)h, 
               2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0);
   glMatrixMode (GL_MODELVIEW);
   glLoadIdentity ();*/
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
    a=0;
        rot[1]=0;
    rot[2]=0;
    rot[3]=0;
    rot[4]=0;
    glutPostRedisplay();
         break;

case 'q':
rot[1]=rot[1]+5;
rot[1]=(int)rot[1]%360;
     
     glutPostRedisplay();

     break;

case 'e':
rot[1]=rot[1]-5;
rot[1]=(int)rot[1]%360;
     
     glutPostRedisplay();

     break;

      
      case 'w':
rot[2]=rot[2]+5;
rot[2]=(int)rot[2]%360;

     
     glutPostRedisplay();

     break;
      
      case 's':
rot[2]=rot[2]-5;
rot[2]=(int)rot[2]%360;

     
     glutPostRedisplay();

     break;


      case 'a':
rot[3]=rot[3]+5;
rot[3]=(int)rot[3]%360;
     
     glutPostRedisplay();

     break;
case 'd':
rot[3]=rot[3]-5;
rot[3]=(int)rot[3]%360;
     
     glutPostRedisplay();

     break;
case 'n':
if(speed>0)
{
speed-=1;
}     
     glutPostRedisplay();

     break;
case 'm':
speed+=1;
     
     glutPostRedisplay();

     break;
      case 'z':
exit(0);

     
     glutPostRedisplay();

     break;
      case 'p':
if(paused==0)
{
    paused=1;
    
}

else
{
    paused=0;
    if(speed<1)
    {
    speed=1;
    }
}
     break;
case 'o':
if(automated==0)
{
    automated=1;
    
}

else
{
    automated=0;
    
}
     break;
   }
}

/*  Main Loop
 *  Open window with initial window size, title bar, 
 *  RGBA display mode, and handle input events.
 */
int main(int argc, char** argv)
{


photo_image=imgr("/home/ai/1.bmp");

glGenTextures(0, &photo_tex);
glBindTexture(GL_TEXTURE_2D, photo_tex);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, 3, 
             648,
             483,
             0, GL_RGB, GL_UNSIGNED_BYTE,
             photo_image);





glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

   glutInit(&argc, argv);
   glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
   glutInitWindowSize (800, 600);
   glutCreateWindow (argv[0]);
   init ();
   glutReshapeFunc (reshape);
   glutDisplayFunc(display);
    
    
   glutKeyboardFunc (keyboard);

   glutMainLoop();
   
return 0; 
//printf("%i", RGBmas[2]);
}


PM MAIL Jabber   Вверх
Solomon
Дата 22.5.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



AI0, ты в дебагере не смотрел переменную c данными о пикселях? нормально грузит? 

p.s. Вообще я думаю стоило создать новую тему!!!!


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
AI0
Дата 23.5.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да. Точнее, я даже тупо в консоль выводил этот массив, и там всё как положено, даже заранее инвертировано BGR на RGB. И ещё, когда я использовал другой пример, где были не 2d текстуры, а 3d, то картинка загружалась, и то по не понятной логике, но показывалась вся. К сожалению, сильно не разбираюсь пока в opengl, поэтому не стал использовать тот код, да и забрасывать то, что уже 4 суток ковырял не охота.

Это сообщение отредактировал(а) AI0 - 23.5.2008, 18:41
PM MAIL Jabber   Вверх
AI0
Дата 29.5.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё, разобрался, только до сих пор не понял, почему был косяк. Просто загрузку и привязку текстуры я вынес в отдельную функцию. И о чудо! Выскочила красная рожица, натянутая на квадратик!)))
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

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

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


 




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


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

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