![]() |
Математка и C++
Вопрос состоит в следующем.
Стоит ли писать всю математику на C++, а затем выводить ее в библиотеку и прекреплять к проекту на блице? Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц? Есть ли статья по написаную dll для блица в C++? |
Ответ: Математка и C++
Вложений: 1
Вот почитай :)
|
Ответ: Математка и C++
1) если ты не пишеш программу для расчета траэктории небесных тел для НАСА то нет !!
2) если 'пункт 1' <> 1 то хватит того что есть !! 3) в блице в юзерлибах есть .тхт файл, посмотри его !! Есть и другие примеры (у андреймэна на сайте отличный пример) !! 4) ?? |
Ответ: Математка и C++
Если я не ошибаюсь, то простые математические действия Blitz3d переводит сразу в машинный код, и быстродействие разных минус/плюс/умножить/делить совпадает с любым современным высоким языком программирования
|
Ответ: Математка и C++
Цитата:
Цитата:
|
Ответ: Математка и C++
а другие переводятся в C++ код и там компилируется
Ты можешь разве что сделать тоже самое что и Марк, только хуже. Если тебе важно быстродействие - пиши на BlitzMax+Xors3D Разницы между Xors3D и Blitz3D почти нет, зато будет ООП, девятые директХ и скорость в тысячу раз выше. |
Ответ: Математка и C++
Цитата:
Можно подойти к вопросу с другой стороны. То что я напишу на с++ можно будит использовать где угодно потом, не переписывая все заново. Мне нужен именно Блиц3д. Остается неоткрытым вопрос номер 2: Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц? Или еще какая то инфа по другим. |
Ответ: Математка и C++
ничего никуда не переводится, blitz3d очень тормозной в плане выполнения, если нужна скорость то думаю стоит вынести большие блоки вычислений в библиотеку
|
Ответ: Математка и C++
Цитата:
Рассмотрим пример, демонстрирующий нехватку разрядной сетки переменной стандартного типа float (на 4 байта). Очевидно, что результат вычисления следующего выражения: Код:
a:=14.143 Код:
R:=1+(a-(a* Код:
a#=14.143 Цитата:
В большинстве практических случаев аналитический разбор (символьные преобразования) выражения является ресурсоёмкой и трудноинтегрируемой для конкретных вычислений задачей, таким образом, использование .... Смотри также: http://forum.boolean.name/showthread.php?t=2451 - текст тамошней темы (особенно за моим авторством) следует творчески переосмыслить в свете вышесказанного. |
Ответ: Математка и C++
Ну что выводить в длл код не связанный с 3д графикой смысл имеет мы уже выяснили.
Теперь остаеца неясный следующий вопрос: Есть ли какие то ограничения на функции(и прочие прелести кода) используемые в C++ если потом экспортировать код в dll для блиц? Проще говоря какие операторы использовать нельзя?) кто что может сказать по этому поводу? еще такой вопрос: вот допустим создали мы модель какую нить Цитата:
|
Ответ: Математка и C++
Цитата:
|
Ответ: Математка и C++
Цитата:
и все? или еще чтото есть? |
Ответ: Математка и C++
Внутри своей либы можешь юзать что угодно. Но с блитцем надо общаться через char *.
А еще там какая-то неведомая фигня с типом bool. Я уже не помню что именно. Если товарищ Knightmare заглянет сюда, то скажет. |
Ответ: Математка и C++
Ну, в общем-то, можно и wchar и bool, просто следует понимать, что блитц это сможет обработать только как что-то из: строка (массив "байт-символ"), int, float, буффер (банк, считанное из которого так или иначе надо привести к указанным ранее типам, например: http://forum.boolean.name/showpost.p...8&postcount=10).
На строках я остановился потому, что в программу передаётся указатель. Поэтому надо проконтролировать, чтобы DLL не высвободила память ранее, чем программа перестанет работать с данным текстом. Возможно использовать либо статическую память (Кнайт поправит), или интерфейс, позволяющий не только получать значение, но и влиять на его существование: например получили указатель некторой функцией GET, сохранили/проанализировали текст, удалили некоторой фунцией DEL. Поравьте, если ошибаюсь - с самописными DLL работаю не так часто. |
Ответ: Математка и C++
1) В качестве сток блитз получает\передает char*. Поэтому нет проблем с передачей, есть проблема с получением данных из DLL, т.к. память выделенная под буфер на стеке будет очищена при выходе из функции. Поэтому только в куче выделять строки для передачи в блитз. Но тогда может потечь память. Хороший вариант иметь статичную std::string (или аналог), и возвращать ее буфер. Тогда память будет менеджится непосредственно инстансом класса. Ну а блитз при получении строки делает ее копию, поэтому изменения строки в либе как бэ пофиг.
2) bool в топку. Блитз не умеет оперировать с однобайтовыми переменными, поэтому будет считывать 4 байта, соответственно будет верный младший байт и 3 байта мусора. Отсюда полезут глюки. 3) Нельзя понижать точность float'ов для ускорения математики. Блитз будет радостно кидать INF и NaN. 4) Можно передавать еще и объекты юзеровских типов, да. Не обязательно запихивать их в банки. Как-то так короче. В любом случае в DLL стоит выносить что-то большое, типа там поиска пути и т.п. Иначе больше на вызовах функций потеряется (а блитз, сцуко, и тут не блещет). |
Часовой пояс GMT +4, время: 06:58. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot