forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Прибить гвоздями, либо приварить? (http://forum.boolean.name/showthread.php?t=4741)

jimon 30.10.2007 00:45

Re: Прибить гвоздями, либо приварить?
 
любой баг надо начать с симуляции его на стрес-тестовой программе
именно она показывает где баг - за тестовой прогой или в тестовой проге
если баг появляется за тестовой прогой - обращайся к разработчику ПО
если в тестовой проге - это не баг, просто надо правильно писать

по скольку блиц уже скока лет существует, и ранее таких проблем
не замечалось .. то скорее виноват сам программист который не верит
в свои ошибки ...

ps. нужно только анализировать ...

Crystal 30.10.2007 02:30

Re: Прибить гвоздями, либо приварить?
 
Вот специально копировал части кода из функций с которыми баг из поста 10.

Код:

Const TypeTehnika=1,TypeEarth=2,TypeNebo=3
 
k1 = LoadMesh("Data\object\ships\k1\k1.b3d")
ScaleEntity k1,0.1,0.1,0.1
PositionEntity k1,5,4,30
RotateEntity k1, 0, 90, 0
EntityRadius k1,3
EntityType k1,TypeTehnika

Planet1Plane = CreatePlane()
EntityType Planet1Plane,TypeEarth
EntityAlpha Planet1Plane,0.999
Planet1WoterTexture=LoadTexture("Data\textures\pesok.jpg")
ScaleTexture Planet1WoterTexture,15,15
EntityTexture Planet1Plane,Planet1WoterTexture

Planet1Nebo = CreatePlane()
PositionEntity Planet1Nebo,0,3000,0
RotateEntity Planet1Nebo, 0, 0, 180
EntityAlpha Planet1Nebo,0.7
EntityType Planet1Nebo,TypeNebo
Planet1NeboTexture=LoadTexture("Data\textures\Planet1-Nebo.jpg")
ScaleTexture Planet1NeboTexture,3000,3000
EntityTexture Planet1Nebo,Planet1NeboTexture
 
While Not KeyDown(1)
 
RenderWorld
 
Collisions TypeTehnika,TypeEarth,2,3
Collisions TypeTehnika,TypeNebo,2,3

Чё тут анализировать то?
почему:

Collisions TypeTehnika,TypeEarth,2,3

работает как

Collisions TypeTehnika,TypeEarth,2,1

tormoz 30.10.2007 04:59

Re: Прибить гвоздями, либо приварить?
 
Цитата:

почему:

Collisions TypeTehnika,TypeEarth,2,3

работает как

Collisions TypeTehnika,TypeEarth,2,1
А где у тебя код, где бы объекты двигались ?
Ты поставил скользящую коллизию, а она работает на останов ?
Чудес не бывает, бывают кривые руки и недостаток мозгов (без обид, я сам тормоз)

Код управления движением объектов в студию.
А лучше тест с моделями (повтори так называемый "баг" с минимумом кода)

HolyDel 30.10.2007 08:42

Re: Прибить гвоздями, либо приварить?
 
Collisions TypeTehnika,TypeEarth,2,3
Collisions TypeTehnika,TypeNebo,2,3

вынеси из цикла.
это значит раз.
далее, вот ненадо к блицевским плейнам делать коллизию 2-ого типа (сфера к полигону), как эти самые плейны реализованы фиг знает, поетому ненадо.
или сделай EntityBox у ним, и коллизию тогда t1,t2,3,3

Crystal 30.10.2007 11:31

Re: Прибить гвоздями, либо приварить?
 
Ну так как проблемы с коллизией я только у корабля пока заметил, постарался сделать пример касающийся только его, и его коллизии без лишних функций управления и тд.
Вопщем вставляйте код в свой блитц, и используйте свою медию, пофигу какие текстуры, а вместо корабля пусть хоть тролейбус будет.
Заметите, что корабль в земле застревает, когда должен скользить.

Примечание:
Q - загрузить небо, землю, камеру, функцию управления корабля
(больше 1 раза не нажимайте! ато создадите клоны - земли, корабля, камеры и выключите управление)

управление кораблём:
W A S D UP DOWN LEFT RIGHT - 8 клавиш, так надо, как запустите осваивайтесь в управлении сразу всеми восмью.
Тут и мышкой можно, но не нужно )

Код:

Graphics3D 1024, 768, 32
SetBuffer BackBuffer()
HidePointer

Global mXSp#
Global mYSp#

Global speedk1#=0
Global k1
Global k1u#=0
Global Planet1Plane
Global Planet1Nebo

Global Red=100
Global Green=100
Global Blue=100

Const TypeTehnika=1,TypeEarth=2,TypeNebo=3

Function k1()
k1 = LoadMesh("Data\object\ships\k1\k1.b3d")
ScaleEntity k1,0.1,0.1,0.1
PositionEntity k1,5,4,30
RotateEntity k1, 0, 90, 0
EntityRadius k1,3
EntityType k1,TypeTehnika
End Function

Function Camerak1()
Camerak1 = CreateCamera(k1)
PositionEntity Camerak1,3,60,-320
RotateEntity Camerak1, 0, 0, 0
CameraRange Camerak1,1.0,1000000
CameraClsColor Camerak1,red,green,Blue
End Function

Function k1u()

UpDown#=0.3
Zkrenk1#=1
XYkrenk1#=1
TSpeed#=0.020

mXSp=MouseXSpeed()
mYSp=MouseYSpeed()

    TurnEntity k1,mYSp*TSpeed,0,0
    TurnEntity k1,0,-mXSp*TSpeed,0

    MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

    MoveEntity k1,0,0,+speedk1#

If KeyDown(30) Then TurnEntity k1,0,0,+Zkrenk1#

If KeyDown(32) Then TurnEntity k1,0,0,-Zkrenk1#

If KeyDown(200) Then TurnEntity k1,+XYkrenk1#,0,0

If KeyDown(208) Then TurnEntity k1,-XYkrenk1#,0,0

If KeyDown(203) Then TurnEntity k1,0,+XYkrenk1#,0

If KeyDown(205) Then TurnEntity k1,0,-XYkrenk1#,0

If KeyDown(42) Then
MoveEntity k1,0,+UpDown#,0
End If

If KeyDown(29) Then
MoveEntity k1,0,-UpDown#,0
End If

If KeyHit(17) Then

speedk1#=speedk1#+0.5

End If

If KeyHit(31) Then

speedk1#=speedk1#-0.5

End If

If speedk1#=2 Then

speedk1#=1.5

EndIf

If speedk1#=-0.5 Then

speedk1#=0

EndIf


End Function


Function Planet1World()
Planet1Plane = CreatePlane()
EntityType Planet1Plane,TypeEarth
EntityAlpha Planet1Plane,0.999
Planet1WoterTexture=LoadTexture("Data\textures\pesok.jpg")
ScaleTexture Planet1WoterTexture,15,15
EntityTexture Planet1Plane,Planet1WoterTexture

Planet1Nebo = CreatePlane()
PositionEntity Planet1Nebo,0,3000,0
RotateEntity Planet1Nebo, 0, 0, 180
EntityAlpha Planet1Nebo,0.7
EntityType Planet1Nebo,TypeNebo
Planet1NeboTexture=LoadTexture("Data\textures\Planet1-Nebo.jpg")
ScaleTexture Planet1NeboTexture,3000,3000
EntityTexture Planet1Nebo,Planet1NeboTexture
End Function


While Not KeyDown(1)

If KeyHit(16) Then
Planet1World()
k1()
Camerak1()
k1u#=1
End If

If k1u#=1 Then
k1u()
End If

UpdateWorld

RenderWorld

Collisions TypeTehnika,TypeEarth,2,3
Collisions TypeTehnika,TypeNebo,2,3

Flip

Wend

End

P.S. Заметил, что застревает при полёте в определённую сторону,
т.е. если смотреть по воображаемому компосу:
при полёте на север застревает, при полёте на юг не застревает.

Добавил:
если у неба коллизию убрать, тоесть стереть строчку
Collisions TypeTehnika,TypeNebo,2,3
то баг с застряванием в земле пропадает.

Damp 30.10.2007 12:51

Re: Прибить гвоздями, либо приварить?
 
Коллизии со сферами прекрасно работают, 3 работает как 1 скорей всего потому, что... так и предусмотрено... какбы защита от слольжения, лично я никогда не использую 3, всегда 2.
Ну а с привязкой... если использовать EntityParent - это не значит, что объекты намертво прям привязаны. AddMesh тут правильно советуют.

Crystal 30.10.2007 14:21

Re: Прибить гвоздями, либо приварить?
 
Эддмеш эффекта не дал.

Как это предусмотрено? Это баг.

jimon 30.10.2007 15:05

Re: Прибить гвоздями, либо приварить?
 
Код:

Graphics3D 800, 600, 32
SetBuffer BackBuffer()
HidePointer

Global mXSp#
Global mYSp#

Global speedk1#=0
Global k1
Global k1u#=0
Global Planet1Plane
Global Planet1Nebo

Global Red=100
Global Green=100
Global Blue=100

Const TypeTehnika=1,TypeEarth=2,TypeNebo=3

Function k1()
k1 = CreateCube()
ScaleEntity k1,0.1,0.1,0.1
PositionEntity k1,5,4,30
RotateEntity k1, 0, 90, 0
EntityRadius k1,3
EntityType k1,TypeTehnika
End Function

Function Camerak1()
Camerak1 = CreateCamera(k1)
PositionEntity Camerak1,3,60,-320
RotateEntity Camerak1, 0, 0, 0
CameraRange Camerak1,1.0,1000000
CameraClsColor Camerak1,red,green,Blue
End Function

Function k1u()

UpDown#=0.3
Zkrenk1#=1
XYkrenk1#=1
TSpeed#=0.020

mXSp=MouseXSpeed()
mYSp=MouseYSpeed()

    TurnEntity k1,mYSp*TSpeed,0,0
    TurnEntity k1,0,-mXSp*TSpeed,0

    MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

    MoveEntity k1,0,0,+speedk1#

If KeyDown(30) Then TurnEntity k1,0,0,+Zkrenk1#

If KeyDown(32) Then TurnEntity k1,0,0,-Zkrenk1#

If KeyDown(200) Then TurnEntity k1,+XYkrenk1#,0,0

If KeyDown(208) Then TurnEntity k1,-XYkrenk1#,0,0

If KeyDown(203) Then TurnEntity k1,0,+XYkrenk1#,0

If KeyDown(205) Then TurnEntity k1,0,-XYkrenk1#,0

If KeyDown(42) Then
MoveEntity k1,0,+UpDown#,0
End If

If KeyDown(29) Then
MoveEntity k1,0,-UpDown#,0
End If

If KeyHit(17) Then

speedk1#=speedk1#+0.5

End If

If KeyHit(31) Then

speedk1#=speedk1#-0.5

End If

If speedk1#=2 Then

speedk1#=1.5

EndIf

If speedk1#=-0.5 Then

speedk1#=0

EndIf


End Function


Function Planet1World()
Planet1Plane = CreatePlane()
EntityType Planet1Plane,TypeEarth
EntityAlpha Planet1Plane,0.999
Planet1WoterTexture=LoadTexture("1.jpg")
ScaleTexture Planet1WoterTexture,15,15
EntityTexture Planet1Plane,Planet1WoterTexture

Planet1Nebo = CreatePlane()
PositionEntity Planet1Nebo,0,3000,0
RotateEntity Planet1Nebo, 0, 0, 180
EntityAlpha Planet1Nebo,0.7
EntityType Planet1Nebo,TypeNebo
Planet1NeboTexture=LoadTexture("2.jpg")
ScaleTexture Planet1NeboTexture,3000,3000
EntityTexture Planet1Nebo,Planet1NeboTexture
End Function


While Not KeyDown(1)

If KeyHit(16) Then
Planet1World()
k1()
Camerak1()
k1u#=1
End If

If k1u#=1 Then
k1u()
End If

UpdateWorld

RenderWorld
Collisions TypeTehnika,TypeEarth,2,3
Collisions TypeTehnika,TypeNebo,2,3


Flip

Wend

End

этот код у меня работает ... так что давай прекращай уже постить
месаги о том что все глючит кроме тебя, а то уже бесит

IGR 30.10.2007 15:25

Re: Прибить гвоздями, либо приварить?
 
Цитата:

далее, вот ненадо к блицевским плейнам делать коллизию 2-ого типа (сфера к полигону), как эти самые плейны реализованы фиг знает, поетому ненадо.
если создать CreatePlane () то получится всего 2 полигона, а если CreatePlane (16), то - 32 (или 16 :) ) !!

Crystal 30.10.2007 15:38

Re: Прибить гвоздями, либо приварить?
 
Цитата:

Сообщение от jimon
Код:

Graphics3D 800, 600, 32
SetBuffer BackBuffer()
HidePointer

Global mXSp#
Global mYSp#

Global speedk1#=0
Global k1
Global k1u#=0
Global Planet1Plane
Global Planet1Nebo

Global Red=100
Global Green=100
Global Blue=100

Const TypeTehnika=1,TypeEarth=2,TypeNebo=3

Function k1()
k1 = CreateCube()
ScaleEntity k1,0.1,0.1,0.1
PositionEntity k1,5,4,30
RotateEntity k1, 0, 90, 0
EntityRadius k1,3
EntityType k1,TypeTehnika
End Function

Function Camerak1()
Camerak1 = CreateCamera(k1)
PositionEntity Camerak1,3,60,-320
RotateEntity Camerak1, 0, 0, 0
CameraRange Camerak1,1.0,1000000
CameraClsColor Camerak1,red,green,Blue
End Function

Function k1u()

UpDown#=0.3
Zkrenk1#=1
XYkrenk1#=1
TSpeed#=0.020

mXSp=MouseXSpeed()
mYSp=MouseYSpeed()

    TurnEntity k1,mYSp*TSpeed,0,0
    TurnEntity k1,0,-mXSp*TSpeed,0

    MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

    MoveEntity k1,0,0,+speedk1#

If KeyDown(30) Then TurnEntity k1,0,0,+Zkrenk1#

If KeyDown(32) Then TurnEntity k1,0,0,-Zkrenk1#

If KeyDown(200) Then TurnEntity k1,+XYkrenk1#,0,0

If KeyDown(208) Then TurnEntity k1,-XYkrenk1#,0,0

If KeyDown(203) Then TurnEntity k1,0,+XYkrenk1#,0

If KeyDown(205) Then TurnEntity k1,0,-XYkrenk1#,0

If KeyDown(42) Then
MoveEntity k1,0,+UpDown#,0
End If

If KeyDown(29) Then
MoveEntity k1,0,-UpDown#,0
End If

If KeyHit(17) Then

speedk1#=speedk1#+0.5

End If

If KeyHit(31) Then

speedk1#=speedk1#-0.5

End If

If speedk1#=2 Then

speedk1#=1.5

EndIf

If speedk1#=-0.5 Then

speedk1#=0

EndIf


End Function


Function Planet1World()
Planet1Plane = CreatePlane()
EntityType Planet1Plane,TypeEarth
EntityAlpha Planet1Plane,0.999
Planet1WoterTexture=LoadTexture("1.jpg")
ScaleTexture Planet1WoterTexture,15,15
EntityTexture Planet1Plane,Planet1WoterTexture

Planet1Nebo = CreatePlane()
PositionEntity Planet1Nebo,0,3000,0
RotateEntity Planet1Nebo, 0, 0, 180
EntityAlpha Planet1Nebo,0.7
EntityType Planet1Nebo,TypeNebo
Planet1NeboTexture=LoadTexture("2.jpg")
ScaleTexture Planet1NeboTexture,3000,3000
EntityTexture Planet1Nebo,Planet1NeboTexture
End Function


While Not KeyDown(1)

If KeyHit(16) Then
Planet1World()
k1()
Camerak1()
k1u#=1
End If

If k1u#=1 Then
k1u()
End If

UpdateWorld

RenderWorld
Collisions TypeTehnika,TypeEarth,2,3
Collisions TypeTehnika,TypeNebo,2,3


Flip

Wend

End

этот код у меня работает ... так что давай прекращай уже постить
месаги о том что все глючит кроме тебя, а то уже бесит

jimon издеваешся чтоли?
Я сказал медию заменить а не кубы генирировать.
Кубы и у меня не застревают, а загружаемый меш при такой коллизии при полёте на север застревает, при полёте на юг нет.

Берёш мой код, ставиш свои текстуры, и свою b3d модель.

dimanche13 30.10.2007 16:32

Re: Прибить гвоздями, либо приварить?
 

я могу ошибаться, но по-моему колиззии надо делать до апдейт ворлд... или нет, не знаю Б3Д нифига, а лезу еще куда-то )))

tormoz 30.10.2007 17:42

Re: Прибить гвоздями, либо приварить?
 
Цитата:

Я сказал медию заменить а не кубы генирировать
4 года на Блитце и багов никаких с колижном не было ни разу.
И у тебя их нет - есть кривые руки и дурная голова :wallbash:

Тебе нужно решение твоей ошибки - выкладывай пример с медией.
нехер нам делать, решать твои проблемы подбором медиа.
Еще раз для бестолковых: в Блитце бага нет, он исключительно в неправильном коде

Crystal 30.10.2007 19:24

Re: Прибить гвоздями, либо приварить?
 
Ппц где здесь код неправильный?

Щас выложу с медией...

Добавил:

Вот вам с медией bb файл.

http://ifolder.ru/3932722

Если вы найдёте ошибку в коде влеяющую на коллизию,
то вам блин за это булочную награду выдать надо будет.

И не говорите, что бага нету!
Я проверял на обоих моих компах, и на одном в институте!

Лично я вижу в этом баг плейнов блитца,
модель помещённая между двух плейнов
неправильно об них коллизится.

Crystal 30.10.2007 19:36

Re: Прибить гвоздями, либо приварить?
 
Цитата:

Сообщение от dimanche13

я могу ошибаться, но по-моему колиззии надо делать до апдейт ворлд... или нет, не знаю Б3Д нифига, а лезу еще куда-то )))

Я это уже заранее проверил,
ставил коллизию куда токо можно,
эффект одинаковый.

jimon 30.10.2007 20:33

Re: Прибить гвоздями, либо приварить?
 
Blitzerg
ну и твой пример работает нормально ... ы ?
без разницы загружать модель или создавать куб


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot