Войти
ПрограммированиеФорумГрафика

Наиболее эффективный путь освоения OpenGL (17 стр)

Страницы: 113 14 15 16 17 18 Следующая »
#240
0:09, 28 авг. 2014

war_zes
> Показ сетки меша делается одной строчкой:
> glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
Интересно! Спасибо! Я попробовал на этом примере: http://www.gamedev.ru/code/articles/OpenGL_Qt4_part2

Закомментил строчку:

glEnable(GL_TEXTURE_2D);
И добавил под ней эту
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
Такая картинка получается:
Изображение

}:+()___ [Smile]
> Только надо не просто scale++, scale--, а еще следить за переполнениями.
Наверное, изначально про переполнение и шла речь. Только я так и не понял, почему деление и умножение не устраивает? Хотя с другой стороны, наиболее привычно в целых значениях, так понятнее на сколько увеличилось. Оставлю пока, как было.


#241
8:44, 28 авг. 2014

8Observer8
> Наверное, изначально про переполнение и шла речь. Только я так и не понял,
> почему деление и умножение не устраивает?

Если число разделить на очень большое число, то будет ноль. А потом если ноль умножать на любое число, то опять же будет ноль.
То есть другими словами, если уменьшить очень сильно, то потом увеличить не получится никак.

#242
9:38, 28 авг. 2014

war_zes
Мне вот для редактора такая схема не подошла для отображения сетки. Нужно рисовать не все еджи, а EdgeFlag жутко тормозил тогда, пришлось изобретать велосипед )

#243
13:20, 29 авг. 2014

OpenGl ну просто "офигенный" Начал тут мне дебагер (это которое расширение для дебага) писать вот такую ошибку:

glBindTexture in a Core context performing invalid operation with parameter <texture> set to '0x4664c78' which was removed from Core OpenGL (GL_INVALID_OPERATION)

Иду в спеку:
https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glBindTexture.xml

Читаю:

GL_INVALID_OPERATION is generated if texture was previously created with a target that doesn't match that of target.

Ну ок. Начинаю ломать движок (дело в том что Target у меня выбирался по типу изображения, и я подумал что что-то там неверно). Дошел до того что тупо вставил везде GL_TEXTURE_2D.

Все равно таже байда.

Убил целый час.

Потом обнаружил что у меня совершенно в другом месте выход за пределы массива:

BlockType type = (BlockType)(rand() % MAXTILE-1);
(кто не заметил, коварство тут в -1, я просто захотел выкинуть один тайл, и забыл скобочки вставить в нужное место)

При этом выход за пределы массива никак не связанный с выводом тайла на экран и OpenGL.

А ты innuendo спрашиваешь, как я целых два года не мог вывести кубик. А вот так. Какого хрена OpenGl влез со своими ошибками? Какого хрена код ошибки ввел меня в заблуждение? Это сейчас с навыками телепатии я могу найти причину, а тогда не мог

Если ты не понял, OpenGl нашел ошибку там где ее не было, из-за чего спрятал от меня место где эта ошибка на самом деле произошла..

#244
13:27, 29 авг. 2014

war_zes
> А ты innuendo спрашиваешь, как я целых два года не мог вывести кубик. А вот
> так.

Странно, что есть 100-500 человек смогшие вывести кубик за 1 день :)

#245
13:43, 29 авг. 2014

war_zes
> При этом выход за пределы массива никак не связанный с выводом тайла на экран и
> OpenGL.
У тебя выход за границы массива, после этого может быть все что угодно. Кто знает какую часть исполняемого кода ты заменил.

#246
14:25, 29 авг. 2014

war_zes
> OpenGl нашел ошибку там где ее не было
Раз он тебе сказал о ней, значит - была. Тут сугубо твоя вина, OpenGL тут совершенно ни при чем - лучше следи за памятью) На подобных ошибках как раз кучу времени и убивают, но валить все на стороннюю библиотеку - глупо.

#247
14:56, 29 авг. 2014

innuendo
> Странно, что есть 100-500 человек смогшие вывести кубик за 1 день :)
Проблема не в выводе кубика. Проблема в том чтобы заставить вывод кубика работать. Конечно и я мог за пять минут вывести кубик (гугл-> "пример вывод куба" ->скачать) Проблема в том что я трачу 90% не на логику, а на лечение ошибок из-за OpenGL. Даже сейчас, со всем своим опытом.
То есть написать код вывода кубика я и тогда мог за день, но этот код бы не работал (например пустой экран вместо кубика - я помню что и такое было)

Valorin
> У тебя выход за границы массива, после этого может быть все что угодно.
Не совсем так - физически выхода за пределы памяти там не было (я запускал в дебаге со всеми проверками). Вся беда опять в убогом стандарте OpenGl. Да-да, именно в нем. Дело в том что кому-то когда-то пришла великая идея сэкономить одну строчку (glGen*) и позволить ставить ресурсы без их создания (то есть без вызова glGen*).
Вот если кто не знает:
http://www.opengl.org/wiki/OpenGL_Object

Legacy Note: In OpenGL versions before 3.0, the user was allowed to ignore the generation step entirely. The user could just decide that "3" is a valid object name, and start using it like an object. The implementation would then have to accept that and create the object behind the scenes when you first start using it. In GL 3.0, this behavior was deprecated. In core GL 3.1 and above, this is no longer allowed. Regardless of the version of OpenGL, it is always good practice to use glGen*​ rather than making up your own object names.

Конечно же в 3.1 эту фичу объявили вне закона, да вот беда. наверное опять кривые AMD драйвера.
Вообщем получилось так
BlockType type = (BlockType)(rand() % MAXTILE-1);
из-за переполнения type получало значение INTMAX. Наверное это число как-то пробивалось через все обертки и проверки. и при вызове glBind ставилось это число. Так как убогая фича была кем-то введена в стандарт, OpenGl решил что это верное действие (оно ведь по стандарту). А потом обнаружилось что ресурс то зовется, а вот в памяти его нет. Но и тут убогий OpenGL вместо того чтобы сказать что такой текстуры нет, начал ругаться на таргет.

Суть моего поста не в ошибках, а в том что OpenGL не умеет опознавать эти ошибки. DX умеет. Именно поэтому на нем я вывел кубик за день - да, я точно помню что и там делал переполнение памяти, но никогда DX не вводил меня в заблуждение - он всегда говорил в чем моя беда

#248
15:10, 29 авг. 2014

war_zes
> То есть написать код вывода кубика я и тогда мог за день, но этот код бы не
> работал (например пустой экран вместо кубика - я помню что и такое было)

Код кубика пишется за 30 минут, за день можно сделать вывод при всём своём НЕжелании


> Вся беда опять в убогом стандарте OpenGl. Да-да, именно в нем. Дело в том что
> кому-то когда-то пришла великая идея сэкономить одну строчку (glGen*) и
> позволить ставить ресурсы без их создания

Попробуй передать в fwrite указатель на что-нибудь - тоже убогий стандарт ? Если руки растут не из правильного места всегда виноват кто-то другой ?: )

> но никогда DX не вводил меня в заблуждение - он всегда говорил в чем моя беда

Попробуй поиметь проблему с ffp лайтингом на DX9 - DXDEBUG молчит как партизан и чёрный экран ...

#249
15:27, 29 авг. 2014

innuendo
> Код кубика пишется за 30 минут, за день можно сделать вывод при всём своём
> НЕжелании
Я повторяю, код написать не проблема. Проблема заставить этот код работать. Новичок допускает кучу ошибок (я то точно), от опечаток до всяких выходов за пределы памяти и прочее - не все эти ошибки ловятся на шаге компиляции. А ведь бывают еще ошибки логики (собственно из-за них и проихсодит что пустой экран вместо кубика - например если матрицы не в том порядке перемножить)
В OpenGl заставить что-то работать довольно трудно. Именно про это я пишу. Хотя о чем это я. Даже вендоры видеокарт (демки от NVIDIA и AMD) и разработчики игр (Кармак) этого не могут сделать, что уж говорить про нас, только вставших на этот путь


innuendo
>
> Попробуй поиметь проблему с ffp лайтингом на DX9 - DXDEBUG молчит как партизан
> и чёрный экран ...
Да мне плевать на DX9. Я его не знаю, и не собираюсь знать как там было. Но и OGL я тоже не древний ковыряю, а OGL 4 (в котором как раз и появилось это расширение которое само пишет ошибки, а до него был только glError)

#250
15:36, 29 авг. 2014

war_zes
> Я повторяю, код написать не проблема. Проблема заставить этот код работать.

Вот и расскажи - что нужно было заставить работать в примере с кубиком ?

> В OpenGl заставить что-то работать довольно трудно.

Примеры

> Даже вендоры видеокарт (демки от NVIDIA и AMD) и разработчики игр (Кармак)
> этого не могут сделать, что уж говорить про нас, только вставших на этот путь

Примеры

> Да мне плевать на

Это ключевой пункт :)

#251
15:58, 29 авг. 2014

innuendo
>>Примеры
Примеры чего? того что у меня (и не только у меня, тут в соседней теме уже обсуждали) не работает больше половины демок из NVIDIA и AMD SDK под OpenGl? Или может скриншот того как SoftShadows демка из того пакета от NVIDIA ссылку на которую давал именно ты, у меня вызывает BSOD?

innuendo
> Это ключевой пункт :)
Чего ключевой пункт? Я никогда не считал DX 9 великим. Для меня он столь же убог как и OGL 1-2. Я даже когда-то тебе объяснял почему (ffp)

#252
16:07, 29 авг. 2014

war_zes
> Примеры чего? того что у меня (и не только у меня, тут в соседней теме уже
> обсуждали) не работает больше половины демок из NVIDIA и AMD SDK под OpenGl?
> Или может скриншот того как SoftShadows демка из того пакета от NVIDIA ссылку
> на которую давал именно ты, у меня вызывает BSOD?

Запусти демку DepthBoundTest11 на nvidia ...
Если демка имеет вендор специфик почему она должна запускать не на своём железе ?

> Я даже когда-то тебе объяснял почему (ffp)

Вопрос не в ffp. Если ты напишешь шейдер не понимая как считается лайтинг - DX не поможет тебе. Или blending перепутаешь :)

#253
16:12, 29 авг. 2014

innuendo
> Если демка имеет вендор специфик
не работают именно те демки, которые как раз не вендор специфик (вендорспецифик правильно пишут об отсутствии нужного расширения и закрываются) Сам посмотри код SoftShadows - я не вижу там NV расширений

#254
16:16, 29 авг. 2014

innuendo
> Вопрос не в ffp. Если ты напишешь шейдер не понимая как считается лайтинг - DX
> не поможет тебе. Или blending перепутаешь :)
поможет. Мне точно помогал. И то и другое я делал на DX - и точно также нихрена не понимал что делаю (часто копипастя из интернета), но благодаря DXDEBUG и более логичному синтаксису (да-да), у меня это даже работало.
В OGL сейчас, уже имея все нужное понимание, прочтя нужную документацию, я все равно допускаю кучу ошибок которые потом часами ищу. Проблема не в том что я пишу с ошибками, а в том чтобы оно эти ошибки хоть раз бы правильно нашло. Но нет, приходится прокачивать гадание

Страницы: 113 14 15 16 17 18 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.