Свежие комментарии

Title Comment
Да, еще больше

Да, еще больше запутался.

Потому что у меня нет треугольников. У меня есть прямоугольник, некую область из которого (тоже прямоугольную) надо показать в окошке. Всех этих ужасов с вращением - мне не надо вовсе.

Я вот книжку почитаю - будет легче.

Ну я скорее к тому, что на

Ну я скорее к тому, что на 2.x может быть можно смело забить и смотреть на 3.x (а может и 4.x).

C OpenCL в том что мне надо в дальнейшем (не сейчас) - все тоже банально, OpenCL генерирует текстуру, OpenGL - натягивает на экран.

Для тех целей которые описаны

Для тех целей которые описаны в посте хватит самой примитивной карты того же 2004 года. Я точно не помню, но шейдеры 2.0 делают то что написано и даже больше. Вот в книжке как раз описаны карточки и версии шейдеров, которые стали проще в использовании (появился си подобный язык). Другое дело что если надо соединить это все с opencl. Тогда надо смотреть.

Ясно. Есть треугольник в

Ясно.
Есть треугольник в каких то координатах например как в моем темплейте -1..1. Его надо нарисовать. Что бы понять где рисовать нужно преобразовать координаты треугольника в экранные координаты. Для этого нужно собрать матрицу. В матрица представлены: перемещение, вращение, увеличение. То есть умножая вектор на матрицу мы преобразовывает одни координаты в другие. Есть еще перспектива, она тоже всовывается в матрицу. Про перспективу лучше картинку посмотреть.

Каждый фрейм в опенгл начинается с очистки буферов - glClear. Буфера бывают разные, есть экранный буфер, есть стенсил буфер, есть буфер глубины и т.д. Как минимум нужен экранный буфер. Он опять таки хитрожопо мапится на окошко в виндовз или там линуксе. QT это лучше сделает.
Дальше начинаем рисовать. У нас есть геометрия: вершины треугольника, цвет в каждой вершине, и например координаты текстуры для каждой вершины. Вызывая glColor и glVertex мы засылаем данные в драйвер. Драйвер строит разные буфера которые потом отдаст карте. Карта начинает это все считать когда вызывает glSwapBuffers.

С каждой вершиной ассоциируется пакет аттрибутов: цвет, текстурные координаты и т.д. Это все передается геометрическому шейдеру. В шейдере как я уже говорил как минимум перемножается матрица проекции 3д координаты вершины в экранные координаты. После чего карта растеризует треугольник и вызывает пиксельный шейдер. Пиксельный шейдер должен вернуть цвет, именно его и положит карта в графическую память.

Еще больше запутался? :)

Да, и про науку. Я вот так

Да, и про науку.
Я вот так вот подозреваю, что если ориентироваться только на видеокарты выпущенные в 2007-м году и позже, то многие вещи внезапно станут сильно проще.

Мне непонятна именно

Мне непонятна именно целостная картина.

Т.е. почти про каждую строчку кода в Qt-шных примерах - я понимаю что она делает.

А вот почему делается именно это и в таком порядке - не понимаю.

Соответственно, и вопрос задать не могу т.к. надо знать половину ответа.

OpenGL SuperBible вполне сгодится. На самом деле, поскольку

OpenGL SuperBible вполне сгодится. На самом деле, поскольку я лет 7 назад проходил той же самой дорогой, то могу сказать что сгодится любая, с хорошим рейтингом на амазоне и более-менее up to date (ну чтоб как минимум 2.1 покрывала). И тебе из нее надо 10%.

Потому что тебе реально надо засетапить ортогональную проекцию, засетапить mapping mode (уже забыл какой), и нарисовать простейший шейдер (скопировав из любого примера). Без шейдера тоже можно, но на самом деле удобнее прям с нуля с ним, потому что все равно понадобится. Когда я этим занимался, грузить текстуры надо было каким-нибудь расширением, а не штатными средствами, штатные средства по скорости работы напоминали *dst++ = *src++; Наверняка за прошедшее время эти расширения уже в сам стандарт загнали. Через расширения гигабайт в секунду с диска на телевизор я загонял уже тогда. Еще вопрос - tiling, опять же тогда, максимальный размер текстуры (у нвидии) был 4096. Поскольку мне для кино больше было и не надо, я и не парился, а фотачки бывают заметно побольше. Это тоже понятно - рисуешь не один прямоугольник, а два-четыре-сколько надо и настраиваешь текстурные координаты так, чтобы они "продолжались" поперек этих прямоугольников.

Там вся суть геометрических трансформаций вырождается в простые линейные пересчеты (поскольку проекция ортогональная) - геометрические координаты прямоугольничка пересчитываются в тексели (текстурные координаты), которые фрагментный процессор пересчитывает в реальные пиксели. Поэтому пан и зум - бесплатные (просто циферки в пайплайне меняешь).

Qt-шные - на макоси успешно собираются, как и на винде. Лин

Qt-шные - на макоси успешно собираются, как и на винде.

Линукс меня слабо интересует пока.

Мне вот тоже хочется, в порядке самообразования. Что-то все

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

> Но она 2004-го года, я так

> Но она 2004-го года, я так подозреваю, что с тех пор наука шагнула очень далеко вперед.
Я бы не сказал. Ну то есть наука конечно шагнула, но той книжки хватит что бы сделать вполне приличный движек.

А что именно не понятно? Обычно после описания проблемы, и решение как то сразу приходит.
Там немножко все запутанно из за того что:
В OpenGL до шейдеров был фиксированный pipeline. То есть надо было задавать матрицы преобразования координат вершин через спец комманды https://github.com/dubik/OpenGLTemplate/blob/shaders/glwindow.cpp#L40 потом загружая геометрию в в драйвер https://github.com/dubik/OpenGLTemplate/blob/shaders/glwindow.cpp#L52 оно тупо перемножалось. Цвет и текстурка бралась из других спец комманд https://github.com/dubik/OpenGLTemplate/blob/shaders/glwindow.cpp#L51. К тому же есть комманды которые включают освещение.

После того как появились геометрические шейдеры, это можно делать в коде шейдера, без спец комманд. То есть матрицу можно передать геометрическому шейдеру в виде аттрибута и он уже будет перемножать ее (и не только) с геометрией https://github.com/dubik/OpenGLTemplate/blob/shaders/shaders/solidColor....
после того как отрабатывает геометрический шейдер, запускаются пиксельные. Карта растеризует треугольник и для каждого пикселя вызывает main https://github.com/dubik/OpenGLTemplate/blob/shaders/shaders/solidColor....
самая засада тут понять какие переменные входят в шейдер а какие выходят. Меня в свое время это жутко бесило. При линковке шейдеров, компилятор или драйвер хитрожопо выясняют могут ли они выходные аттрибуты одного соединить со входными аттрибутами другого. К тому же есть встроенные выходные аттрибуты типа gl_FragColor. Это цвет выходного пикселя. Кстати в этом случае освещение надо считать самому. В книжке написано как именно, но идея в том что передаеш координаты лампочки в геом шейдер и он может посчитать светимость в каждой вершине, потом он передаст эти аттрибуды в пиксельный шейдер. Пиксельный шейдер можно просто проинтерполировать или посчитать свет уже в каждом пикселе.

Кстати еще про входные аттрибуты. В геометрическом шейдере
varying vec4 vColor;

void main(void)
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
vColor = gl_Color;
}

gl_ModelViewProjectionMatrix - это встроенный аттрибут, в который запихнулась матрица после вот этого
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, (GLdouble)w / (GLdouble)h, -10, 10);
glMatrixMode(GL_MODELVIEW);

gl_Color - это то что приходит из glColor3f(1.0f, 0.0f, 0.0f);

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

Могу дать туториал по opengl es 2.0 . Там практически всё, ч

Могу дать туториал по opengl es 2.0 .
Там практически всё, что не относится к EGL и созданию контекста, будет работать на десктопе.
Заодно с переносимостью будет получше ;)

Книжку спиратил, спасибо. Но

Книжку спиратил, спасибо.
Но она 2004-го года, я так подозреваю, что с тех пор наука шагнула очень далеко вперед.

А темплейт - я на даче примерно такой же написал (копипастом из qt-шных примеров) и понял, что не понимаю базы.

Ну да, пусть qt. Но вот все эти пассы, которые в QGLWidget

Ну да, пусть qt.

Но вот все эти пассы, которые в QGLWidget происходят - я хочу понимать что там написано, а не каким-то чудом скомпоновать кусок работающего кода, не понимая что делаю.

Ну да. Только пусть Qt этим всем управляет - чтобы не возить

Ну да.
Только пусть Qt этим всем управляет - чтобы не возиться напрямую с gl кодом.

Да, оно на Qt и естественно я на все эти setViewport смотрел

Да, оно на Qt и естественно я на все эти setViewport смотрел.

А потом задумался, а хрен ли собственно, вот та же самая отрисовка одного из каналов (R-G-B-G2) - это банальное копирование одной компоненты в остальные. Ну так и пусть это видеокарта делает, у нее мозги больше.

Я тут налабал темплейт

Я тут налабал темплейт https://github.com/dubik/OpenGLTemplate/ . Там еще есть бранч с шейдером. А вот мега книжка по шейдерам http://www.amazon.com/Shaders-Programmers-Artists-Premier-Development/dp... есть в электронном виде. Шейдеры лучше в рендермонкей делать, ну если простые то можно и в коде.

А RawDigger - оно на Qt? Если Qt, то тогда оно на виджетах и

А RawDigger - оно на Qt?
Если Qt, то тогда оно на виджетах или GraphicsView?
Там можно подсунуть QGLWidget в качестве вьюпорта и тогда активный контекст будет opengl и пиксмапы будут с буфером в текстуре для отрисовки.
Можно и самому поизвращаться с загрузкой картинок в текстуру и отрисовкой через QGLWidget::drawTexture .

http://qt-project.org/doc/qt-4.8/qtopengl.html
Просто с opengl для каждой платформы всё разное (glx, wgl, agl, egl) и меня лично ломает писать сетап код.

qt5 вроде полностью на opengl и работает с тяжелой графикой быстрее, но оно пока даже не бета.

Оно не нафига, а отчего. Какой был php.ini, такое в ем expo

Оно не нафига, а отчего.

Какой был php.ini, такое в ем expose_php

Ну и заодно можно косвенным путём определить, какая именно в

Ну и заодно можно косвенным путём определить, какая именно версия PHP используется.
А главное - совершенно непонятно, нафига это нужно.

It is no security threat in any way, but it makes it possibl

It is no security threat in any way, but it makes it possible to determine whether you use PHP on your server or not.

Тоже мне секрет, что в друпале используется PHP....

http://blog.lexa.ru/?=PHPE9568F34-D428-11d2-A769-00AA001ACF4

http://blog.lexa.ru/?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
Смешно, правда?

Ещё смешнее:
http://blog.lexa.ru/?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Фикус тут в том, что у ICAO

Фикус тут в том, что у ICAO есть множество всяких правил, которые приличные люди выполняют, а неприличные - не торопятся. Одни неоригинальные запчасти чего стоят.
Так что если законопослушную USPS или еще там кого можно обязать проверять, то (условно) какая-нибудь Гонконгская ограничится тем, что напишет в своих правилах "низзя", а проверять реально будет далеко не всегда - это же от конечных исполнителей зависеть должно, т.е. тех самых пофигистов-приемщиков.

"В составе приборов" все одно

"В составе приборов" все одно лучше. Потом -- у них и про косметику (жидкую) написано, тем не менее кладут, лишь бы в декларации было туманно написано.

Ну и и в общем -- речь была про запрет USPS аккумуляторов вообще, в т.ч. в составе приборов. А тут вроде как дырочка есть.

Да, по разнице, в теории,

Да, по разнице, в теории, можно. В практике - 2 (и даже 20) граммов лития ловить в контейнере - бессмысленно.
А вот если отдельный пакет досматривать, то можно и без рентгена, сказано же "батарейки нельзя"

Натюрлих, РФА сам по себе

Натюрлих, РФА сам по себе литий не видит (все только тяжелее бериллия), но по какой-нибудь разнице-то можно вычислить (количественный анализ)? Хотя в любом случае, этой хренью никто заниматься не будет.

https://shopfans.ru/faq.html?

https://shopfans.ru/faq.html?section=11:

Товары, запрещенные к пересылке в международных почтовых отправлениях:
...
батареи (батарейки разрешены к пересылке только в составе приборов. Аккумуляторы разрешены к пересылке, кроме аккумуляторов с жидким электролитом и с содержанием ртути.);

Насколько я помню,

Насколько я помню, характеристический рентген влегкую поглощается более тяжелыми элементами.
Т.е. для ловли пика от лития, между образцом и детектором не должно быть ничего тяжелее гелия. Что маловероятно.

P.S. То есть нам объясняли, отчего детектор в микрозонде прикрыт бериллиевой фольгой - прикрываясь именно этими соображениями.
P.P.S. Какая только ерунда не запоминается, микрозонду меня учили 22 года назад и с тех пор ни разу не пользовался.

Старый уже пост, но я тут

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

Палочки - при более-менее ярком (дневном) освещении насыщаются и все.

Некоторые считают, что

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

У shopfans.ru есть вид

У shopfans.ru есть вид доставки BWW-что-то-там (brokers world wide), оно едет через Германию не почтой США.

Pages

Subscribe to comments_recent_new