|
3D-программирование Вопросы, касающиеся программирования 3D мира |
07.11.2011, 13:22
|
#16
|
Бывалый
Регистрация: 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
ФПС стабильна,абсолютная безлаговость.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.11.2011, 14:39
|
#17
|
Бывалый
Регистрация: 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() и потом проверять пикнутую в данный момент клетку со всеми объектами.Подскажите
|
(Offline)
|
|
07.11.2011, 17:39
|
#18
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Разделить мир на квады
Перед созданием нового объекта проверять, не существует ли он уже.
Можно например при создании записывать в объект номера принадлежащих ему полигонов.
При повторном пике поискать, нет ли где объекта с номером пикнутого триса. Если нет - то создавать новый.
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.11.2011, 18:28
|
#19
|
Терабайт исходников
Регистрация: 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_ за это полезное сообщение:
|
|
07.11.2011, 18:44
|
#20
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Разделить мир на квады
6 вертексов на квад??? да вы извращенцы. Это ж тока в DX надо без индексного буфера
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.11.2011, 20:19
|
#21
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Разделить мир на квады
Сообщение от Павел
6 вертексов на квад??? да вы извращенцы. Это ж тока в DX надо без индексного буфера
|
Чего-чего?
|
(Offline)
|
|
07.11.2011, 20:26
|
#22
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Разделить мир на квады
для квада достаточно 4х вершин, ты создаёшь 6 (судя по посту №13)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.11.2011, 20:28
|
#23
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Разделить мир на квады
А,тоесть можно как-то соединить четыре вертекса?
Можно поподробнее
|
(Offline)
|
|
07.11.2011, 20:52
|
#24
|
ПроЭктировщик
Регистрация: 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 за это полезное сообщение:
|
|
07.11.2011, 20:52
|
#25
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Разделить мир на квады
Точно,что-то я туплю
|
(Offline)
|
|
07.11.2011, 20:54
|
#26
|
Бывалый
Регистрация: 26.04.2009
Адрес: Россия, Уфа
Сообщений: 680
Написано 182 полезных сообщений (для 406 пользователей)
|
Ответ: Разделить мир на квады
|
(Offline)
|
|
08.11.2011, 13:55
|
#27
|
Бывалый
Регистрация: 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 квадов.
|
(Offline)
|
|
08.11.2011, 14:46
|
#28
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Разделить мир на квады
a\Pick чему равен? запости полный код пика
|
(Offline)
|
|
08.11.2011, 16:03
|
#29
|
Бывалый
Регистрация: 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
Последний раз редактировалось Program23, 08.11.2011 в 21:52.
|
(Offline)
|
|
08.11.2011, 17:15
|
#30
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Разделить мир на квады
CountEnt объявлен вне функций как глобальный?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:26.
|