| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Нет объёмности (неправильное построение сцены) |
| Автор: Tatikoma 19.1.2012, 14:20 | ||||
| Здравствуйте. Я загружаю модель из файла, и отрисовываю её так:
в результате получаю картинку : http://s2.ipicture.ru/Gallery/Viewfull/8044183.html , собственно хочется визуальной объёмности, а не результата моей криворукости, подскажите в чём проблема. Инициализация:
|
| Автор: tzirechnoy 19.1.2012, 14:49 |
| Чисто визуально выглядит, будто нормали наложылись только на часть модэли (на ту, которая с блёстками), притом совсем не те, что нужно. Если всё ещё в тупике -- покажыте код, который грузит модэль и сам файл модэли. |
| Автор: Tatikoma 19.1.2012, 15:05 | ||||
файл модели .obj пример его содержания:
Если я всё правильно разобрался то первое это точки, второе это нормали(у меня была такая же идея что причина в нормалях но развить не смог), а по третьим данным я собирают треугольники. В правильности считывания точек, у меня есть уверенность, т.к. если заменить glDrawArrays(GL_TRINAGLES, 0, sizeChain); на glDrawArrays(GL_LINE_STRIP, 0, sizeChain); то вижу каркас модели каким он и должен быть. собственно нормали считываю так:
использование нормалей я привёл в первом сообщении, спасибо за отклик |
| Автор: tzirechnoy 19.1.2012, 15:28 |
| Ну, так вот по третьим данным (f ...) и надо нормали собирать. Насколько правильно Вы это делаете? Добавлено через 1 минуту и 51 секунду Да, на .obj есть документацыя -- http://www.martinreddy.net/gfx/3d/OBJ.spec |
| Автор: Tatikoma 19.1.2012, 15:54 |
| Сделал, получилось, громадное спасибо вам! |
| Автор: Tatikoma 25.1.2012, 11:13 |
| И вот меня за терзали сомнения, а правильны ли нормали? http://s1.ipicture.ru/Gallery/Viewfull/8163432.htmlhttp://s1.ipicture.ru/Gallery/Viewfull/8163657.html |
| Автор: tzirechnoy 25.1.2012, 18:52 |
| Нет. Во-первых, Вы явно присвоили всем треугольникам один комплект нормалей. Кроме того, это могло так повезти -- но возможно, что и не комплект нормалей, а одну нормаль одному углу каждого треугольника. (Выложыте ужэ код куда-нибудь, компилирующийся. А то это гадание на рисунках -- весьма условно). |
| Автор: Tatikoma 25.1.2012, 19:25 |
| ещё немного доработал код но теперь, вид как на первой картинке только совсем без бликов. http://srcboard.com/28f185h3 http://srcboard.com/307kgxg4 или целиком проект лучше? |
| Автор: tzirechnoy 25.1.2012, 20:06 |
| (.text+0x20): undefined reference to `main' Ну да, ну да. |
| Автор: Tatikoma 25.1.2012, 20:36 |
| http://rghost.ru/36116303 |
| Автор: tzirechnoy 26.1.2012, 12:37 |
| Нормали вроде вполне правильные. Со светом надо работать: 1) Не задан material (glMaterialfv). Что он там подставляет -- судя по всему, implementation-defined. 2) Не задана, но включена текстура. 3) Значения цветов в glLight выходят за 1.0. |
| Автор: tzirechnoy 26.1.2012, 15:00 |
| Ну и, конечно, код загрузки .obj -- совсем кривой. То есть этот файл он загружает, но так нельзя. |
| Автор: Tatikoma 27.1.2012, 15:06 | ||||||
материал задал :
если выключить текстуру, то объект не виден совсем, обязательно надо текстурировать? значение цветов по правил.
особо чтению файла внимания не уделял, важно было получить результат - нормальное отображение объекта. что по вашему там не корректно? |
| Автор: tzirechnoy 27.1.2012, 19:01 | ||
| По некорректному в файле (но, повторюсь, работающему на этом примере): -- вертексы и нормали читаются по слогам, окончание строки никак не проверяется (хотя ограничитель -- именно строка). -- в элементах подразумевается единственный разделитель - пробел (там ещё табы), по-моему к тому жэ в единственном числе -- в элементах не отрабатываются варианты присутствия текстурных координат и отсутствия и текстурных и нормалей. По свету: 1) нет, текстурировать совсем необязательно. Оно, скорее всего, не невидно, оно просто всё белое. 2) Выкиньте glOrtho. Ну, или хотя бы сделайте его в GL_PROJECTION. Поскольку все так делают. Не то, чтобы в принцыпе нельзя было glOrtho в GL_MODELVIEW -- но во-первых, в реальных сцэнах свет как раз всё освещает вне зависимости от всяких спецыфических проекцый, связанных со строением глаза, во-вторых именно (и только) чтобы не было проблем со светом ввели две матрицы -- GL_MODELVIEW и GL_PROJECTION, а в-третьих Ваш параллелипипед со сторонами 1:100 как раз и сносит крышу свету. 3) Лучшэ задать все 3 базовых цвета света и 4 материала вручную -- надёжней и понятней. Типичным началом будет для материала задать DIFFUSE и AMBIENT в равные значения где-нибудь в районе 0.8(*цвет), EMISSION обнулить, SPECULAR в зависимости от предполагаемой глянцэвости. В свете приравнять SPECULAR и DIFFUSE, баланс между ними и AMBIENT ужэ по виду теней, всё от 0.2 до 1.0.
PS А, да, при рисовании включите GL_NORMALIZE. Для этого файла это, опять жэ, неважно -- но вообще говоря в .obj нормали необязательно нормализованы. |
| Автор: Tatikoma 28.1.2012, 10:58 |
| Большое спасибо за помощь и пояснения буду разбираться. Такое чтение файла связано с тем что я точно знаю его содержание ибо сам же его и создаю, с параметрами не позволяющими произвести не корректное чтение. Ну это так к слову. |