Автор Тема: Рейтрейсер для анимации на GPU.  (Прочитано 27433 раз)

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #120 : 03 Август 2016, 15:28:50 »
Цитировать
1. Всегда можно найти место на просторах сети, где подскажут конкретно по существу проблемы, потому что достаточное количество литературы и примеров.
2. Указатели и ссылки - это реально круто. Манипуляция данными происходит по адресам этих данных в оперативке. В этом зарыта скорость выполнения.
3. ООП разгружает мозг, раскладывая всё по полочкам. Я поверил на слово Страуструпу, когда прочитал в книге его рекомендации почему не стоит использовать С там, где это совсем не требуется, почему не стоит на С++ писать как на С, используя структуры, отказываясь от классов и тому подобное...
1. Согласен, что инфы много больше... но больше и путаницы, как у меня вышло графической библиотекой от Bolrand.
2. Указатели присутствуют
C/C++:
Код
int a;
int *p;
p = &a;
*p = 123;
Freebasic:
Код
dim a as integer
dim p as integer ptr
p = @a
*p = 123

3. ООП есть и в Freebasic http://freebasic.justforum.net/t51-topic Пишут, что: Главное не забывать разрушать объекты иначе будет утечка памяти. Подробно: http://free-basic.ru/oop_1.html

Сравнение C/C++ и Freebasic http://free-basic.ru/helprus/TblComparisonC.html
« Последнее редактирование: 03 Август 2016, 15:47:55 от Samovar »

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #121 : 04 Август 2016, 00:48:07 »
Ланухумыч, у тебя есть желание продолжать заниматься самообразованием? Или проще накопить денег на тот же Win+V-Ray + железо (или иной рендерер под винду) и рендерить относительно шустро, без всех этих заморочек? :)

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #122 : 04 Август 2016, 16:51:11 »
Ланухумыч, у тебя есть желание продолжать заниматься самообразованием? Или проще накопить денег на тот же Win+V-Ray + железо (или иной рендерер под винду) и рендерить относительно шустро, без всех этих заморочек? :)
Всё идёт по расписанию. :)
У меня два раза в неделю курсы, где меня учат программировать изготовление деталей, и там совсем не С++. Морис просит помочь интегрировать мой код в официальную версию аддона "render_povray", там Python. Разработчик Povray ищет инфу по BezierMesh, который он хочет внедрить в рендерер, и, я пытался помочь ему находя решения в исходниках рендеров. У меня в голове сейчас такая каша, но я ещё успеваю думать про эту тему, ибо как ни странно, но желание у меня пока ещё осталось. :)

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #123 : 04 Август 2016, 17:03:45 »
Цитировать
Морис просит помочь интегрировать мой код в официальную версию аддона "render_povray", там Python.
Это очень хорошая новость. Мои поздравления!
Цитировать
У меня в голове сейчас такая каша, но я ещё успеваю думать про эту тему, ибо как ни странно, но желание у меня пока ещё осталось. :)
Понял... :)

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #124 : 04 Август 2016, 17:33:16 »
Цитировать
Морис просит помочь интегрировать мой код в официальную версию аддона "render_povray", там Python.
Это очень хорошая новость. Мои поздравления!
Для меня это не очень хорошая новость. Дело в том, что я написал импорт повреевской сцены в блендер с целью, о которой меня просили на офсайте поврея. Там люди боятся блендера, но хотят использовать его возможности для просчёта физики. Мой коннектор теперь может загружать повреевские объекты, чтобы в блендере накинуть на них ткань и прочее. Морису эта идея понравилась, он перенёс импорт в официальную версию, но ему теперь подавай импорт с материалами, блин. Зачем ему это, я не знаю, но обижать его не хочется, тем более, что моё имя фигурирует в списке разработчиков официальной версии. Нужно держать марку фирмы :)
А, там же в текстурах чёрт ногу сломает. Этот формат SDL - не лучшее, что можно было придумать, но Кристоф Липка, главный разработчик поврея уважает пользователя, и желает, чтобы тот писал как ему вздумается, хоть через жопу...

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #125 : 04 Август 2016, 20:43:51 »
Кстати, про оптимизацию в С++.
Я написал тестовый код, который по клику левой кнопкой мышки запускает цикл
Код
	for (int i = 0; i< 242000000; i++)
temp+=temp;
242 миллиона раз к результату прибавляется единица
компилирую в Geany файл командой
g++ -Wall -c "%f" -std=c++11 -lFOX-1.6
собираю командой g++ -Wall -o "%e" "%f" -std=c++11 -lFOX-1.6
тестирую и делаю скриншот заголовка
далее,
собираю командой g++ -Wall -o "%e" "%f" -std=c++11 -lFOX-1.6 -O5 (-О5 - команда оптимизации, можно написать -Ofast)
снова запускаю и делаю скриншот.
Показываю результаты:

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #126 : 04 Август 2016, 21:00:55 »
Код вот:
Код


#include "fox-1.6/fx.h"
#include <time.h>
#include <iostream>

using namespace std;


class ImageWindow : public FXMainWindow{
  FXDECLARE(ImageWindow)

protected:
  ImageWindow(){}
  FXStatusBar       *statusbar;

private:
    FXCanvas *canvas;
    FXColor bgColor = FXRGB(0, 0, 0);

public:
    enum {
        ID_CANVAS = FXMainWindow::ID_LAST,
    };

    long onPaint(FXObject *, FXSelector, void *);
    long onMouseDown(FXObject *, FXSelector, void *);

public:
  ImageWindow(FXApp* a);
  virtual void create();
  virtual ~ImageWindow();
  };

FXDEFMAP(ImageWindow) ImageWindowMap[] = {
        FXMAPFUNC(SEL_PAINT, ImageWindow::ID_CANVAS, ImageWindow::onPaint),
        FXMAPFUNC(SEL_LEFTBUTTONPRESS,   ImageWindow::ID_CANVAS, ImageWindow::onMouseDown)
};

FXIMPLEMENT(ImageWindow, FXMainWindow, ImageWindowMap, ARRAYNUMBER(ImageWindowMap))

ImageWindow::ImageWindow(FXApp* a):FXMainWindow(a,"FOX Render",NULL,NULL,DECOR_ALL,0,0,850,600,0,0){

        FXHorizontalFrame *container=new FXHorizontalFrame(this,LAYOUT_FILL_X|LAYOUT_FILL_Y|FRAME_RAISED);
        container->setBackColor(FXRGB(226,223,222));
        FXHorizontalFrame *chartwell=new FXHorizontalFrame(container,FRAME_SUNKEN|LAYOUT_FILL_X|
                                                                LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT,
                                                                0,0,0,0,10,10,10,10);
        canvas = new FXCanvas(chartwell, this, ID_CANVAS, LAYOUT_FILL_X|LAYOUT_FILL_Y);
        //statusbar=new FXStatusBar(this,LAYOUT_SIDE_BOTTOM|LAYOUT_FILL_X|STATUSBAR_WITH_DRAGCORNER);
        //statusbar->getStatusLine()->setNormalText("");
}

ImageWindow::~ImageWindow() {}

void ImageWindow::create() {
    FXMainWindow::create();
    show(PLACEMENT_SCREEN);
}

long ImageWindow::onPaint(FXObject *, FXSelector,void *ptr) {
    FXEvent *ev = (FXEvent *) ptr;
    FXDCWindow dc(canvas, ev);
    dc.setForeground(bgColor);
    dc.fillRectangle(0,0,canvas->getWidth(),canvas->getHeight());

    return 1;
}

timespec diff(timespec start, timespec end);

long ImageWindow::onMouseDown(FXObject *, FXSelector, void *ptr){
timespec time1, time2;
int temp = 0;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
for (int i = 0; i< 242000000; i++)
temp+=1;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    long b = 0;
    FXString name, ftemp;
    name = FXStringVal(diff(time1,time2).tv_nsec);
    ftemp = FXStringVal(temp);
    this->setTitle("Render Time: "+name+" nanosecond   "+ftemp);
    //statusbar->getStatusLine()->setNormalText("Render Time: "+name+" nanosecond");
    //statusbar->repaint();
    return b;
}
timespec diff(timespec start, timespec end)
{
timespec temp;
if ((end.tv_nsec-start.tv_nsec)<0) {
temp.tv_sec = end.tv_sec-start.tv_sec-1;
temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec-start.tv_sec;
temp.tv_nsec = end.tv_nsec-start.tv_nsec;
}
return temp;
}

int main(int argc,char *argv[]){
  FXApp application("FoxTest","FoxTest");
  application.init(argc,argv);
  new ImageWindow(&application);
  application.create();
  return application.run();
  }

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #127 : 06 Август 2016, 18:25:47 »
Так, ну, вроде бы подготовил гуёвину. Разобрался, как создавать и перерисовывать картинку. Вывод времени рендера вывел в статусбар, как у всех. Приделал кнопки.
Ну, теперь можно и приступать непосредственно к полётам.
Всё же мне кажется, что поскольку я собираюсь рендерить сцены блендера, то нужно у интернала позаимствовать камеру, лампочки, меш, и материалы, а, если получится и рейтрейсинг диффузных слоёв. Интернал очень хорошо считал то, что не зеркалит и то, что не стеклянное...

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #128 : 06 Август 2016, 22:25:17 »
Завтра напишу CMakeLists.txt,  создам дерево проекта, размещу на Гитхабе и кину ссылку.
Как будут собирать пользователи Виндовс - меня это не волнует, придётся им искать способы и методы вручную и самостоятельно. :)

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #129 : 07 Август 2016, 01:16:47 »
Честно сказать, libfox, не лучшее, что можно было выбрать. Попытался зарегиться на форуме получая  ответы - даже не получил письмо активации...
Fox - это лицензия GPL, это не трансформирующееся во времени виджеты...
Люблю КДЕ - это крутой десктоп и по возможности всегда юзаю кеды, но, надежды на него нет. Смена версий Qt иногда делает систему неработоспособной...и лицензия...
GTK -  гондоны. Что они сделали из стабильной версии gtk2 - расстрелять без суда и следствия...
FLTK -  быстродействующий тулкит, с количеством виджетов опережающих всех. Особенно для графики.. Я и его не взял. Ограничения в шрифтах. FLTK имеет несколько собственных шрифтов, которые в линуксе переназначить нужно особое умение...
Я беру то, во что не вложены ограничения...
Меня достаточно ограничили в жизни, чтобы я возненавидел любые ограничения.

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #130 : 07 Август 2016, 06:10:24 »
Вот интересного научного отечественного по теме почитать:

http://www.graphicon.ru/html/2013/papers/207-210.pdf
http://istina.msu.ru/media/dissertations/dissertation/8be/5fa/9651265/08_frolov_diss_compressed.pdf


Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #131 : 07 Август 2016, 10:05:01 »
Вот интересного научного отечественного по теме почитать:

http://www.graphicon.ru/html/2013/papers/207-210.pdf
http://istina.msu.ru/media/dissertations/dissertation/8be/5fa/9651265/08_frolov_diss_compressed.pdf
Спасибо, почитаю. Тут динозавры твои есть. Но, мы до GPU ещё не добрались. :)

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #132 : 07 Август 2016, 13:08:55 »
Цитировать
Тут динозавры твои есть.
Это одна из известных  сцены для теста рендерера, как и Sponza Atrium. Качал отсюда: http://www.3drender.com/challenges/
Challenge #17: Natural History
Цитировать
Но, мы до GPU ещё не добрались. :)
Пусть инфа поваляется тут :)  Случайно наткнулся...
« Последнее редактирование: 07 Август 2016, 13:15:16 от Samovar »

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #133 : 07 Август 2016, 13:16:35 »
В общем, не стану я пока создавать проект на Гитхабе, а CMakeLists.txt написал. Уже у меня четыре файла проекта есть. :)
Можно в магазин уже идти.
Samovar, ты вроде как писал, что будешь пробовать libFox устанавливать.
Вот файлы  (Аж 2,4 кБ в 7-zip!!!):

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #134 : 07 Август 2016, 13:21:42 »
Я пока не освоил make, чтоб собрать предложенную тобой стороннюю библиотеку для GUI. http://free-basic.ru/aboutmakefile.html
Полезная вещь... ковыряю потихоньку. http://rus-linux.net/nlib.php?name=/MyLDP/algol/gnu_make/gnu_make_3-79_russian_manual.html
может, что и не так делаю... потихоньку разберусь ...
« Последнее редактирование: 07 Август 2016, 13:25:46 от Samovar »

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 9309
Автор: LEXA ANЭGROWND
blender.png
Скачано: 9438
Автор: ipv2007
4.png
Скачано: 9382
Автор: hiroyukiss
2.png
Скачано: 9404
Автор: hiroyukiss

Скачано: 9472
Автор: Dilifa12