PMG https://forum.pmg.org.ru/ |
|
Помогите начинающему. https://forum.pmg.org.ru/viewtopic.php?f=1&t=5267 |
Страница 1 из 2 |
Автор: | MagicWolf [ 26 ноя 2007 09:41 ] |
Заголовок сообщения: | |
После include поставь: #pragma comment( lib, "opengl32.lib" ) |
Автор: | Iverton [ 27 ноя 2007 21:04 ] |
Заголовок сообщения: | |
разобрался уже, opengl32.lib был какой-то битый, заменил и все заработало. еще для visual c++ 7/8 нужно перед мейин int поставить, для чего незнаю но работает ) |
Автор: | loki [ 20 авг 2008 18:03 ] |
Заголовок сообщения: | Re: |
Iverton писал(а): еще для visual c++ 7/8 нужно перед мейин int поставить, для чего незнаю но работает ) Отжег ![]() Это не только для 7/8 нужно ставить int или void, но так же для всего ANCI C++, в соответствии со стандартом.... |
Автор: | Inferno7000 [ 20 авг 2008 21:26 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
Цитата: Отжег ![]() Я тоже давно так не смеялся. ![]() Вот глядите: Код: #include <stdio.h>
char main() { printf("Hello World\n"); return '0'; } |
Автор: | MagicWolf [ 25 авг 2008 11:25 ] |
Заголовок сообщения: | Re: |
Iverton писал(а): разобрался уже, opengl32.lib был какой-то битый, заменил и все заработало. еще для visual c++ 7/8 нужно перед мейин int поставить, для чего незнаю но работает ) По завершению работы всякая прога возвращает операционке код своего завершения. Например, это можно использовать в командных файлов, через переменную errorlevel. Вот этот int и есть код завершения. |
Автор: | lom80 [ 20 янв 2010 12:22 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
Начал разбираться с OpenGL, и сразу появились вопросы. Что означает формат (например для цвета) 0.0f? Если это шестнадцатеричное число, то что обозначает точка? Может я просто не догоняю. В WinAPI на каждый цвет (RGB) идет, к примеру, один байт и его интенсивность определяется числом 0 - ff. Этот формат я пока понять не могу. По системе координат я не могу разобраться, что такое одна единца. Она определяется в количестве пикселей, процента от длины экрана или от каких-либо других величин? Буду очень благодарен за помощь. |
Автор: | bad_duck [ 20 янв 2010 18:22 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
Это не шестнадцатеричное число, а просто приведение к типу float: если написать 0.0 то это будет тип double, а если 0.0f то float По-моему совершенно ненужная вещь, я нигде не ставлю эту f, и убрал в компиляторе warning на эту тему. А в системе координат сам задавай что является у тебя единицей, всё зависит от размеров твоих моделей. Я например взял за 1 метр. |
Автор: | lom80 [ 21 янв 2010 14:27 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
Большое спасибо, насчет float я действительно затупил. Не понятно, зачем использовать дробь для реализации цвета? По-моему в API это сделано намного лучше. Получается в каждой градации цвета всего 10 степеней интенсивности? |
Автор: | bad_duck [ 21 янв 2010 15:04 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
В OpenGL тоже можно использовать цвета от 0 до 255, для этого пользуйся функцией glСolor3ub() вместо glСolor3f(). Не знаю, но мне кажется в итоге все цвета переводятся в дроби т.к. в шейдерах используется дроби для цветов, а там вряд ли стали бы делать дроби просто так. |
Автор: | lom80 [ 22 янв 2010 12:33 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
Большое спасибо. Буду дальше изучать Великий и Могучий OpenGL ))) |
Автор: | lom80 [ 23 янв 2010 12:43 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
А еще меня давно мучает такой вопрос. Exe-программа использует библиотеки OpenGL, установленные на компьютере или компилятор вставляет их в код программы? Если библиотеки внешние, то можно ли вставить их в код? |
Автор: | bad_duck [ 23 янв 2010 14:34 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
использует внешнюю библиотеку opengl32.dll Включить ее в ехе не знаю как, да и зачем? Она поставляется вместе с драйверами для видеокарты. И opengl32.dll зависти от винды: например в XP х86 opengl32.dll имеет размер ~600 кб, на windows 7 x86 ~800, на windows 7 x64 ~1мб. И если использовать не тот opengl32.dll, то на этой проверке Код: if (!glewIsSupported( "GL_VERSION_2_0" )) выдает FALSE. Очень долго ломал голову почему возвращает FALSE даже на самых новых видяхах, а у меня всё работает, пока не поставил две версии 7 и обнаружил различия между размерами opengl32.dll. Так что нужно поставлять с игрой для каждой винды свою библиотеку или надеяться что в system32 лежит нужная opengl32.dll
{ MessageBox(hWnd, "Ваша видеокарта не поддерживает: GL_VERSION_2_0", "Ошибка", MB_ICONERROR | MB_OK); return FALSE; } |
Автор: | MagicWolf [ 23 янв 2010 20:59 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
Не совсем так. В opengl32.dll, который поставляется с Visual C++ включены только функции версии 1.2. Все остальные функции можно например получить через glee или glew. В самой системе windows есть два типа драйверов ogl: MCD - Mini Client Driver (урезанная версия аппаратной поддержки OpenGL - аппаратно поддерживает только некоторые функции OpenGL, остальное поддерживается программной реализацией; ICD - Installable Client Driver - полная поддержка OpenGL API реализации версии... которая зависит от производителя. Код: DescribePixelFormat(hDC_ogl_win, pixelFormat,sizeof pfd_ptr, &pfd_ptr);
#ifdef YES_DEBUG { int pal, mcd, acc, icd, opengl, window, bitmap, dbuff; pal = (pfd_ptr.iPixelType == PFD_TYPE_COLORINDEX); // MCD - Mini Client Driver (урезанная версия аппаратной поддержки OpenGL - аппаратно поддерживает // только некоторые функции OpenGL, остальное поддерживается программной реализацией. // ICD - Installable Client Driver - полная поддержка OpenGL API реализации 1.2 // PFD_GENERIC_ACCELERATED PFD_GENERIC_FORMAT Смысл // 0 0 полноценный ICD-драйвер с функциями ускорения // 0 1 <недопустимая комбинация> // 1 0 режим программной эмуляции; всю работу выполняет центральный процессор // 1 1 MCD-драйвер; аппаратно реализуется только часть функций ускорения mcd = ((pfd_ptr.dwFlags & PFD_GENERIC_FORMAT) && (pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED)); acc = !(((pfd_ptr.dwFlags & PFD_GENERIC_FORMAT) &&!(pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED))); icd = (!(pfd_ptr.dwFlags & PFD_GENERIC_FORMAT) &&!(pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED)); opengl = (pfd_ptr.dwFlags & PFD_SUPPORT_OPENGL) ? true :false; window = (pfd_ptr.dwFlags & PFD_DRAW_TO_WINDOW) ? true :false; bitmap = (pfd_ptr.dwFlags & PFD_DRAW_TO_BITMAP) ? true :false; dbuff =!!(pfd_ptr.dwFlags & PFD_DOUBLEBUFFER); log_debug( "/OGL_WIN3D/PixelFormat: pixelFormat=%d, bpp=%d, depth=%d, stencil=%d, alpha=%d, accum=%d, pal=%d, mcd=%d, acc=%d, icd=%d, opengl=%d, window=%d, bitmap=%d dbuff=%d PFD_GENERIC_FORMAT=%d PFD_GENERIC_ACCELERATED=%d", pixelFormat, pfd_ptr.cColorBits, pfd_ptr.cDepthBits, pfd_ptr.cStencilBits, pfd_ptr.cAlphaBits, pfd_ptr.cAccumBits, pal, mcd, acc, icd, opengl, window, bitmap, dbuff, pfd_ptr.dwFlags & PFD_GENERIC_FORMAT, pfd_ptr.dwFlags & PFD_GENERIC_ACCELERATED); } #endif if ( GLeeInit()==GL_FALSE ) { log_message("%s: %s","GLeeInit Error",""); return return_error(IS_ERROR,"%s",(char*)GLeeGetErrorString()); } GLeeFunc(); |
Автор: | MagicWolf [ 23 янв 2010 21:00 ] |
Заголовок сообщения: | Re: Помогите начинающему. |
В некоторых случаях icd драйвера на компе нет, или он может быть не задействан... |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |