![]() |
|
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]()
|
|
| Tatikoma |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Здравствуйте.
Я загружаю модель из файла, и отрисовываю её так:
в результате получаю картинку : ![]() , собственно хочется визуальной объёмности, а не результата моей криворукости, подскажите в чём проблема. Инициализация:
Это сообщение отредактировал(а) Tatikoma - 19.1.2012, 15:07 |
||||
|
|||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Чисто визуально выглядит, будто нормали наложылись только на часть модэли (на ту, которая с блёстками), притом совсем не те, что нужно.
Если всё ещё в тупике -- покажыте код, который грузит модэль и сам файл модэли. |
|||
|
||||
| Tatikoma |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
файл модели .obj пример его содержания:
Если я всё правильно разобрался то первое это точки, второе это нормали(у меня была такая же идея что причина в нормалях но развить не смог), а по третьим данным я собирают треугольники. В правильности считывания точек, у меня есть уверенность, т.к. если заменить glDrawArrays(GL_TRINAGLES, 0, sizeChain); на glDrawArrays(GL_LINE_STRIP, 0, sizeChain); то вижу каркас модели каким он и должен быть. собственно нормали считываю так:
использование нормалей я привёл в первом сообщении, спасибо за отклик |
||||
|
|||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Ну, так вот по третьим данным (f ...) и надо нормали собирать. Насколько правильно Вы это делаете?
Добавлено через 1 минуту и 51 секунду Да, на .obj есть документацыя -- http://www.martinreddy.net/gfx/3d/OBJ.spec |
|||
|
||||
| Tatikoma |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Сделал, получилось, громадное спасибо вам!
|
|||
|
||||
| Tatikoma |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
||||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Нет. Во-первых, Вы явно присвоили всем треугольникам один комплект нормалей. Кроме того, это могло так повезти -- но возможно, что и не комплект нормалей, а одну нормаль одному углу каждого треугольника.
(Выложыте ужэ код куда-нибудь, компилирующийся. А то это гадание на рисунках -- весьма условно). |
|||
|
||||
| Tatikoma |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
ещё немного доработал код но теперь, вид как на первой картинке только совсем без бликов.
widget.cpp widget.h или целиком проект лучше? Это сообщение отредактировал(а) Tatikoma - 25.1.2012, 19:28 |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
(.text+0x20): undefined reference to `main'
Ну да, ну да. |
|||
|
||||
| Tatikoma |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
||||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Нормали вроде вполне правильные. Со светом надо работать:
1) Не задан material (glMaterialfv). Что он там подставляет -- судя по всему, implementation-defined. 2) Не задана, но включена текстура. 3) Значения цветов в glLight выходят за 1.0. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
Ну и, конечно, код загрузки .obj -- совсем кривой. То есть этот файл он загружает, но так нельзя.
|
|||
|
||||
| Tatikoma |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
материал задал :
если выключить текстуру, то объект не виден совсем, обязательно надо текстурировать? значение цветов по правил.
особо чтению файла внимания не уделял, важно было получить результат - нормальное отображение объекта. что по вашему там не корректно? |
||||||
|
|||||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 1 Всего: 16 |
По некорректному в файле (но, повторюсь, работающему на этом примере):
-- вертексы и нормали читаются по слогам, окончание строки никак не проверяется (хотя ограничитель -- именно строка). -- в элементах подразумевается единственный разделитель - пробел (там ещё табы), по-моему к тому жэ в единственном числе -- в элементах не отрабатываются варианты присутствия текстурных координат и отсутствия и текстурных и нормалей. По свету: 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 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.11.2010 Репутация: нет Всего: нет |
Большое спасибо за помощь и пояснения буду разбираться.
Такое чтение файла связано с тем что я точно знаю его содержание ибо сам же его и создаю, с параметрами не позволяющими произвести не корректное чтение. Ну это так к слову. |
|||
|
||||
![]()
|
| Вы можете найти полезным что... | |
|
|
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |