Основы OpenGL на Android? - PullRequest
       2

Основы OpenGL на Android?

0 голосов
/ 05 февраля 2012

Я перебираю уроки, но у меня есть несколько заданий.

  1. когда создаются позиции для определенного объекта / многоугольника, они сохраняются как числа с плавающей точкой (количество пикселей составляет 1.0f)

  2. Когда я раскрашиваю многоугольник, используя оттенки цветов, какой метод используется (т.е.

    // R, G, B, A final float [] cubeColorData = {
    // Лицевая сторона (красная) 1,0f, 0,0f, 0,0f, 1,0f,
    1,0f, 0,0f, 0,0f, 1,0f, 1,0f, 0,0f, 0,0f, 1,0f, 1,0f, 0,0f, 0,0f, 1,0f,
    1,0f, 0,0f, 0,0f, 1,0f, 1,0f, 0,0f, 0,0f, 1,0f,

            // Right face (green)
            0.0f, 1.0f, 0.0f, 1.0f,             
            0.0f, 1.0f, 0.0f, 1.0f,
            0.0f, 1.0f, 0.0f, 1.0f,
            0.0f, 1.0f, 0.0f, 1.0f,             
            0.0f, 1.0f, 0.0f, 1.0f,
            0.0f, 1.0f, 0.0f, 1.0f,
    

3.Что такое матрица и ее назначение? 4. Как насчет буферов, которые создаются из позиций? Применяются ли изменения к буферам на каждом шаге кадра или позициям прямого вектора?

1 Ответ

2 голосов
/ 05 февраля 2012
  1. Зависит. Если вы просматриваете объект в 3D в реальном мире, например, в своем доме, то, сколько «пикселей в ширину» ваши глаза воспринимают, ваш дом зависит от того, как далеко вы от него! 1.0f - это единица, единица. Поэтому независимо от того, какой масштаб вы выберете, 1.0f будет одной единицей этого.

  2. Вы можете использовать glColor3f или glColor3vf, если хотите передать массив вершин. Это также зависит от того, используете ли вы OpenGL ES 1.1 или 2. Вы также можете использовать glColor4x, если хотите указать свои значения в шестнадцатеричном формате, и я думаю, что у них даже есть glColor3fi для целых чисел. Взгляните на ваш заголовочный файл OpenGL (или, я думаю, определение .class, поскольку вы говорите об Android / Java: android.opengl.GLU) +++

  3. Матрица - это двумерный массив чисел с плавающей точкой. Когда вы умножаете вектор на матрицу, вы получаете преобразованный вектор. Таким образом, вы можете использовать матрицу для преобразования векторов (которые являются объектными ориентациями и позициями) из одной системы координат в другую. Например, локальная система координат, используемая для описания объекта, может быть преобразована в мировую систему координат (где объект существует в вашем мире). Наличие локальной системы координат полезно, потому что она позволяет легко вращать объект вокруг себя. Наличие мировой системы координат полезно, когда многие объекты взаимодействуют друг с другом. Вы также можете преобразовать, скажем, в систему координат камеры. Подобно тому, как каждый объект в нашем реальном мире выглядит по-разному с разных ракурсов камеры, компьютер также должен знать, как преобразовать объект, который будет представлен в этих видах. У каждой камеры будет определена своя собственная матрица преобразования, и когда векторы или, вернее, вершины объекта умножаются на указанную матрицу, результатом является преобразованный объект в поле зрения камеры. Небольшое упрощение.

Некоторые предложили прочитать:

  • Трюки гуру по программированию трехмерных игр от Andre LaMothe. Он старый и говорит о программной растеризации вместо аппаратной, но он научит вас всей математике, необходимой вам для понимания 3D-графики, а затем еще немного.

  • Любая учебная книга по линейной алгебре

  • NeHe Программирование игр, просто погуглите его


+++ Примечание: Для ваших целей, как вы определили свои цвета, мне кажется, что вы, вероятно, захотите создать экземпляр буфера с плавающей запятой, сохранить в нем эти значения цвета и использовать функцию glColorPointer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...