Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 24.10.2018, 00:15   #11
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Хотел отправить скриншот.Но программа с танком стала выдавать ошибку
Divide by zero.Вот файлы программы после того как она стала выдавать ошибку.
Вложения
Тип файла: rar loadobj.rar (2.5 Кб, 1 просмотров)
Timurkh77 вне форума   Ответить с цитированием
Старый 05.11.2018, 23:43   #12
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Программа непонятно работает.Ставишь на вывод другой файл plg она его
выводит.Другую фигуру она рисует.При выводе же танка программа выдает
сообщение Деление на ноль в MessageBox.Хотя структура вроде бы считы-вается. Файл программы выше.В чем может быть дело?
Timurkh77 вне форума   Ответить с цитированием
Старый 06.11.2018, 10:40   #13
ichi
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 40
Репутация: 10
По умолчанию Проблема в деление на ноль

Проблема в следующем участке кода:

Код:

for(int vertex=0;vertex<obj.num_vertices;vertex++)
{
 float z=obj.vlist_trans[vertex].z;

 obj.vlist_trans[vertex].x=VIEW_DISTANCE*obj.vlist_trans[vertex].x/z;
 obj.vlist_trans[vertex].y=VIEW_DISTANCE*obj.vlist_trans[vertex].y/z;
}

Ты изменяешь значение переменной z нажимая клавиши. В какой-то момент переменная z принимает значение 0 и по указанному коду выше происходит деление на ноль и программа падает.

Последний раз редактировалось ichi; 06.11.2018 в 11:00.
ichi вне форума   Ответить с цитированием
Старый 06.11.2018, 16:49   #14
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Почему же тогда для другого файла plg tower1.plg вывод осуществляется
правильно и все рисуется.Вот пример файлов программы во вложениях.
Вложения
Тип файла: rar loadobj.rar (2.4 Кб, 1 просмотров)
Timurkh77 вне форума   Ответить с цитированием
Старый 06.11.2018, 20:15   #15
ichi
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 40
Репутация: 10
По умолчанию

Файл tank1.plg у меня рисуется. Я просто хочу сказать, что проблема "ошибка деления на ноль" возникает в этой части кода:

Код:

for(int vertex=0;vertex<obj.num_vertices;vertex++)
{
 float z=obj.vlist_trans[vertex].z;

 obj.vlist_trans[vertex].x=VIEW_DISTANCE*obj.vlist_trans[vertex].x/z;
 obj.vlist_trans[vertex].y=VIEW_DISTANCE*obj.vlist_trans[vertex].y/z;
}

По-этому попробуй закомментировать этот участок кода и проверить будет ли возникать ошибка деления на ноль с различными plg файлами.
ichi вне форума   Ответить с цитированием
Старый 07.11.2018, 23:25   #16
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Деление на z необходимо для перспективы , для рисования в 3-х измерени-ях.Не выводится только файл tank1.plg,файл tower1.plg выводится , хотя в
нем тоже есть деление на z.В чем дело?Пример программы с файлом tower1.plg в последнем вложении.
Timurkh77 вне форума   Ответить с цитированием
Старый 09.11.2018, 09:18   #17
ichi
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 40
Репутация: 10
По умолчанию

Сделай в коде проверку на z равно 0. Добавь в код присвоение z=0.1, если z равно 0 и после этого программа не будет падать:
Код:

for(int vertex=0;vertex<obj.num_vertices;vertex++)
{
 float z=obj.vlist_trans[vertex].z;
	if (z==0) z=0.1;
 obj.vlist_trans[vertex].x=VIEW_DISTANCE*obj.vlist_trans[vertex].x/z;
 obj.vlist_trans[vertex].y=VIEW_DISTANCE*obj.vlist_trans[vertex].y/z;
}

ichi вне форума   Ответить с цитированием
Старый 11.11.2018, 23:39   #18
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Пробовал сделать как ты сказал.Почему-то танк растягивается на весь экран и за него.Что делать?Возможно ошибка действительно в этой части кода.Но почему же тогда в самом начале с первым вариантом ошибка не выдавалась и танк рисовался.К тому же с другими plg файлами ошибки деления на ноль не выдается.Пример с файлом tower1.plg в последнем вложении loadobj.rar.

Последний раз редактировалось Timurkh77; 11.11.2018 в 23:45.
Timurkh77 вне форума   Ответить с цитированием
Старый 12.11.2018, 13:19   #19
ichi
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 40
Репутация: 10
По умолчанию

Тебе необходимо по больше экспериментировать со своим кодом, не бойся менять параметры, которые ты задаешь в начале программы. Так проще понять, что у тебя выходит и как подогнать к тому что ты хочешь получить. Я имею в виду такие параметры как:

vscale={4.0,4.0,4.0,1},
vpos = {400,400,400,1},
vrot = {0,0,0,1};

#define VIEW_DISTANCE 320


Например, если посмотреть на изначальные данные файлов tank1.plg и tower1.plg то они имеют разные значения координат построения, это значит при одинаковых условиях вывода этих фигур на экран, у них буду разные размеры, поэтому танк выглядит больше по размеру. Если к этому еще добавить масштаб, который ты применил к объектам, то выходит вообще, что танк растягивается по координате z на все окно программы. Масштаб ты меняешь в этой строчке кода vscale={4.0,4.0,4.0,1}.

Танк растягивается не из-за того, что ты добавил в код строчку if (z==0) z=0.1; а из-того что-ты установил такой масштаб для танка.

Теперь на счет падения программы.

Код:

for(int vertex=0;vertex<obj.num_vertices;vertex++)
{
 float z=obj.vlist_trans[vertex].z;
 obj.vlist_trans[vertex].x=VIEW_DISTANCE*obj.vlist_trans[vertex].x/z;
 obj.vlist_trans[vertex].y=VIEW_DISTANCE*obj.vlist_trans[vertex].y/z;
}

Если в этом участке кода программа падает значит где-то выше по коду есть участок кода где z принимает значение 0. Выше по коду идет строчка:

Код:

for(int vertex=0;vertex<obj.num_vertices;vertex++)
{
 VECTOR4D_Add(&obj.vlist_local[vertex],&obj.world_pos,&obj.vlist_trans[vertex]);
}

в этой строчке происходит сложение координат объекта (&obj.vlist_local[vertex]) с координатами точки куда перемещается объкт &obj.world_pos).

Как получается эта точка &obj.world_pos, если смотреть выше по коду данная точка берется с параметров которые ты определил выше, в частности vpos = {400,400,400,1}.

Теперь посмотрим как формируется координаты объекта &obj.vlist_local[vertex]. Если смотреть выше, то данные координаты формируются путем умножения координат, которые загружаются из файла tank1.plg, на значения параметра масштаба, который ты определил в начале программы, в частности vscale={4.0,4.0,4.0,1}.

То есть в этой строчке кода VECTOR4D_Add(&obj.vlist_local[vertex],&obj.world_pos,&obj.vlist_trans[vertex]); формируется координата z таким образом

z = obj.vlist_local[vertex].z * vscale.z + vpos.z
z = -100*4+400 = -400+400 = 0


в файле tank1.plg берется значение z=-100 умножается на масштаб vscale.z=4 и прибавляется vpos.z=400 получаем падение программы.

И используй чаще отладчик Borland C++, он очень хорошо помогает в нахождение такого рода проблем.
ichi вне форума   Ответить с цитированием
Старый 12.11.2018, 21:27   #20
Timurkh77
Форумчанин
 
Регистрация: 16.02.2013
Сообщений: 67
Репутация: 10
По умолчанию

Уменьшил масштаб vscale до 1.Танк стал выводится нормально.Правильно ли рисуется танк,так ли он должен выглядеть?Достигнута ли конечная цель.Пример работы программы в архиве в скриншоте.
Вложения
Тип файла: rar Скриншот 12-11-2018 200112.rar (749.2 Кб, 2 просмотров)
Timurkh77 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Тестирование Блокнота. Проблема с загрузкой из файла .csv StudentTestC# Помощь студентам 3 05.03.2015 13:30
Проблема с загрузкой!! Plamer-007 Железо 3 23.06.2010 14:52
Проблема с загрузкой ОС Vali_T Операционные системы общие вопросы 18 07.04.2010 18:50
Проблема с загрузкой параметров из ini-файла Nomad Помощь студентам 6 03.08.2009 16:04
Проблема с загрузкой XP. hebu Windows 11 20.07.2009 14:33


14:21.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru