|
09.03.2011, 03:16
|
#1351
|
Разработчик
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений (для 329 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Hint: Стандартную систему коллизий использовать не желательно. Гораздо лучше прикрутить физикс. Главное уметь им правильно пользоваться.
__________________
299 792 458
|
(Offline)
|
|
13.03.2011, 12:51
|
#1352
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Graphics3D 640,480,16,2
SetBuffer BackBuffer()
cam=CreateCamera()
Light=CreateLight()
PositionEntity cam,0,5,-10
TurnEntity cam,20,0,0
phWorldCreate(1,"")
;phMatSetDefFriction(1,0.9)
phMatSetDefElasticity(0.0)
Plan=CreatePlane()
EntityColor plan,90,182,211
mat_cub=phMatCreate()
cub=CreateCube()
cub_=phBodyCreateBox(2,2,2,4)
phBodySetEntity cub_,cub
phBodySetMat(cub_,mat_cub)
mat_cub2=phMatCreate()
cub2=CreateCube()
cub2_=phBodyCreateBox(2,2,2,1)
phBodySetEntity cub2_,cub2
phBodySetDamping cub_,.5,1
phBodySetMat(cub_,mat_cub)
phMatSetFriction mat_cub,mat_cub2,1,.9
Repeat
UpdateChar(cub_)
If KeyHit(57) phBodySetPos cub2_,Rnd(-2,2),10,Rnd(-2,2)
phWorldStep(100)
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End
Function UpdateChar(body%,maxvel#=5)
phBodySetOmega body,-phBodyGetOmegaX(body),-phBodyGetOmegaY(body),-phBodyGetOmegaZ(body);чтоб не крутился
;проверяем, есть ли под ногами земля (или хоть что-то)
x# = phBodyGetX(body)
y# = phBodyGetY(body)
z# = phBodyGetZ(body)
If (phRayCast(x,y,z,x,y-5.1,z));на земле
;желаемая скорость
TFormVector (KeyDown(32)-KeyDown(30)),0,(KeyDown(17)-KeyDown(31)),cub,0
vx# = TFormedX()*maxvel
vy# = TFormedY()*maxvel
vz# = TFormedZ()*maxvel
;текущая скорость
vxcur# = phBodyGetVelX(body)
vycur# = phBodyGetVelY(body)
vzcur# = phBodyGetVelZ(body)
;"вежливо" устанавливаем ту скорость, которую хотим мы
;считаем желаемое изменение скорости
dvx# = (vx-vxcur);*.1
If (vx*vx+vz*vz)<.001 Then dvy# = vy - vycur Else dvy# = 0
dvz# = (vz-vzcur);*.1
phBodyAddImpulse(body,x,y,z,dvx,dvy,dvz)
EndIf
End Function
почему то не работают материалы,хотя трение должно быть максимальным..
|
(Offline)
|
|
20.03.2011, 02:29
|
#1353
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Рисунок: http://s53.radikal.ru/i141/1103/92/ea40fd599a7b.jpg
Код внутри
; AddMesh Example
; ---------------
Graphics3D 640,480
SetBuffer BackBuffer()
type_ground=1
type_character=2
Dim temp_vertex(4,4)
camera=CreateCamera()
PositionEntity camera,0,10,-10
light=CreateLight()
RotateEntity light,90,0,0
; Create tree mesh (upper half)
tree=CreateMesh()
PositionMesh tree,0,1.5,0
width#=3
height#=3
For i=1 To 50 Step 10
For j=1 To 50 Step 10
Local surface=CreateSurface(tree)
temp_vertex(0,0)=AddVertex(surface,i-width#,0,j-height#)
temp_vertex(0,1)=AddVertex(surface,i-width#,0,j+height#)
temp_vertex(1,0)=AddVertex(surface,i+width#,0,j-height#)
temp_vertex(1,1)=AddVertex(surface,i+width#,0,j+height#)
VertexTexCoords surface,temp_vertex(0,0),0,1,0
VertexTexCoords surface,temp_vertex(0,1),0,0,0
VertexTexCoords surface,temp_vertex(1,0),1,1,0
VertexTexCoords surface,temp_vertex(1,1),1,0,0
AddTriangle(surface,temp_vertex(0,0),temp_vertex(0,1),temp_vertex(1,1))
AddTriangle(surface,temp_vertex(1,1),temp_vertex(1,0),temp_vertex(0,0))
Next
Next
UpdateNormals tree
EntityType tree,type_ground
Player=CreateCube()
PositionEntity player,-7,0,-4
EntityType player,type_character
Collisions type_character,type_ground,2,3
While Not KeyDown( 1 )
MoveEntity player,0.1,0,0.1
PointEntity camera,player
UpdateWorld
RenderWorld
Draw_Wire_2D(tree,camera,255,0,0)
Flip
Wend
End
Function Draw_Wire_2D(mesh,cam,red=0,grn=0,blu=0)
Color red,grn,blu
If EntityInView(mesh,cam)=False Then Return
cnt=CountSurfaces(mesh)
For a=1 To cnt
surf=GetSurface(mesh,a)
For tri=0 To CountTriangles(surf)-1
TFormPoint VertexX(surf,TriangleVertex(surf,tri,0)),VertexY(surf,TriangleVertex(surf,tri,0)),VertexZ(surf,TriangleVertex(surf,tri,0)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx1=ProjectedX()
sy1=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,1)),VertexY(surf,TriangleVertex(surf,tri,1)),VertexZ(surf,TriangleVertex(surf,tri,1)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx2=ProjectedX()
sy2=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,2)),VertexY(surf,TriangleVertex(surf,tri,2)),VertexZ(surf,TriangleVertex(surf,tri,2)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx3=ProjectedX()
sy3=ProjectedY()
If Check_Cull_2D(sx1,sy1,sx2,sy2,sx3,sy3)<0
Line sx1,sy1,sx2,sy2
Line sx2,sy2,sx3,sy3
Line sx3,sy3,sx1,sy1
End If
Next
Next
End Function
Function Check_Cull_2D(x1,y1,x2,y2,x3,y3)
Return (x1-x2)*(y3-y2)-(y1-y2)*(x3-x2)
End Function
Почему коллизия не действует на добавленные к мешу трианглы?
Примечание: кубик Player ударяется в стенку в позиции 0,0,0 радиусом 1
Кто знает RMFLoader 0.08 (загрузчик карт редактора Valve Hammer Editor), то там уровень строится по трианглам. И коллизия действует.
Сам сравнить код пока затрудняюсь, так как там он сильно развлетвлён.
Решение - ниже.
|
(Offline)
|
|
20.03.2011, 03:08
|
#1354
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Как и предполагал: "коллизия не действовала, потому что модель была плоска относительно объекту." Повернул трианглы вертикально - теперь сталкивается. Теперь ручками придётся рисовать кубы и модельки.
Рисунок: http://s51.radikal.ru/i132/1103/90/a7334abd7668.jpg
; AddMesh Example
; ---------------
Graphics3D 640,480
SetBuffer BackBuffer()
type_ground=1
type_character=2
Dim temp_vertex(4,4)
camera=CreateCamera()
PositionEntity camera,-10,10,-10
light=CreateLight()
RotateEntity light,90,0,0
; Create tree mesh (upper half)
Global tree=CreateMesh()
PositionMesh tree,0,1.5,0
Global surface=CreateSurface(tree)
width#=3
height#=3
For i=1 To 50 Step 8
For j=1 To 50 Step 10
temp_vertex(0,0)=AddVertex(surface,i-width#,-1,j-height#)
temp_vertex(0,1)=AddVertex(surface,i-width#,-1,j+height#)
temp_vertex(1,0)=AddVertex(surface,i-width#,2,j-height#)
temp_vertex(1,1)=AddVertex(surface,i-width#,2,j+height#)
VertexTexCoords surface,temp_vertex(0,0),0,1,0
VertexTexCoords surface,temp_vertex(0,1),0,0,0
VertexTexCoords surface,temp_vertex(1,0),1,1,0
VertexTexCoords surface,temp_vertex(1,1),1,0,0
AddTriangle(surface,temp_vertex(0,0),temp_vertex(0,1),temp_vertex(1,1))
AddTriangle(surface,temp_vertex(1,1),temp_vertex(1,0),temp_vertex(0,0))
Next
Next
UpdateNormals tree
EntityType tree,type_ground
Player=CreateCube()
PositionEntity Player,-7,0,-10
EntityType Player,type_character
Collisions type_character,type_ground,2,2
While Not KeyDown( 1 )
MoveEntity player,0.1,0,0.1
PointEntity camera,player
UpdateWorld
RenderWorld
Draw_Wire_2D(tree,camera,255,0,0)
Flip
Wend
End
Function Draw_Wire_2D(mesh,cam,red=0,grn=0,blu=0)
Color red,grn,blu
If EntityInView(mesh,cam)=False Then Return
cnt=CountSurfaces(mesh)
For a=1 To cnt
surf=GetSurface(mesh,a)
For tri=0 To CountTriangles(surf)-1
TFormPoint VertexX(surf,TriangleVertex(surf,tri,0)),VertexY(surf,TriangleVertex(surf,tri,0)),VertexZ(surf,TriangleVertex(surf,tri,0)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx1=ProjectedX()
sy1=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,1)),VertexY(surf,TriangleVertex(surf,tri,1)),VertexZ(surf,TriangleVertex(surf,tri,1)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx2=ProjectedX()
sy2=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,2)),VertexY(surf,TriangleVertex(surf,tri,2)),VertexZ(surf,TriangleVertex(surf,tri,2)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx3=ProjectedX()
sy3=ProjectedY()
If Check_Cull_2D(sx1,sy1,sx2,sy2,sx3,sy3)<0
Line sx1,sy1,sx2,sy2
Line sx2,sy2,sx3,sy3
Line sx3,sy3,sx1,sy1
End If
Next
Next
End Function
Function Check_Cull_2D(x1,y1,x2,y2,x3,y3)
Return (x1-x2)*(y3-y2)-(y1-y2)*(x3-x2)
End Function
|
(Offline)
|
|
20.03.2011, 12:12
|
#1355
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
LLI.T.A.L.K.E.R....ет ты кому написал...если мне,ТО У МЯ КОСЯКИ ФИЗИКИ......
|
(Offline)
|
|
20.03.2011, 12:23
|
#1356
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Это я себе задачку решал: создание меша путём добавления трианглов и последующей коллизии.
Так же теперь допёр как правильно нужно делать AddMesh (а то не совсем правильно понял Blitz-help и был косяк с коллизией)
Вот тут окончательный тест по этой теме:
; AddMesh Example
; ---------------
Graphics3D 640,480
SetBuffer BackBuffer()
type_ground=1
type_character=2
Dim temp_vertex(4,4)
camera=CreateCamera()
PositionEntity camera,-10,10,-10
light=CreateLight()
RotateEntity light,90,0,0
; Create tree mesh (upper half)
Global tree=CreateMesh()
Global surface=CreateSurface(tree)
width#=3
height#=3
For i=1 To 50 Step 8
For j=1 To 50 Step 10
temp_vertex(0,0)=AddVertex(surface,i-width#,-1,j-height#)
temp_vertex(0,1)=AddVertex(surface,i-width#,-1,j+height#)
temp_vertex(1,0)=AddVertex(surface,i-width#,2,j-height#)
temp_vertex(1,1)=AddVertex(surface,i-width#,2,j+height#)
VertexTexCoords surface,temp_vertex(0,0),0,1,0
VertexTexCoords surface,temp_vertex(0,1),0,0,0
VertexTexCoords surface,temp_vertex(1,0),1,1,0
VertexTexCoords surface,temp_vertex(1,1),1,0,0
AddTriangle(surface,temp_vertex(0,0),temp_vertex(0,1),temp_vertex(1,1))
AddTriangle(surface,temp_vertex(1,1),temp_vertex(1,0),temp_vertex(0,0))
Next
Next
UpdateNormals tree
EntityType tree,type_ground
Cube=CreateCube()
PositionMesh Cube,-3,0,-5
AddMesh Cube,tree
FreeEntity Cube
Player=CreateCube()
PositionEntity Player,-7,0,-10
EntityType Player,type_character
Collisions type_character,type_ground,2,2
While Not KeyDown( 1 )
MoveEntity player,0.1,0,0.1
PointEntity camera,player
UpdateWorld
RenderWorld
Draw_Wire_2D(tree,camera,255,0,0)
Flip
Wend
End
Function Draw_Wire_2D(mesh,cam,red=0,grn=0,blu=0)
Color red,grn,blu
If EntityInView(mesh,cam)=False Then Return
cnt=CountSurfaces(mesh)
For a=1 To cnt
surf=GetSurface(mesh,a)
For tri=0 To CountTriangles(surf)-1
TFormPoint VertexX(surf,TriangleVertex(surf,tri,0)),VertexY(surf,TriangleVertex(surf,tri,0)),VertexZ(surf,TriangleVertex(surf,tri,0)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx1=ProjectedX()
sy1=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,1)),VertexY(surf,TriangleVertex(surf,tri,1)),VertexZ(surf,TriangleVertex(surf,tri,1)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx2=ProjectedX()
sy2=ProjectedY()
TFormPoint VertexX(surf,TriangleVertex(surf,tri,2)),VertexY(surf,TriangleVertex(surf,tri,2)),VertexZ(surf,TriangleVertex(surf,tri,2)),mesh,0
CameraProject(cam,TFormedX(),TFormedY(),TFormedZ())
sx3=ProjectedX()
sy3=ProjectedY()
If Check_Cull_2D(sx1,sy1,sx2,sy2,sx3,sy3)<0
Line sx1,sy1,sx2,sy2
Line sx2,sy2,sx3,sy3
Line sx3,sy3,sx1,sy1
End If
Next
Next
End Function
Function Check_Cull_2D(x1,y1,x2,y2,x3,y3)
Return (x1-x2)*(y3-y2)-(y1-y2)*(x3-x2)
End Function
Теперь будет не много мелких объектов, а один глобальный.
Из этого понял, что
PositionEntity - помещает скин, но не сам объект
PositionMesh - помещает объект со всеми его свойствами
|
(Offline)
|
|
30.03.2011, 13:23
|
#1357
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Ogre3D Wrapper for Blitz3D
Example01 вылетает с МАВ (Windows 7)
Дебаг выдаёт проблемное место:
файл root.bb
Function SetMediaDir строка o_addResourceLocation
Просьба проверить Ogre3D на Windows 7
и направить на путь исправления
ошибки
Вот исходники O3d+B3d
На WinXP ошибок не выдаёт.
|
(Offline)
|
|
30.03.2011, 16:54
|
#1358
|
Мастер
Регистрация: 26.10.2009
Сообщений: 1,194
Написано 615 полезных сообщений (для 2,209 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Как узнать директорию запуска приложения Blitz3D если приложение вызывалось перетаскиванием на него файла?
UPD:
Через функцию SystemProperty("appdir")
__________________
|
(Offline)
|
|
29.05.2011, 11:39
|
#1359
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Как сделать синхронизацию в игре на Blitz3D и ещё сделать реальное время т.е. например 3000 в игре - равно реальным 3 секундам..
Прошу прощенья, если этот вопрос уже где то был
|
(Offline)
|
|
29.05.2011, 12:04
|
#1360
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
синхронизация игры и фпс 60 :
Graphics 640,480,16,2
Const UPS=60
period=1000/UPS time=MilliSecs()-period
Repeat Repeat elapsed=MilliSecs()-time Until elapsed ticks=elapsed/period tween#=Float(elapsed Mod period)/Float(period) For k=1 To ticks time=time+period If KeyHit(1) End Next Flip Cls Forever
а команда MilliSecs() - это милисекунды
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
29.05.2011, 12:37
|
#1361
|
Мастер
Регистрация: 23.09.2009
Адрес: ленобласть
Сообщений: 1,189
Написано 447 полезных сообщений (для 2,526 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Graphics3D 640,480,16,2
Const UPS=60
cub=CreateCube() cam=CreateCamera() PositionEntity cam,0,0,-10
period=1000/UPS time=MilliSecs()-period
Repeat Repeat elapsed=MilliSecs()-time Until elapsed ticks=elapsed/period tween#=Float(elapsed Mod period)/Float(period)
For k=1 To ticks time=time+period ;Здесь код циклла TurnEntity cub,0,0,1 If KeyHit(1) End Next
RenderWorld () Flip Cls
Forever
попробуй поменять значение UPS и увидишь разницу)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.06.2011, 00:00
|
#1362
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
В скором времени попробую изобретать велосипеды на Б3Д:
тупо вводишь в поисковике "исходник игры ..." - шашки, точки, пятнашки, крестики-нолики и т.п. (без ИИ)
изучаешь код - переводишь в 3Д на Б3Д
и опыт, и исходники другим, и прикольно
|
(Offline)
|
|
05.06.2011, 06:38
|
#1363
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
В скором времени попробую изобретать велосипеды на Б3Д:
тупо вводишь в поисковике "исходник игры ..." - шашки, точки, пятнашки, крестики-нолики и т.п. (без ИИ)
изучаешь код - переводишь в 3Д на Б3Д
и опыт, и исходники другим, и прикольно
|
я ща движку соберу на С,таким макаром на портативку игры и проги портировать стараться буду
|
(Offline)
|
|
06.06.2011, 11:15
|
#1364
|
ПроЭктировщик
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений (для 34 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Такой вопрос, b3d сравнивает переменные string$?
У меня такой код:
If EnterKey$="2317499356"
Regfile=OpenFile("data\maps\7\file.vs") WriteLine(regfile,"ab729c") CloseFile(regfile) click=0 Else
EnterKey$="" SimKol=0 click=0 EndIf
Text centrw,centrh-50,"Press key",True,True Text centrw,centrh,EnterKey$,True,True If SimKol<=10
If KeyHit(2) Then EnterKey$=EnterKey$+"1":SimKol=SimKol+1 If KeyHit(3) Then EnterKey$=EnterKey$+"2":SimKol=SimKol+1 If KeyHit(4) Then EnterKey$=EnterKey$+"3":SimKol=SimKol+1 If KeyHit(5) Then EnterKey$=EnterKey$+"4":SimKol=SimKol+1 If KeyHit(6) Then EnterKey$=EnterKey$+"5":SimKol=SimKol+1 If KeyHit(7) Then EnterKey$=EnterKey$+"6":SimKol=SimKol+1 If KeyHit(8) Then EnterKey$=EnterKey$+"7":SimKol=SimKol+1 If KeyHit(9) Then EnterKey$=EnterKey$+"8":SimKol=SimKol+1 If KeyHit(10) Then EnterKey$=EnterKey$+"9":SimKol=SimKol+1 If KeyHit(11) Then EnterKey$=EnterKey$+"0":SimKol=SimKol+1
EndIf
Суть заключается в том, что когда будет введена переменная, и нажата кнопка будет сравнение набранной переменной с строковыми цифрами.Если набрано правильно, то в файл должна записаться строка.
Но когда набираешь правильно, то записи в файл не происходит.Просто всё стирается.Скажите пожалуйста в чём проблема.
|
(Offline)
|
|
06.06.2011, 11:25
|
#1365
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
нашёл как сделать, можно инпутом....
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:34.
|