Программирование OpenGL с gl.h и glu.h только [дубликат]

В Интернете есть разные типы пользователей, поэтому мы хотим поймать IP-адрес из разных зелий. То есть

1. $_SERVER['REMOTE_ADDR'] - содержит реальный IP-адрес клиента. Это самое надежное значение, которое вы можете найти у пользователя.

2. $_SERVER['REMOTE_HOST'] - Это позволит получить имя хоста, с которого пользователь просматривает текущую страницу. Но для того, чтобы этот скрипт работал, имя хоста Lookups On внутри httpd.conf должно быть настроено.

3. $_SERVER['HTTP_CLIENT_IP']. Это приведет к выбору IP-адреса, когда пользователь находится в общих интернет-сервисах.

4. $_SERVER['HTTP_X_FORWARDED_FOR'] - Это приведет к выбору IP-адреса у пользователя, когда он находится за прокси

. Таким образом, мы можем использовать эту следующую комбинированную функцию для получения реального IP-адреса от пользователей, которые просматривают разные позиции,

// Function to get the user IP address
function getUserIP() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_X_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
        $ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
    else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if(isset($_SERVER['HTTP_FORWARDED']))
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if(isset($_SERVER['REMOTE_ADDR']))
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}
15
задан genpfault 25 August 2012 в 23:14
поделиться

2 ответа

Здесь вы смешиваете 3 разных объекта:

  1. OpenGL
  2. GL Utilities (GLU), которые не являются частью OpenGL
  3. и GL Extension Wrangler (GLEW)

GLEW и GLU - это совершенно разные вещи, и вы не можете заменить их другим.

GL/gl.h являются базовыми заголовками OpenGL , которые дают вам функции OpenGL-1.1 и объявления токенов, возможно, больше. Для чего-либо, выходящего за пределы версии 1.1, вы должны использовать механизм расширения OpenGL. Так как это скучная и утомительная задача, которая была автоматизирована проектом GLEW, который предлагает все грязные детали, собранные в простой в использовании библиотеке. Объявления этой библиотеки находятся в файле заголовка GL/glew.h. Поскольку расширения OpenGL не имеют смысла без базового OpenGL, заголовок GLEW неявно включает в себя обычный заголовок OpenGL, поэтому, включая GL/glew.h, вам больше не нужно включать GL/gl.h.

Затем есть GLU, набор удобных методов, которые BTW серьезно устарели и не должны использоваться в любой современной программе OpenGL. Там нет современного GLU, поэтому просто забывайте об этом. В любом случае, объявления становятся доступными заголовком GL/glu.h (тот, о котором вы просили).

Ошибки, которые вы получаете , не имеют никакого отношения к файлам . Это ошибки компоновщика. Просто включение деклараций - это только половина работы. Другая половина связывает фактические определения , и они не находятся в заголовке в файле библиотеки; libglew.so или libglew.a в ОС * nix OS, glew.lib или glew32.lib или glews.lib или glew32s.lib в Windows. Если вы не используете статические версии (те, у которых нет «s»), вы также должны установить правильную DLL.

Итак, чтобы использовать GLEW, вам нужно включить заголовок и добавить его в список библиотек в линкера. Также вы должны называть glewInit();, как только вы получили контекст OpenGL в своей программе.

38
ответ дан datenwolf 19 August 2018 в 04:00
поделиться
  • gl: Это базовый заголовочный файл для OpenGL версии 1.1. Это означает, что если вы хотите использовать любую функциональность помимо версии 1.1, вам нужно добавить любую библиотеку расширений.
  • glew: OpenGL Extension Wrangler Library. Это кросс-платформенная библиотека для загрузки расширенных функций OpenGL. Когда вы инициализируете эту библиотеку, она проверит вашу платформу и графическую карту во время выполнения, чтобы узнать, какие функции могут быть использованы в вашей программе.
  • glu: Это библиотека утилиты OpenGL, которая не обновлена ​​для много времени. Не нужно использовать этот файл заголовка.
  • glut: OpenGL Utility Toolkit для Windowing API. Это хорошо для программы OpenGL от малого до среднего. Если вам нужны более сложные библиотеки окон, используйте собственные инструментальные средства оконной системы, такие как GTK или Qt для Linux-машин.
  • glfw: OpenGL Frame Work. Другая многоплатформенная библиотека для создания окон и обработки событий. В качестве альтернативы можно использовать FreeGlut. glfw предназначен для разработки игр.
  • glm: OpenGL Mathematics. Это помогает реализовать векторы и операции с матрицами.

Я очень новичок в материалах OpenGL, поэтому, пожалуйста, исправьте меня, если я ошибаюсь.

16
ответ дан Jiho Noh 19 August 2018 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: