OpenGL использует обратное текстурирование. Он берет координаты из мирового пространства (X, Y, Z) в пространство текстур (X, Y) в дискретное пространство (U, V), где дискретное пространство находится в области [0,1].
Возьмите многоугольник, подумайте об этом как лист бумаги. При этом:
glTexCoord (0,0); glTexCoord (0,1); glTexCoord (1,1); glTexCoord (1,0);
Вы указываете OpenGL на весь лист бумаги. Когда вы применяете модификации, ваше текстурирующее пространство изменяется в соответствии с координатами ввода. Вот почему, например, когда вы делитесь, вы получаете одну и ту же текстуру дважды, вы указываете OpenGL отображать половину листа, а не весь лист бумаги.
«Я предполагаю, что есть некоторая логика решения о размещении этих методов в том месте, где они есть».
blockquote>Хотя это часто верно, я обнаружил, что когда что-то не работает , это предположение обычно происходит там, где вы вводите в заблуждение.
Язык находится в постоянном развитии, с того дня, когда кто-то предлагает новый язык в тот момент, когда он устарел. Между этими крайностями есть несколько этапов, которые проходят язык. Особенно, если кто-то тратит на нее деньги и хочет, чтобы люди использовали его, часто возникает очень странная фаза перед или после первого выпуска:
« нам нужно, чтобы это работало вчера ".
Здесь происходит нечто подобное, у вас есть почти полный язык, но программистам нужно что-то сделать, чтобы показать, что может сделать язык, или для конкретного приложения требуется функция который не был разработан на языке.
Итак, где мы добавляем эту функцию? - ну, где это имеет смысл для этого конкретного программиста, которому поручено «заставить его работать вчера».
Логика может заключаться в том, что именно здесь функция имеет наибольший смысл, так как она не делает «не принадлежит нигде, и он не заслуживает собственного класса. Это также может быть что-то вроде: до сих пор мы никогда не делали копию массива, не используя систему .. позволяет помещать туда arraycopy и сохранять всех добавочных включений.
- в следующем генерация языка, люди не будут перемещать эту функцию, поскольку некоторые опытные программисты будут жаловаться. Таким образом, эта функция может быть дублирована и найдена в месте, где это имеет смысл.
гораздо позже, он будет отмечен как устаревший и удален, если кто-то хочет его очистить. .
Пример Integer - это, вероятно, просто дизайнерское решение. Если вы хотите неявно интерпретировать свойство как Integer, используйте java.lang.Integer. В противном случае вам нужно будет предоставить метод getter для каждого java.lang-Type. Что-то вроде:
И для каждого типа данных вам понадобится один дополнительный метод по умолчанию: - System.getPropertyAsBoolean (String, boolean) - System.getPropertyAsByte (String, byte) ...
Так как java.lang-Types уже обладают некоторыми способностями броска (Integer.valueOf (String)), я не слишком удивлен, обнаружив здесь метод getProperty. Удобство в торговле для преодоления принципов немного.
Для System.arraycopy, я думаю, это операция, которая зависит от операционной системы. Скорее всего, вы очень быстро копируете память из одного места в другое. Если бы я хотел скопировать такой массив, я бы поискал его в java.lang.System
Arrays.copyOf
и System.arraycopy
делают разные вещи. Первый - для создания новых массивов, второй для копирования между существующими.
– SpaceTrucker
10 March 2015 в 09:44
System.arrayCopy
также может быть реализована для использования базового оборудования.
– SpaceTrucker
10 March 2015 в 09:53