Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 07.11.2011, 13:22   #16
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

Ура,готово.
Сделал,возможно можно было легче.
If (CameraPick(cam,MouseX(),MouseY()))<>0 Then

selected_ent=PickedTriangle ()
vertex=TriangleVertex ( surf,selected_ent,0 )
 xv=VertexX ( surf,vertex )
 yv=VertexY ( surf,vertex )
 zv=VertexZ( surf,vertex )
selected_ent2#=PickedTriangle ()
selestN=(selected_ent2#/2)

If (selected_ent/2)=selestN Then
PositionEntity selectOVER,xv+2.5,yv+2.5,zv
Else
PositionEntity selectOVER,xv-2.5,yv-2.5,zv
EndIf
Когда я ставил выделитель(selectOVER) на позицию выделенного в данный момент триангла, выделитель почему-то смещался.Я не смог решить эту проблему.
Но зато я обнаружил, что в кваде, состоящем из двух треугольников, первый из них имеет, делящийся на 2 - номер,а второй при делении на 2,имеет остаток.
Тогда,деля номер триангла на 2, я проверял,равен ли результат целому числу,если да,то позиция такая,если нет,то позиция другая.
Результат:
FunnyPark.rar

UPD
Создал карту размером 30x30 ячеек.
TrisRendered: 1313
ФПС стабильна,абсолютная безлаговость.
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (09.11.2011)
Старый 07.11.2011, 14:39   #17
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

Новый трабл.
У меня есть тип:
Type Attracts (атракционы :D )
Field Types$       (Тип:Дорога,Атрракцион)
Field x#,y#
Field Model  
End Type
Вот пикаю я на карте в клетку и создается у меня объект дороги:
Function CreateAttracts.Attracts(x#,y#)
a.Attracts=New Attracts
 a\Model=CreateCube()
 a\Types="ROAD"
 a\x=x#
 a\y=y#

PositionEntity a\Model,a\x,a\y,-.001

  Return a
 End Function
Если я второй раз пикну в ту же клетку,там повторно создастя объект "Дорога". Каким образом предотвратить это?
Создать переменную a\picked=PickedTriangle() и потом проверять пикнутую в данный момент клетку со всеми объектами.Подскажите
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 07.11.2011, 17:39   #18
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Разделить мир на квады

Перед созданием нового объекта проверять, не существует ли он уже.
Можно например при создании записывать в объект номера принадлежащих ему полигонов.
При повторном пике поискать, нет ли где объекта с номером пикнутого триса. Если нет - то создавать новый.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Program23 (07.11.2011)
Старый 07.11.2011, 18:28   #19
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Разделить мир на квады

Как можно узнать позицию Triangle?
у тебя же вроде регулярная сетка - зная последовательность трианглов можно узнать позицию сразу из номера.

типа если квады стоят так:

1 2 3
4 5 6

и каждый квад = 2 триангла (последовательно в памяти)

то как-то так:

quadID = triangleID / 2
quadX# = quadID Mod numQuadsX
quadY# = floor(quadID / float(numQuadsX))
quadX = quadX / numQuadsX
quadY = quadY / numQuadsY

posX# = lerp(minX,maxX,quadX)
posY# = lerp(minY,maxY,quadY)

Function lerp#(a#,b#,c#)
Return a#+c#*(b#-a#)
End Function
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
Program23 (07.11.2011), Randomize (08.11.2011)
Старый 07.11.2011, 18:44   #20
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Разделить мир на квады

6 вертексов на квад??? да вы извращенцы. Это ж тока в DX надо без индексного буфера
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (07.11.2011)
Старый 07.11.2011, 20:19   #21
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

Сообщение от Павел Посмотреть сообщение
6 вертексов на квад??? да вы извращенцы. Это ж тока в DX надо без индексного буфера
Чего-чего?
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 07.11.2011, 20:26   #22
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Разделить мир на квады

для квада достаточно 4х вершин, ты создаёшь 6 (судя по посту №13)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Program23 (07.11.2011)
Старый 07.11.2011, 20:28   #23
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

А,тоесть можно как-то соединить четыре вертекса?
Можно поподробнее
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 07.11.2011, 20:52   #24
Markova
ПроЭктировщик
 
Аватар для Markova
 
Регистрация: 11.10.2011
Адрес: Мурманск
Сообщений: 154
Написано 74 полезных сообщений
(для 218 пользователей)
Ответ: Разделить мир на квады

Ну как то так
v0=AddVertex(s,-4,0,4,0,0)
v1=AddVertex(s,4,0,4,1,0)
v2=AddVertex(s,4,0,-4,1,1)
v3=AddVertex(s,-4,0,-4,0,1)
AddTriangle(s,v0,v1,v2)
AddTriangle(s,v0,v2,v3
__________________
Острый психоз- это когда вы разговариваете с кошкой.
Острый галлюцинаторный психоз - вы говорите с кошкой, которой не существует.
Паранойя - вы боитесь ляпнуть лишнего при кошке.
Шизофрения - иногда у вас появляется кошка, которая разговаривает.
Неврастения - вы жалуетесь кошке, она молчит, игнорирует вас и это для вас невыносимо!!!
Навязчивый невроз - вы уверены, что кошка не одна и они что-то замышляют!
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Markova за это полезное сообщение:
LLI.T.A.L.K.E.R. (09.11.2011), Mr_F_ (07.11.2011)
Старый 07.11.2011, 20:52   #25
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

Точно,что-то я туплю
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 07.11.2011, 20:54   #26
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

О,я нашел классную библиотеку по квадам.
http://blitzetc.blitzmax.ru/index.ph...QuadLibrary.bb
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 08.11.2011, 13:55   #27
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

quadID=PickedTriangle()/2

For a.Attracts=Each Attracts
If quadID<>a\Pick Then
CreateAttracts(EntityX#(over),EntityY#(over),quadID)
EndIf
Почему-то не получается сравнивать ID квадов.
__________________
Фриланс:
Freelancer.com
Upwork
(Offline)
 
Ответить с цитированием
Старый 08.11.2011, 14:46   #28
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Разделить мир на квады

a\Pick чему равен? запости полный код пика
(Offline)
 
Ответить с цитированием
Старый 08.11.2011, 16:03   #29
Program23
Бывалый
 
Аватар для Program23
 
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений
(для 406 пользователей)
Ответ: Разделить мир на квады

У меня там еще в коде ко-что,счетчик CountEnt.
If MouseHit(1)=True Then
quadID=PickedTriangle()/2

If CountEnt<=0 Then CreateAttracts(EntityX#(over),EntityY#(over),quadID)

If CountEnt>0 Then 

For a.Attracts=Each Attracts
 If quadID<>a\Pick Then
 CreateAttracts(EntityX#(over),EntityY#(over),quadID)
 EndIf
Next
EndIf
Функция CreateAttracts:
Function CreateAttracts.Attracts(x#,y#,Pick)
CountEnt=CountEnt+1

a.Attracts=New Attracts
a\Model=CreateMesh() 
surfa = CreateSurface(a\Model)

QuadAdd(surfa,2.5,2.5) 

a\Pick=Pick
a\Types="ROAD"
a\x=x#
a\y=y#

PositionEntity a\Model,a\x,a\y,-.001

Return a
End Function
Следовательно, a\Pick=quadID
__________________
Фриланс:
Freelancer.com
Upwork

Последний раз редактировалось Program23, 08.11.2011 в 21:52.
(Offline)
 
Ответить с цитированием
Старый 08.11.2011, 17:15   #30
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Разделить мир на квады

CountEnt объявлен вне функций как глобальный?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


Часовой пояс GMT +4, время: 13:26.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com