Проблемы с небом
От: HeaveN Россия  
Дата: 27.09.03 22:18
Оценка:
Здравствуйте, All!!!

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

void DrawSky ()
{
    glDisable (GL_DEPTH_TEST);
    glDisable (GL_LIGHTING);

    glMatrixMode (GL_MODELVIEW);
    glLoadIdentity ();

    // юзаем текстуру для передней грани
    TextureApply (&e_ft);

    glBegin (GL_QUADS);
    
    glTexCoord2f (1, 1);
    glVertex3f (20, 20, -20);
    glTexCoord2f (0, 1);
    glVertex3f (-20, 20, -20);
    glTexCoord2f (0, 0); 
    glVertex3f (-20, -20, -20);
    glTexCoord2f (1, 0);
    glVertex3f (20, -20, -20);

    glEnd ();

    // юзаем текстуру для правой грани
    TextureApply (&e_rt);
    
    glBegin (GL_QUADS);
    glTexCoord2f (1, 1);
    glVertex3f (-20, 20, -20);
    glTexCoord2f (0, 1);
    glVertex3f (-20, 20, 20);
    glTexCoord2f (0, 0); 
    glVertex3f (-20, -20, 20);
    glTexCoord2f (1, 0);
    glVertex3f (-20, -20, -20);
    glEnd ();
    
    // юзаем текстуру для левой грани
    TextureApply (&e_lf);
    
    glBegin (GL_QUADS);
    glTexCoord2f (1, 1);
    glVertex3f (20, 20, 20);
    glTexCoord2f (0, 1);
    glVertex3f (20, 20, -20);
    glTexCoord2f (0, 0); 
    glVertex3f (20, -20, -20);
    glTexCoord2f (1, 0);
    glVertex3f (20, -20, 20);
    glEnd ();

    // юзаем текстуру для нижней грани
    TextureApply (&e_dn);
    
    glBegin (GL_QUADS);
    glTexCoord2f (1, 0);
    glVertex3f (20, -20, -20);
    glTexCoord2f (1, 1);
    glVertex3f (-20, -20, -20);
    glTexCoord2f (0, 1); 
    glVertex3f (-20, -20, 20);
    glTexCoord2f (0, 0);
    glVertex3f (20, -20, 20);
    glEnd ();

    // юзаем текстуру для верхней грани
    TextureApply (&e_up);

    glBegin (GL_QUADS);
    glTexCoord2f (0, 1);
    glVertex3f (20, 20, 20);
    glTexCoord2f (0, 0);
    glVertex3f (-20, 20, 20);
    glTexCoord2f (1, 0); 
    glVertex3f (-20, 20, -20);
    glTexCoord2f (1, 1);
    glVertex3f (20, 20, -20);
    glEnd ();
    
    // юзаем текстуру для задней грани
    TextureApply (&e_bk);

    glBegin (GL_QUADS);
    glTexCoord2f (1, 1);
    glVertex3f (-20, 20, 20);
    glTexCoord2f (0, 1);
    glVertex3f (20, 20, 20);
    glTexCoord2f (0, 0); 
    glVertex3f (20, -20, 20);
    glTexCoord2f (1, 0);
    glVertex3f (-20, -20, 20);
    
    glEnd ();

    glEnable (GL_LIGHTING);
    glEnable (GL_DEPTH_TEST);
}


Как избежать разрывов? Да, и еще... Работать должно на RIVA TNT2, поэтому расширения типа CubeMapping юзать нельзя.
Заранее спасибо
... << RSDN@Home 1.1 beta 2 >>
Нет такого закона, что человеку летать нельзя...
Re: Проблемы с небом
От: Jax Россия  
Дата: 29.09.03 15:02
Оценка:
Может лучше использовать сферу с небольшим количеством граней...
Re: Проблемы с небом
От: OlegKuznecov  
Дата: 06.10.03 09:45
Оценка:
Текстурам для адрессации надо CLAMP ставить, чтобы они не тайлились. Не знаю как это в GL сделать
Posted via RSDN NNTP Server 1.7 "Bedlam"
Re[2]: Проблемы с небом
От: HeaveN Россия  
Дата: 06.10.03 12:19
Оценка:
Здравствуйте, OlegKuznecov, Вы писали:

OK>Текстурам для адрессации надо CLAMP ставить, чтобы они не тайлились. Не знаю как это в GL сделать


Пробовал и GL_REPEAT и GL_CLAMP. Результат один — щели между полигонами на стыках.
... << RSDN@Home 1.1 beta 2 >>
Нет такого закона, что человеку летать нельзя...
Re: Проблемы с небом
От: WolfHound  
Дата: 07.10.03 05:01
Оценка:
Здравствуйте, HeaveN, Вы писали:

HN>Нужно поместить камеру в космическом пространстве. Для отображения звездного неба использую куб с наложенными на его грани текстурами. Все вроде очень даже здорово, но на стыках граней образуются разрывы. Небо рисую так:


хъ

HN>Как избежать разрывов? Да, и еще... Работать должно на RIVA TNT2, поэтому расширения типа CubeMapping юзать нельзя.

HN>Заранее спасибо

Попробуй вывести полигона с небольшим нахлестом друг на друга. Может поможет.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Проблемы с небом
От: Аноним  
Дата: 09.10.03 07:36
Оценка:
Здравствуйте, HeaveN, Вы писали:

HN>Здравствуйте, All!!!


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


Разрывы есть всегда или при приближении камеры они исчезают?
Re[2]: Проблемы с небом
От: HeaveN Россия  
Дата: 09.10.03 12:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Разрывы есть всегда или при приближении камеры они исчезают?


Камера к небу не приближается, она всегда находится в центре куба. А вот наличие разрывов от расстояния до граней куба не зависит.
Нет такого закона, что человеку летать нельзя...
Re[3]: Проблемы с небом
От: Аноним  
Дата: 09.10.03 13:23
Оценка:
Здравствуйте, HeaveN, Вы писали:

HN>Здравствуйте, Аноним, Вы писали:


А>>Разрывы есть всегда или при приближении камеры они исчезают?


HN>Камера к небу не приближается, она всегда находится в центре куба. А вот наличие разрывов от расстояния до граней куба не зависит.


Еще как зависит...Например если передняя плоскость фрустума задана на небольшом расстоянии, тогда при удалении, дальний угол куба будет как бы съедаться.
Re[4]: Проблемы с небом
От: HeaveN Россия  
Дата: 09.10.03 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Еще как зависит...Например если передняя плоскость фрустума задана на небольшом расстоянии, тогда при удалении, дальний угол куба будет как бы съедаться.


Это само собой! Но у меня в обоих случаях передняя плоскость фрустума дальше, чем любая точка куба.
Нет такого закона, что человеку летать нельзя...
Re: Проблемы с небом
От: EyeGem Россия https://vk.com/enginya
Дата: 09.10.03 15:39
Оценка:
Здравствуйте, HeaveN, Вы писали:

HN>Здравствуйте, All!!!


HN>Нужно поместить камеру в космическом пространстве. Для отображения звездного неба использую куб с наложенными на его грани текстурами. Все вроде очень даже здорово, но на стыках граней образуются разрывы. Небо рисую так:


HN> (skipped)


HN>Как избежать разрывов? Да, и еще... Работать должно на RIVA TNT2, поэтому расширения типа CubeMapping юзать нельзя.

HN>Заранее спасибо

Разрывы образуются из за неточностей при преобразовании координат и выводе полигонов ускорителем.

Чтобы решить эту проблему можно увеличить чуть-чуть размеры всех квадратов-сторон (так, чтобы полигоны пересекались, но это не было заметно). Это дело будет работать даже если ты не проверяешь z-буфер при отрисовке полигонов "неба".

Пример:

  const float d1 = 20;         //это для неизменной координаты
  const float d2 = d1 + 0.01f; //это для размеров сторон квадрата

  ...
    
  // юзаем текстуру для передней грани
  TextureApply (&e_ft);

  glBegin (GL_QUADS);
  glTexCoord2f (1, 1); glVertex3f ( d2,  d2, -d1);
  glTexCoord2f (0, 1); glVertex3f (-d2,  d2, -d1);
  glTexCoord2f (0, 0); glVertex3f (-d2, -d2, -d1);
  glTexCoord2f (1, 0); glVertex3f ( d2, -d2, -d1);
  glEnd ();

  ...
... << RSDN@Home 1.1 beta 1 >>
^__^
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.