В настоящее время я работаю над небольшой игрой для iPhone и переношу 3D-движок, который я начал разрабатывать для Mac на iPhone. Все это происходит очень хорошо, и вся функциональность движка Mac теперь присутствует на iPhone. Двигатель был отнюдь не закончен, но теперь, по крайней мере, у меня есть основное управление ресурсами, график сцены и конструкция, которые легко оживляют и перемещают объекты вокруг.Управление государственным управлением OpenGL
Снимок экрана из того, что у меня есть сейчас: http://emle.nl/forumpics/site/planes_grid.png. Маленький самолет - это тестовый объект, который я сделал несколько лет назад для игры, которую я делал тогда. Это не связано с игрой, которую я сейчас разрабатываю, но, конечно, 3-й движок и его средства.
Теперь я пришел к теме материалов, описание которых текстуры, огни и т. Д. Относятся к рендерируемому объекту. Это означает, что много запросов OpenGL clientstate и glEnable/glDisable для каждого объекта. Каким образом вы бы предложили минимизировать эти изменения состояния? В настоящее время я сортирую по материалам, так как объекты с одним и тем же материалом вообще не нуждаются в каких-либо изменениях. Я создал класс RenderState, который кэширует текущее состояние OpenGL и применяет только те элементы, которые отличаются при выборе другого материала. Является ли это работоспособным решением, или оно будет выходить за рамки контроля, когда двигатель созревает, и все больше и больше состояний нужно кэшировать?
У вас там есть точка. Тем не менее, наличие хотя бы слегка обобщенного и оптимизированного графического движка поможет мне быстро ускорить выполнение нескольких идей. Вопрос renderstate, я думаю, по-прежнему остается в силе, потому что и игровым движкам придется делать некоторое управление renderstate ... – Emiel