|
3D-программирование Вопросы, касающиеся программирования 3D мира |
12.03.2012, 20:35
|
#1
|
Элита
Регистрация: 17.04.2007
Сообщений: 1,950
Написано 1,506 полезных сообщений (для 7,979 пользователей)
|
Загрузка картинок
Помогите с кодом.
Для дипломной работы нужно сделать мелкую вещь на блице.
А точнее, маленькую комнату с картинами на стене.
Картины должны грузиться из папки.
В общем, как сделать?
Есть папка, в нее нужно кидать JPG'и
Есть 15 loadmesh (модели картин)
Нужно сделать так, что бы из папки брались картинки и рандомно применялись к моделям картин, причем если картинок больше чем нужно, брались наугад из них 15 без повторений, а если меньше, в случайном порядке повторялись.
Причем файлы картинок могут называться как угодно.
|
(Offline)
|
|
12.03.2012, 22:48
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Загрузка картинок
Надеюсь, не опоздал!
Простыня та-ды-дыщь:
Функция загрузки (она только составляет список имеющихся картинок в директории):
InputFolder имя директории
del_prev флаг - удалить ли уже прочитанную ранее инфу
возвращаемое значение - кол-во найденных (за этот вызов функции) файлов
Function InputDirRead%(InputFolder$,del_prev%=True)
If del_prev Then Delete Each tFILE
Local D%=ReadDir(InputFolder)
Local FileName$
Local FullFileName$
Local TotalC%=0
While True
FileName=NextFile(D)
If FileName="" Exit
FullFileName=InputFolder+"\"+FileName
If FileType(FullFileName)=1
Local EXT3$,EXT4$
;будем рассматривать лишь файлы с расширением длиной 3 и 4 символа
EXT4=Upper(Right(FileName,4))
EXT3=Upper(Right(FileName,3))
Local EXT$=""
;туто можно настроить поддеркжу форматов - сделано топорно, ибо под жёсткое ТЗ
If EXT3="BMP" Or EXT3="JPG" Or EXT3="PNG" Or EXT3="GIF"
EXT=EXT3
ElseIf EXT4="JPEG"
;меня бесит расширение JPEG, потому в информацию о файле пропишу его как JPG
EXT="JPG"
EndIf
;если расширение определено - информация о файле будет добавлена
If EXT<>""
Local F.tFILE=New tFILE
F\FullFileName=FullFileName
F\FileUEXT=EXT
F\FileShortName=FileName
F\ID=TotalC+1
TotalC=TotalC+1
EndIf
EndIf
Wend
CloseDir(D)
Return TotalC
End Function
Собственно экземпляр инфы о файле:
Type tFILE
Field FullFileName$;абсолютное (с именем папки, переданной в функцию загрузки) имя файла
Field FileUEXT$;расширение файла (в верхнем регистре)
Field FileShortName$;имя файла (с расширением)
Field ID%;индекс файла при чтении (после перемешивания первый прочитанный файл может оказаться в конце)
End Type
это тоже понадобиться (сюда мы потом переместим структуры для более удобной работы)
После работы - очищаем информацию
Function InputDirDeRead()
For f.tFILE=Each tFILE
Delete f
Next
Dim LIST(0)
End Function
Функция выгрузки считанной инфы в массив, для работы (перемешивание)
cnt -кол-во объектов (чтобы их не пересчитывать)
Function tFILE2LIST(cnt%)
Dim LIST(cnt)
Local i=1
For f.tFILE=Each tFILE
LIST(i)=f
i=i+1
Next
End Function
После выгрузки в массив, вызываем эту функцию для перемешивания содержимого
cnt -кол-во объектов
Function LISTrandomize(cnt%)
If cnt<2 Return
Local tmp.tFILE
Local factor%=cnt*2.0;количество перестановок - побирается на вкус; у меня - кол-во файлов х 2
Local A%=1;первый файл будет гарантировано участвовать в перемешивании
Local B%=Rand(1,cnt);практика показала, что 1-ый файл слишком часто оставался нетронутым
For i=1 To factor
;такая модель перестановок может (с уменьшающейся вероятностью вообще ничего не переставить)
; см подробнее: http://forum.boolean.name/showthread.php?t=15658
tmp=LIST(A)
LIST(A)=LIST(B)
LIST(B)=tmp
A%=Rand(1,cnt)
B%=Rand(1,cnt)
Next
End Function
Получить файл
I -индекс текущего файла
Function GetNextFile.tFILE(I%)
;думаешь: чо за тупая функция? просто у меня файл перед взятием его получал дополнительную информацию в свои поля
Return LIST(I)
End Function
Демо:
Dim LIST.tFILE(0)
Global TCnt=InputDirRead("Pic");загрузим информацию о файла в папке Pic
TCnt=TCnt+InputDirRead("Pic2",False);догрузим информацию из папки Pic2
;...
Global ReadIndx%=TCnt+1;текущий читаемый индекс
tFILE2LIST(TCnt);выгружаем информацию в массив (вернее - указатели* сохраняются в массив для удобства: удалять экземпляры нельзя пока)
;...
While True;некоторый цикл получения случайных картинок
If ReadIndx>TCnt;если уже перебрали весь список - перемешаем его заново и начнём сначала
LISTrandomize(TCnt)
ReadIndx=1
EndIf
Local file.tFILE=GetNextFile(ReadIndx);получить указатель* на структуру, содержащую информацию о файле
ReadIndx=ReadIndx+1
;...
Wend
InputDirDeRead();очистим
Собственно, выполнишь 15 итераций цикла из демки. На каждой итерации грузишь файл
Loadtexture(file\FullFileName)
и накладываешь на N-ый меш.
И да:
Нужно сделать так, что бы из папки брались картинки и рандомно применялись к моделям картин, причем если картинок больше чем нужно, брались наугад из них 15 без повторений, а если меньше, в случайном порядке повторялись.
Причем файлы картинок могут называться как угодно.
|
Причём повторяться (в случае "а если меньше") они будут минимальное число раз. Т.е. если у тебя 14 картинок (а мешей - 15), то повторений будет 2 (на двух мешах одна и та же текстура).
Ну - а у меша, сделать именованный полигон, с корректно выставленными uv координатами. Загрузить меш, раскопировать его на 15 объектов - всё очевидно.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Эти 9 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
|
|
12.03.2012, 23:23
|
#3
|
Элита
Регистрация: 17.04.2007
Сообщений: 1,950
Написано 1,506 полезных сообщений (для 7,979 пользователей)
|
Ответ: Загрузка картинок
Супер! Огромное спасибо!
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
12.03.2012, 23:28
|
#4
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Загрузка картинок
Сообщение от m_512
Супер! Огромное спасибо!
|
в демо забыл дописать. теперь (обновил пост) должно работать
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
13.03.2012, 00:37
|
#5
|
Бывалый
Регистрация: 03.11.2008
Адрес: Украина, Днепропетровск
Сообщений: 871
Написано 554 полезных сообщений (для 2,520 пользователей)
|
Ответ: Загрузка картинок
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.05.2012, 11:23
|
#6
|
AnyKey`щик
Регистрация: 08.05.2012
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Загрузка картинок
А можно ли еще и узнать размер картинки прежде чем она загрузится? Если кто знает подскажите, буду благодарен.
|
(Offline)
|
|
11.06.2012, 02:06
|
#7
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Загрузка картинок
2 m_512
ну и где рассказ про диплом? Оценка, демонстрация приложения?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
11.06.2012, 03:16
|
#8
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Загрузка картинок
защиты через полторы недели.
|
(Offline)
|
|
11.06.2012, 03:38
|
#9
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Загрузка картинок
Сообщение от radiobutton
защиты через полторы недели.
|
Откуда информация?
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
11.06.2012, 03:57
|
#10
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Загрузка картинок
Сообщение от ABTOMAT
Откуда информация?
|
у меня так
|
(Offline)
|
|
11.06.2012, 14:14
|
#11
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Загрузка картинок
[s]Значит у всех так.[/s]
Неадекватность шкалит всё выше и выше..
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.06.2012, 15:00
|
#12
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Загрузка картинок
Сообщение от radiobutton
у меня так
|
А у нас в инсте защита с прошлого месяца.
__________________
Ибо как сказал Бгдн:
|
(Offline)
|
|
11.06.2012, 21:41
|
#13
|
Бывалый
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений (для 546 пользователей)
|
Ответ: Загрузка картинок
Сообщение от MoKa
[s]Значит у всех так.[/s]
|
Помоему логично, что раз я написал, что "у меня так", значит имел ввиду, что у других может и не так. Даже если и не имел в виду, то не отрицал.
Пост до этого же, можно трактовать, как "Ну как бы рано еще, не у всех защиты прошли, а если и прошли, то это дело еще и отметить нада, а потом уже на форуме постить."
Неадекватность шкалит всё выше и выше..
|
Но тем не менее твои выводы основываются большей частью на субъективном мнении об авторе постов. Будь объективен. Смотри шире и глубже.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.06.2012, 20:46
|
#14
|
Нуждающийся
Регистрация: 14.06.2012
Сообщений: 66
Написано 6 полезных сообщений (для 10 пользователей)
|
Ответ: Загрузка картинок
Ну и ???
А можно ли узнать размер картинки прежде чем она загрузится?????????????????????????????????????
|
(Offline)
|
|
14.06.2012, 20:51
|
#15
|
Элита
Регистрация: 16.01.2008
Сообщений: 1,800
Написано 958 полезных сообщений (для 3,833 пользователей)
|
Ответ: Загрузка картинок
Сообщение от Alex__Noc
Ну и ???
А можно ли узнать размер картинки прежде чем она загрузится?????????????????????????????????????
|
Мужик, почини клавиатуру.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:44.
|