forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Вопрос-Ответ (для новичков) (http://forum.boolean.name/showthread.php?t=7886)

Nex 31.08.2012 20:58

Ответ: Вопрос-Ответ (для новичков)
 
Вложений: 1
Подскажите как вот так сделать.
Вложение 17542
А именно есть платформы и кубики. Если кубик на платформе, то она перекрашивается в красный, а если нет, то в зеленый. Делаю без коллизий, проверяю на дистанцию. Проблема в том что у меня вечно тупняки с перебором объектов. На данный момент все это дело работает только для одного кубика. :(
---
Сделал через лайн пик, но тоже самое выходит
Код:

For d.TDepot = Each TDepot
        m\p = LinePick (m\x,m\y,m\z,0,-0.5,0)
                If m\p = d\ent Then
                        d\is123 = 1
                Else
                        d\is123 = 0 // тут вся борода. надо как то по другому, но не знаю как. :)
                EndIf
Next


pepel 31.08.2012 23:06

Ответ: Вопрос-Ответ (для новичков)
 
функция пересечения квадрата и прямоугольника тебе в помощь

PHP код:

Function cross_square_and_rect(x1#,y1#,x2#,y2#,x#,y#,side#) 

    
w#=x1-x2 
    
h#=y1-y2 
    
centerx#=x1-w/2 
    
centery#=y1-h/2 

    
If Abs(centerx x) <= (Abs(w) + side) / And Abs(centery y) <= (Abs(h) + side) / Return True 
     
     
End 
Function 


Nex 31.08.2012 23:19

Ответ: Вопрос-Ответ (для новичков)
 
Я просил помочь с перебором объектов, а не с пересечением.

dsd 31.08.2012 23:59

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Nex (Сообщение 237720)
Я просил помочь с перебором объектов, а не с пересечением.

Я думаю что в поле куда записан хэндл квадратика во всех элементах коллекции прописано одно и тоже значение. Потому и работает только для одного.

Dzirt 01.09.2012 00:54

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от pepel (Сообщение 237719)
функция пересечения квадрата и прямоугольника тебе в помощь

PHP код:

Function cross_square_and_rect(x1#,y1#,x2#,y2#,x#,y#,side#) 

    
w#=x1-x2 
    
h#=y1-y2 
    
centerx#=x1-w/2 
    
centery#=y1-h/2 

    
If Abs(centerx x) <= (Abs(w) + side) / And Abs(centery y) <= (Abs(h) + side) / Return True 
     
     
End 
Function 


Так будет куда шустрее если хочешь проверить коллизии:

Код:

Function CollisionDetect(x1,y1,w1,h1,x2,y2,w2,h2)
                If x1 > (x2+w2) Or (x1+w1) < x2 Then Return False
                If y1 > (y2+h2) Or (y1+h1) < y2 Then Return False
        Return True
End Function


Nerd 08.09.2012 17:11

Ответ: Вопрос-Ответ (для новичков)
 
Пытаюсь по-быстрому напилить easing.
Набросал простую функцию:
Код:

Function curve_f#(t#,typ) ;Где t от 0 до 1
  Select typ
        Case 0 ;Linear
                Return t
        Case 1 ;In
                Return 1-Cos(t*90)
        Case 2 ;Out
                Return Sin(t*90)
        Case 3 ;Cubic
                Return curve_f(t*2,1)*0.5
  End Select
End Function

Но мне нужна более сложная вещь.
Я решил делать графики из четырёх точек, как-то так:
Код:

Type curve_q_t ;Quad-pointed curve
        Field p.curve_q_t_p[4]
End Type

Type curve_q_t_p ;Point
        Field x#,y#
        Field typ ;см. curve_f
End Type

Function curve_q#(q.curve_q_t,t#)
        For i = 1 To 3
                If q\p[i]\x>=t Then       
                        bc# = curve_f(  (t-q\p[i-1]\x)/(q\p[i]\x-q\p[i-1]\x) , q\p[i-1]\typ) ;Извините за говнокод
                        Return q\p[i-1]\y+(q\p[i]\y-q\p[i-1]\y)*bc
                       
                End If
        Next
End Function


Function curve_q_Create.curve_q_t(p1y#,p1t,p2x#,p2y#,p2t,p3x#,p3y#,p3t,p4y#,p4t )
        q.curve_q_t = New curve_q_t
                q\p[0] = New curve_q_t_p
                        q\p[0]\y = p1y
                        q\p[0]\typ = p1t
                q\p[1] = New curve_q_t_p
                        q\p[1]\x = p2x
                        q\p[1]\y = p2y
                        q\p[1]\typ = p2t
                q\p[2] = New curve_q_t_p
                        q\p[2]\x = p3x
                        q\p[2]\y = p3y
                        q\p[2]\typ = p3t
                q\p[3] = New curve_q_t_p
                        q\p[3]\x = 1
                        q\p[3]\y = p4y
                        q\p[3]\typ = p4t
        Return q
End Function

Но оно даёт неточный результат.
Нет ли готовых решений?

Okay 08.09.2012 23:19

Ответ: Вопрос-Ответ (для новичков)
 
пытался сделать поворот оьъекта мышью как в шутерах. Не получилось. Поварачивал, не поварачивал, объект двигается потом не правильно

Кирпи4 09.09.2012 19:11

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Okay (Сообщение 238079)
пытался сделать поворот оьъекта мышью как в шутерах. Не получилось. Поварачивал, не поварачивал, объект двигается потом не правильно

Не может быть такого, значит ты что-то не то вертишь. Скинь код. (только КОД ПОВОРОТА, а не over 9000 строк всей программы)

PREy 08.10.2012 22:37

Ответ: Вопрос-Ответ (для новичков)
 
Загрузил модель формата b3d в свой проект после чего фпс сильно упал, начались сильные тормоза. полигонов в модели всего 1482. Пользовался B3dPipeline. Подскажите как правильно загружать модели в Blitz.:dontknow:

Wegox 08.10.2012 23:16

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от PREy (Сообщение 239909)
Загрузил модель формата b3d в свой проект после чего фпс сильно упал, начались сильные тормоза. полигонов в модели всего 1482. Пользовался B3dPipeline. Подскажите как правильно загружать модели в Blitz.:dontknow:

Так:)
Код:

Graphics3D 640,480
SetBuffer BackBuffer()

camera=CreateCamera() 
PositionEntity camera,0,20,-100

light=CreateLight()
RotateEntity light,90,0,0

t=LoadMesh("tic.3ds") 

While Not KeyDown(1)

RenderWorld 

Flip
Wend 
End


Okay 09.10.2012 00:06

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от PREy (Сообщение 239909)
Загрузил модель формата b3d в свой проект после чего фпс сильно упал, начались сильные тормоза. полигонов в модели всего 1482. Пользовался B3dPipeline. Подскажите как правильно загружать модели в Blitz.:dontknow:

FLIP скорее всего забыл

Nex 09.10.2012 02:24

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от PREy (Сообщение 239909)
Загрузил модель формата b3d в свой проект после чего фпс сильно упал, начались сильные тормоза. полигонов в модели всего 1482. Пользовался B3dPipeline. Подскажите как правильно загружать модели в Blitz.:dontknow:

Возможно загружаешь модель в цикле. Надо загружать до Repeat или до While.

tirarex 09.10.2012 09:21

Ответ: Вопрос-Ответ (для новичков)
 
я 3дс юзаю поэтому не знаю но возможно у тебя в модельке оч много объектов

PREy 09.10.2012 15:01

Ответ: Вопрос-Ответ (для новичков)
 
Nex прав. Я оформил загрузку модели как функцию и добавил еще несколько команд, а сама функция находилась в главном цикле. Спасибо за помощь :)

No09 23.10.2013 10:27

Ответ: Вопрос-Ответ (для новичков)
 
У меня проблема с аниммироваными объектами. Вот например: загузил через LoadAnimMesh модель дверей. Нормально сделал анимацию. Потом загрузил управление от первого лица и вот тут я и встретил проблему. Если приблизиться камерой ко двери и отвернуть её где-то на 45 градусов, то дверь просто исчезает, а если вернуть камеру в исходное положение, то дверь появляется. Я заметил такой прикол, что если в 3д редакторе сдвинуть меш немного дальше от центра координат и экспортировать в игру, то этот баг исчезает, но появился еще один такой самый: если открыть дверь и посмотреть на нее с другой стороны, то она опять начинает исчезать и появляться Как можно убрать этот баг?


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

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