Try...catch
http://php.net/manual/en/language.exceptions.php
Вы можете сделать эхо-сообщение ошибки в своем собственном css.
Следующий вызов выключит объекты порождения тестирования глубины, которые будут оттянуты в созданном порядке. Это в действительности вызовет объекты потянуть наоборот.
glDepthFunc(GL_NEVER); // Ignore depth values (Z) to cause drawing bottom to top
Быть уверенными Вы не называете это:
glEnable (GL_DEPTH_TEST); // Enables Depth Testing
Для Вашего конкретного вопроса нет нет никакого стандартизованного способа для определения упорядочивания глубины в OpenGL. Некоторые реализации могут сделать переднюю сторону для поддержки глубины, заказывающей по умолчанию, потому что это обычно быстрее, но это не гарантируется (когда Вы обнаружили).
, Но я действительно не вижу, как это поможет Вам в Вашем сценарии. При рисовании черного квадрата перед белым квадратом, черный квадрат должен быть оттянут перед белым квадратом независимо от того, какой порядок они привлечены в, пока Вам включили глубину, буферизующую. Если они являются на самом деле компланарными, то никакой не действительно перед другой, и любой алгоритм сортировки глубины был бы непредсказуем.
учебное руководство, на которое Вы отправили ссылку только, говорило об этом, потому что сортировка глубины релевантна при использовании прозрачности. Но это не звучит мне как, это - то, что Вы после.
, Но если действительно необходимо сделать это тот путь, тогда необходимо сделать это сами. Сначала отправьте свой белый квадрат на конвейер рендеринга, вызовите рендеринг, и затем отправьте Ваш черный квадрат. Если Вы делаете это тот путь и отключаете буферизацию глубины, то квадраты могут быть компланарными, и Вам все еще гарантируют это, черный квадрат оттянут по белому квадрату.
Потяните объекты, что Вы хотите быть в назад немного позади объектов, что Вы хотите быть в передней стороне. Таким образом, на самом деле изменитесь, значение z (принимающий z перпендикулярно экранной плоскости). Вы не должны изменять его много, чтобы заставить объекты тянуть друг перед другом. И если Вы только изменяете значение z немного, Вы не должны замечать большую часть смещения от их желаемого положения. Вы могли даже пойти действительно необычные, и вычислить корректный x, y положение на основе сменившего z положения, так, чтобы объект появился, где это, как предполагается, находится.
Рисование порядка твердо. Нет никакого легкого решения. alogorithm живописца (объекты вида их расстоянием относительно представления Вашей камеры) является самым простым, но поскольку Вы обнаружили, это не решает все случаи.
я предложил бы комбинацию algroithm и слоев живописца. Вы создаете слои для определенных элементов на Вашей программе. Таким образом, Вы получили фоновый слой, слои объектов, слои специального эффекта и уровень GUI.
Использование алгоритм живописца на объектах каждого слоя. В некоторых специальных слоях (как Ваш уровень GUI), не сортируйте с алгоритмом живописца, но Вашим порядком вызовов. Вы называете тот белый квадрат сначала, таким образом, он оттянут сначала.
Ваш материал будет оттянут в точном порядке, в котором Вы вызываете glBegin/glEnd функции. Можно получить буферизующее глубину использование z-буфера, и если 2-е объекты имеют различные значения z, можно получить эффект, Вы хотите тот путь. Единственным путем Вы видите поведение, которое Вы описываете на Mac, то, если программа тянет материал в наоборот порядке вручную или использует z-буфер для выполнения этого. OpenGL иначе не имеет никакой функциональности автоматически, как Вы описываете.
Как AlanKley указал, способ сделать, это должно отключить буфер глубины. Алгоритм живописца является действительно 2D методом сканирующего преобразования, используемым для рендеринга полигонов в правильном порядке, когда у Вас нет чего-то как z-буфер. Но Вы не применили бы его к 3D полигонам. Вы обычно преобразовывали бы и проектировали бы их (пересечения обработки с другими полигонами) и затем сортировали бы получающийся список 2D спроектированных полигонов их спроектированной z-координатой, затем тянули бы их в обратном z-порядке.
я всегда думал об алгоритме живописца как об альтернативной технике для удаления невидимой поверхности, когда Вы не можете (или не хотеть к), используют z-буфер.