Хорошо, так вот мой текущий рабочий процесс для рендеринга. Я создаю объект framebuffer без привязки к глубине/трафарету и только прикрепление текстуры цвета. Я привязываю фреймбуфер и накладываю на него все свои текстуры. Затем я копирую данные текстуры из текстуры буфера визуализации на другую текстуру (хотя эта часть не очень актуальна, поскольку проблема возникает при визуализации в буфер кадра). Поэтому проблема заключается в том, что после того, как рендеринг пройдет через границы окон, он перестает рисовать. Так вот образ того, что в настоящее время оказывается (жаль, что я должен размещать ссылки, не хватает репутации размещать изображения пока):OpenGL FrameBuffer не рендеринг за кадром
А вот образ фактических данных текстуры (при условии, gDEBUgger).
Как вы можете видеть, та часть, где он отсекает, где ширина окна. Использование glClear
также охватывает только размер окна текстуры и ничего больше. Я пробовал использовать glDisable(GL_SCISSOR_TEST)
вместе с glViewport(0, 0, texture_width, texture_height)
, но он все еще обрезает текстуру. Уменьшение размера окна просмотра в одной и той же точке, делая его более крупным, просто растягивает изображение и отсекает больше текстуры.
Я имею в виду, что имеет смысл, почему вы хотите рисовать пиксели за кадром, когда вы даже не можете их видеть, что было бы ужасно для производительности. В моем случае, однако, мне нужно это сделать. Вот почему я ищу способ отключить его или что-то в этом роде.
Также обратите внимание, что я отключил проверку глубины, поэтому не может быть, чтобы четкость глубины не проходила мимо оконных границ, так как я отключил ее.
У кого-нибудь есть идеи?
Редактировать: На всякий случай кто-нибудь увидит эту тему в будущем, просто хотел сказать, что решило ее для меня. Мне просто нужно было установить видовое окно на размер текстуры И масштабировать матрицу перспективы до того же размера при рендеринге. В моем случае я использовал свой собственный матричный класс. Вот пример:
glViewport(0, 0, texture_width, texture_height);
perspective_mat.identity();
perspective_mat.scale(1.0f/(texture_width/2), -1.0f/(texture_height/2));
perspective_mat.translate(-1.0f, 1.0f);
В случае, если вы используете фиксированные трубопроводную вещи (не шейдеров, т.д.), то вы можете использовать матричные функции OpenGL для масштабирования и перевода. :)
Хм, это, кажется, работает в настоящее время по некоторым причинам. Должно быть, я пропустил его, работая как-то после установки окна просмотра, но не совсем точно. Но, в любом случае, спасибо за помощь, я все равно помету как решение. :) – QualityPixels