Pixar
OrangeBook and SuperBible - наше всё.
wat
Фрагментный шейдер может выполняться также над семплом пикселя. То есть когда вводили это понятие, смотрели глубже.
wat
> sample - это выборка из текстуры. Это либо точка (цвет) из текстуры — тексель,
> либо интерполированное значение (цвета) соседних точек (когда координаты
> приходятся "между" точками).
Я долго копался и вот нашёл более-менее расписанное определение сэмпла. А оно меня несколько беспокоит. По-моему оно не совпадает с тем, что сэмпл - это точка текстуры.
A sample is one sub-pixel location at which color, depth, and other values are stored. A sample is thought of as being a zero-sized point, while a pixel is thought of as being a square. Ordinary rasterization therefore has one sample per pixel, located at the center of the pixel square. In multisampling, there are multiple samples within the pixel square (typically 2, 4, or 8), but there is generally no way for an application to determine where in the pixel they are located. This is because the exact sample location is up to the hardware, and may even vary from one pixel to another.
Чего? Откуда у сэмла может быть положение, если у него нет размера? И что значит центр пикселя (center of the pixel square)? Кстати, что ещё за "other values" в этом сэмпле?
_______________________________________________________
Хотя есть и представление, что сэмпл - это точка текстуры O_o:
A texture sample is a point at which the texture color is looked up, lighting calculations are performed, pixel shader evaluated, etc. In multisampling, there is never more than one texture sample per pixel, even though there are many color/depth samples.
Оказывается есть ещё color/depth sample??? Что за ужас? :)
_______________________________________________________
A multisample buffer is a buffer that contains space for all the extra samples. There may be a regular frame buffer that contains one sample per pixel, and a separate multisample buffer that contains the remaining samples. However, the application usually need not be concerned with this.
Если есть экстра сэмплы, значит должны быть и обычные... А какие они, эти обычные сэмплы? =)
Здесь я совсем запутался. То есть один sample есть по-любому. Он хранится в frame buffer (это который back buffer?). Если включаем 2x мультисемплинг, то появляется (кстати где?) дополнительный multisample buffer, в который помещаются 2-а дополнительных сэмпла (каким образом?).
===
Ещё вопрос, не совсем по теме, но это должно помочь мне разобраться с этими сэмплами. Как получилась вот эта формула для текстурирования:
Perspective correct mapping interpolates after dividing by depth "z", then uses its interpolated reciprocal to recover the correct coordinate
Pixar
> Чего? Откуда у сэмла может быть положение, если у него нет размера? И что
> значит центр пикселя (center of the pixel square)? Кстати, что ещё за "other
> values" в этом сэмпле?
положение в фрагменте, посмотри доки NVIDIA про CSAA и тд
или доку mssdkdx10 про правила растеризации
тогда многие вопросы отпадут :)
innuendo
Спасибо, почитаю. Но сперва начну с Fundamentals of Texture Mapping and Image Warping. Основы, как-никак :).
Посмотрел на дату статьи, сразу подумалось, что буду неадекватным, если сейчас напишу, как никак 10 лет прошло, а нет, смотрю даже сейчас читают. Отличная стаття, по-моему, когда-то все статти такими были до появления харбара. :)
Но, это насколько я понимаю, OpenGL 1.1 кроме того никак не могу запустить glClearColor, и в паре glBegin, glEnd пробовал и без нее, не работает. Ну да ладно, это не интересно, интересно как же эти функции по умолчанию (на которых строиться стаття) взаимодействуют с расширениями. Хочу GLSL, но насколько я знаю в OpenGL 1.1 его и в помине не было, а мой файл "gl.h" на Windows 7 датирован аж 1996 годом, то есть не OpenGL 2.0. Скачать файлы поновее проблем нету. Есть проблемы с пониманием, как фиксированный конвеер вяжеться с расширениями и если я например буду задавать вершины, через процедуры описанные в этой статте, а для всего остального буду использовать расширения, будет ли такой подход работать? И вообще, конфликтуют ли расширения межу собой и с фиксированным конвеером, и насколько?
P.S. Насколько я знаю в DirectX 9 только растровые операции отключались при использовании шейдеров, вершинные буфера :) воспринимались нормально, а DirectX 10 уже все - не работает, нужна прослойка в виде описания вершинного шейдера и только через нее создается вершинный буфер, отчасти это вызвано смертью FVF для вершин в DirectX 10 и общей унификацией под шейдерную архитектуру. Из-за этого вот и не понятно в какую сторону ветер веет в OpenGL. Курить доки я буду в любом случае, интересно, просто перед тем как их курить иметь общее представление о библиотеке OpenGL.
Ну и конечно спасибо за статью, кстати в официальной докумментации нету информации о флагах WS_CLIPSIBLINGS и WS_CLIPCHILD нужных для адекватной перерисовки окна с под OpenGL, или может я пропустил, в любом случае отличная стаття, мое ИМХО.
Cyber_Wanderer
Что значит "никак не могу запустить glClearColor"? Функция, как бы, только задаёт цвет которым очистится буфер цвета после вызова команды glClear() с параметром GL_COLOR_BUFFER_BIT.
"...и в паре glBegin, glEnd..."
Эти функции в "паре" с glClear() не используются. Они нужны для отрисовки примитивов.
Pixar
>Fundamentals of Texture Mapping and Image Warping
Отличное чтиво!
Cyber_Wanderer
> Из-за этого вот и не понятно в какую сторону ветер веет в OpenGL
У OpenGL свой путь :)
.Scotina, yeap, так и есть, хотя я уже приноровился к черному.
Очень не хватает какой-нибудь математики, мне даже перемножение матриц самому писать пришлось, так как не использую функционал GL 1.1, ну почти не использую :) ( опять же очистка экрана и все-такое ), в любом случае, передаю уже посчитанную матрицу ModelViewProjection в шейдер, так что установка состояний в OpenGL 1.1 тут ни как не поможет. Так вот вопрос! Нужны соответственно процедуры для построения матриц масштабирования, поворота и переноса, есть ли они где-то на просторах OpenGL, сторонние библиотеки не предлагать, если я хочу ограничиться gl.h, glu.h и glext.h, есть ли у меня шансы избежать написания этих процедур?
А и еще вопрос наперед, если кому-то не сложно, я до этого не скоро дойду, что в OpenGL отвечает за клавиатуру, мышку, джойстик?
P.S. Потом заметил, что матрицы все же умножать можно, предварительно установив тип матрицы через glMatrixMode и загрузив туда какую-то матрицу "Мa" через glLoadMatrix, а потом с помощью glMultMatrix задать матрицу "Мb", на которую хотим умножить. Результат конечно, же заместит собою матрицу "Ма". Все это делать можно, но если использовать GLSL ( программируемый конвеер ), то такой способ смотрится несколько извращенным. И кроме, того нужно еще думать как матрицу "Ма" ( наш результат ) оттуда достать, так что, лучше математику изолированную от машины состояний использовать.
Cyber_Wanderer
> что в OpenGL отвечает за клавиатуру, мышку, джойстик?
OpenGL работает только с графикой. Устройства ввода её не касаются.
Cyber_Wanderer
Используй матлибу из какого-нибудь физического движка, её хватит с головой для графических нужд.
Клавиатура, мышь, окно - для подавляющего большинства задач достаточно GLUT, а если чего-то не хватит, то можно частично брать WinAPI и соответствующие вещи из x.
gl.h, glu.h и glext.h лучше не использовать, вместо них гораздо проще glew.h, иначе потом под линуксом геморра не оберёшься...
Cyber_Wanderer
Используй gl3.h, glext.h и wglext.h. Матлибу и сам сможешь написать, поглядывая на исходники того же glm'а, например. Ни глут, ни глу, ни другая чепуха для серьезного дела не подходят - на каждой платформе используй свой родной API. И будет тебе счастье.
Cyber_Wanderer
"...масштабирования, поворота и переноса, есть ли они где-то на просторах OpenGL..."
Есть. Это всякие glRotate...(), glTranslate...(), glScale...(). Посмотри уроки на:nehe.gamedev.net
Но помни! Уроки те сильно устарели. По хорошему надо делать как пишет SNVampyre, т.е. какую-нибудь мат.библиотек брать, или самому. Можешь посмотреть, как с таким подходом сделано, в исходниках графического движка Horde3D.
Cyber_Wanderer
> мне даже перемножение матриц самому писать пришлось
Возьми glm к примеру.
Тема в архиве.