Войти
ПрограммированиеФорумГрафика

Зацените спецэффекты :) (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
22:32, 3 сен 2009

VDragon
кстати о последнем скрине, ожило, но цвет, немного зеленоватое оно какоето

Там зеленого ничего нет. Если ты имеешь ввиду те места где частици становятся прозрачными и их жизненный цикл уже заканчивается то это бледно бледно желтый ;)

Вот еще скрин

Изображение

шутка это я в пейнт нете сделал ;)

Собратья, единомышленики, друзья, что-то я увлекся подскажите как можно реализовать огонь хотябы немного похожий на Это скриншот.

#31
22:45, 3 сен 2009

Mekrod
У меня вот такой огонь. Подойдет?
Fire screenshot | Зацените спецэффекты :)

#32
23:23, 3 сен 2009

alex-r
Вполне подайдет. Вот что я навоял.

Изображение
Изображение
Изображение

Оцените какой лучше.

#33
23:41, 3 сен 2009

дурацкая идея - но вдруг покатит...
в незапамятные времена (ДОС 5.0, 640 кб оперативы, 320х200х256 цветов и Турбо-С) была масса красивых демок с огнем. насколько я помню, некоторые из них были очень даже реалистичные. если пошукать по сети таких древних исходничков, то там можно массу вдохновения почерпнуть :)

#34
23:44, 3 сен 2009

Mekrod
Срочно нужен HDR :)

#35
23:54, 3 сен 2009

Sergio666
Да только проблема у меня с HDR знаю что это, только как этим пользоваться в движке не знаю.
Но сначала нужно узнать как делать карты HDR.
А потом как их применять.
Ну и еще вопрос зачем при менять HDR  к огню. И что это даст.

На сколько я знаю HDR применяю для моделей, дабы придать им еще больше реализма. Если я неошибаюсь.

High Dynamic Range Rendering, часто сокращается до High Dynamic Range — графический эффект, применяемый в играх для наиболее выразительного рендеринга изображения при контрастном освещении сцены. Включает в себя несколько компонентов

#36
0:08, 4 сен 2009

alex-r поделись техникой красиво

#37
0:45, 4 сен 2009

Вот еще потрудился перед сном.

Изображение
Изображение
Изображение
Изображение

Правда один косяк при приближении камеры ФПС падает до 5. Сделаю поправку, делал всетаки на ноуте. Да и видюха Mobile Intel(R) 4;

#38
10:09, 4 сен 2009

Да, в принципе, ничего сложного у меня нет :)
Обычная система частиц: настраивается размер, цвет, макс. время жизни. Используется затухание по мере "умирания" частицы.
Рисуется биллбордами. Текстура огня выдрана из движка SPARK, некоторые идеи тоже :)
В шейдере делается поворот текстуры огня в зависимости от времени жизни (чтобы совсем однородно все не было).
Да, и еще при умирании частицы огня на ее месте добавляется частица дыма. Естественно, все рандомизировано (в смысле параметров).

Если нужны какие-то подробности, отвечу

#39
10:22, 4 сен 2009

текстуркой не поделитесь ?

#40
10:54, 4 сен 2009

I

Fire particle | Зацените спецэффекты :) Fire particle | Зацените спецэффекты :)
#41
11:13, 4 сен 2009

По поводу паинт нета, старых турбоси и генерации огня...
огонек | Зацените спецэффекты :)

делалось это както так...
тут откомпиленное: http://stream.ifolder.ru/13842415

#include <windows.h>
#include <math.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <sdl.h>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")

SDL_Surface *screen,*fire,*fire2;
SDL_Event evnt;
Uint32 timer = SDL_GetTicks();
Uint32 fps = 0;
GLUquadricObj *o;

SDL_Color colormap[256];
GLuint texture;

void bild_ramp(int from, SDL_Color fromcolor, int to, SDL_Color tocolor){
  if (from>to) {
    int temp=to;
    to=from;
    from=temp;
  }
  int len=to-from;
  float r=(float)(tocolor.r-fromcolor.r)/len;
  float g=(float)(tocolor.g-fromcolor.g)/len;
  float b=(float)(tocolor.b-fromcolor.b)/len;
  for (int i=0;i<len;i++){
    colormap[i+from].r=(r*i)+fromcolor.r;
    colormap[i+from].g=(g*i)+fromcolor.g;
    colormap[i+from].b=(b*i)+fromcolor.b;
  }
}

void pix(int x, int y, unsigned char color){
  if (((x>=fire->w)||(x<0))||((y>=fire->h)||(y<0))) return;
  ((unsigned char *)fire->pixels)[x+y*fire->w]=color;
}

unsigned char gpix(int x, int y){
  if (((x>=fire->w)||(x<0))||((y>=fire->h)||(y<0))) return 0;
  return ((unsigned char *)fire->pixels)[x+y*fire->w];
}

void burn(){
  char *pxl;
  for (int j = fire->h-9;j<fire->h-2;j++)
    for (int i = 0;i<fire->w;i++)
      pix(i,j,rand());
  for (int k=0;k<2;k++)
  for (int j = 15;j<fire->h-5;j++)
    for (int i = 0;i<fire->w;i++){
      pix(i,j,(
        gpix(i,j)+
        gpix(i+1,j)+
        gpix(i-1,j)+
        gpix(i,j+1)+
        gpix(i,j+1)+
        gpix(i,j+2)+
        gpix(i,j+3)+
        gpix(i,j+3)
        )>>3
      );
    }
}

void DrawScene(){
  burn();
  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  SDL_BlitSurface(fire,0,fire2,0);
  glBindTexture(GL_TEXTURE_2D,texture);
  glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,fire2->w,fire2->h-16,1,GL_RGBA,GL_UNSIGNED_BYTE,fire2->pixels);
  glEnable(GL_TEXTURE_2D);
  glPushMatrix();
  glScalef(1,0.6,0.2);
    glBegin(GL_QUADS);
      glTexCoord2f(1,1);
        glVertex3f(-1,-1,-1);
      glTexCoord2f(0,1);
        glVertex3f(1,-1,-1);
      glTexCoord2f(0,0.01);
        glVertex3f(1,1,-1);
      glTexCoord2f(1,0.01);
        glVertex3f(-1,1,-1);
    glEnd();
    glRotatef(90,0,1,0);
  glPopMatrix();
  glPushMatrix();
  glTranslatef(0,0.5,0);
  glRotatef(90,1,0,0);
  glTranslatef(0,0,-0.5);
  glRotatef(180,0,0,1);
  gluCylinder(o,0.2,0.2,1,20,1);
  glPopMatrix();
  glDisable(GL_TEXTURE_2D);
  SDL_GL_SwapBuffers();
}

void InitGL(){
  glViewport(0,0,screen->w,screen->h);
  glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
  GLfloat aspectRatio=(GLfloat)screen->w/(GLfloat)screen->h;
  GLfloat zoom = 1;
  GLfloat n=1;
  if (screen->w <= screen->h)
    glOrtho (-zoom,zoom,-zoom/aspectRatio,zoom/aspectRatio,-1,1);
  else
    glOrtho (-zoom*aspectRatio,zoom*aspectRatio,-zoom,zoom,-1,1);
  glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_LEQUAL); 
  glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  glEnable(GL_BLEND);
  o=gluNewQuadric();
  gluQuadricTexture(o,GL_TRUE);
}

int main(int argc, char *argv[]){
  if (SDL_Init(SDL_INIT_VIDEO)<0) return 1;
  atexit(SDL_Quit);
  screen = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
  InitGL();
  SDL_Color a={0,0,0};
  SDL_Color b={255,60,0};
  bild_ramp(110,a,120,b);
  a.r=255;
  a.g=200;
  a.b=0;
  bild_ramp(120,b,130,a);
  b.r=255;
  b.g=255;
  b.b=255;
  bild_ramp(130,a,200,b);
  bild_ramp(200,b,256,b);

  glEnable(GL_TEXTURE_2D);
  glGenTextures(1,&texture);
  glBindTexture(GL_TEXTURE_2D,texture);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  fire = SDL_CreateRGBSurface(SDL_SWSURFACE,128,128,8,0,0,0,0);
  fire2 = SDL_CreateRGBSurface(SDL_SWSURFACE,fire->w,fire->h,32,0x000000FF,0x0000FF00,0x00FF0000,0xFF000000);
  SDL_SetPalette(fire,0,colormap,0,256);
  SDL_SetColors(fire,colormap,0,256);
  while(1){
    DrawScene();
    SDL_PollEvent(&evnt);
    switch (evnt.type){
      case SDL_QUIT: exit(0);
      case SDL_KEYDOWN:
        switch (evnt.key.keysym.sym){
          case SDLK_ESCAPE: exit(0);
        }
        break;
    }
    SDL_Delay(1000/60);
    fps++;
    if ((SDL_GetTicks()-timer)>1000) {
      printf("fps : %d\n",fps);
      fps=0;
      timer=SDL_GetTicks();
    }
  }
  return 0;
}

#42
12:09, 5 сен 2009

http://www.uraldev.ru/articles/id/25

#43
16:28, 5 сен 2009

KyHTEP
Посмотрел ссылку там ничего не работает, наверное все удалили.

#44
16:50, 5 сен 2009

Mekrod
тот HDR про который ты говорил это не техника это специальные текстуры
а тот HDR про который говорил Sergio666 это техника пост обработки при котором сначало вычесляется общяя яркость сцены а потом в соответствии коректность картинки
вот пример
без HDR
Изображение
с HDR (сильное свечение справа это не HDR это Bloom)
Изображение

Страницы: 1 2 3 4 5 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.