forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   b3d хелп или описание (http://forum.boolean.name/showthread.php?t=1200)

Trilliput 29.07.2006 22:40

Re: b3d хелп или описание
 
1. А немного напутал - всегда был 1 чилд. Структура модели (земля и точки установки домиков, ну для пробы): земля к SceneRoot, все остальное к земле. Entity в команде была сама загруженная модель земли. (я уже начал подозревать что мне показывалось количество чилдов SceneRoot :) )

2. Ясно

3. Нет всмысле на этапе создания карты в максе указать тип объекта, а потом какнибудь вычленить, например из имени объекта ("light_1_3") - где 1 скажем тип, а 3 радиус.

4. Просто как то назвал вроде объект "arm-left" и он отказался находиться.

ЗЫ
Какой софт посоветуете для проектирования структуры проекта игры? Для отслеживания изменений и тп

alcoSHoLiK 30.07.2006 01:52

Re: b3d хелп или описание
 
ToDoList вроде неплохая прога.

Насчет имен. Они задаются в Максе. В блице же, обращаясь к чилду по имени нужно учитывать регистр. Само имя может быть произвольным.

WaReZ_MEN 31.07.2006 10:48

Re: b3d хелп или описание
 
Народ нужно полное обисание формата b3d может пример кто где видал на С++ или Delphi киньте ссылку буду презнателен....

Trilliput 31.07.2006 13:54

Re: b3d хелп или описание
 
Как узнать с каким материалом происходит колизия?

tormoz 31.07.2006 17:51

Re: b3d хелп или описание
 
Цитата:

Сообщение от Trilliput
Как узнать с каким материалом происходит колизия?

В Блитце нет понятия "материал"
Есть текстура. текстурный слой.
А коллизия происходит с объектами.
Твой вопрос бессмыслен

Trilliput 31.07.2006 18:08

Re: b3d хелп или описание
 
Хм странно а ранее мне ответили что можно получить инф о материале при коллизии.

Тогда как сделать распознование типа поверхности?

WaReZ_MEN 01.08.2006 02:04

Re: b3d хелп или описание
 
спасибо БОЛЬШОЕ. сам нашел.

tormoz 01.08.2006 02:32

Re: b3d хелп или описание
 
Цитата:

Сообщение от Trilliput
Хм странно а ранее мне ответили что можно получить инф о материале при коллизии.

Тогда как сделать распознование типа поверхности?

Что ты подразумеваешь под "типом поверхности" ?

Trilliput 01.08.2006 18:14

Re: b3d хелп или описание
 
Ну скажем мне надо узнавать что находиться под калесами например танка или машины, под ногами человека. Для создания разных эффектов - если песок то скажем один эффект, если грязь то второй. Ну и разное трение и сопративление для разных поверхностей на карте.

To: WaReZ_MEN

Нашел - поделись пожалуста.

tormoz 01.08.2006 20:04

Re: b3d хелп или описание
 
Только если узнаешь конкретную текстуру под "ногами"
На старом Блитцфоруме я выкладывал функции для этого. Жаль он не работает. Ща поищу в своей помойке...

Нашел. Разбирайся сам - сложная штука. Писалось давно уже все забыл :)
Можно определить текстуру. ее цвет, координаты натекстуре и тп

Код:


Global PickU#,PickV#,texture_buffer,texture_t,color_t%
Global LOverlapX#, LOverlapY#
Type TLine
Field x#
Field y#
Field dx#
Field dy#
End Type
Type
TVector
Field x#, y#, z#
End Type

Function PickedToTexture(layer_t)
x#=PickedX()
y#=PickedY()
z#=PickedZ()
ent = PickedEntity()

surf = PickedSurface()
brush=GetSurfaceBrush(surf)
texture_t =GetBrushTexture(brush,layer_t)
texture_buffer=TextureBuffer(texture_t)

tri = PickedTriangle()
;transform
TFormPoint x, y, z, 0, ent
x
=TFormedX()
y=TFormedY()
z=TFormedZ()
;coords of texture
u0#=VertexU(surf, TriangleVertex(surf, tri, 0),layer_t)
v0#=VertexV(surf, TriangleVertex(surf, tri, 0),layer_t)

u1#=VertexU(surf, TriangleVertex(surf, tri, 1),layer_t)
v1#=VertexV(surf, TriangleVertex(surf, tri, 1),layer_t)
Tex1=NewVector(u1-u0, v1-v0, 0)

u2#=VertexU(surf, TriangleVertex(surf, tri, 2),layer_t)
v2#=VertexV(surf, TriangleVertex(surf, tri, 2),layer_t)
Tex2=NewVector(u2-u0, v2-v0, 0)
;coords of vertex
gx0#=VertexX(surf, TriangleVertex(surf, tri, 0))
gy0#=VertexY(surf, TriangleVertex(surf, tri, 0))
gz0#=VertexZ(surf, TriangleVertex(surf, tri, 0))
gx1#=VertexX(surf, TriangleVertex(surf, tri, 1))
gy1#=VertexY(surf, TriangleVertex(surf, tri, 1))
gz1#=VertexZ(surf, TriangleVertex(surf, tri, 1))
Vt1=NewVector(gx1-gx0, gy1-gy0, gz1-gz0)
gx2#=VertexX(surf, TriangleVertex(surf, tri, 2))
gy2#=VertexY(surf, TriangleVertex(surf, tri, 2))
gz2#=VertexZ(surf, TriangleVertex(surf, tri, 2))
Vt2=NewVector(gx2-gx0, gy2-gy0, gz2-gz0)
Vt3=NewVector(x-gx0, y-gy0, z-gz0)
;angles vectors (V*)
av102#=AngleVectors(Vt1, Vt2)
av302#=AngleVectors(Vt3, Vt2)
Dav#=av302/av102
;angles vectors (Tex*)
at102#=AngleVectors(Tex1, Tex2)
at302#=at102*Dav
;projection V*
l01#=LenVector(Vt1)
l02#=LenVector(Vt2)
l03#=LenVector(Vt3)
gx1#=l01*Cos(av102)
gy1#=l01*Sin(av102)
Line12=NewLine(l02, 0, gx1, gy1)
gx3#=l03*Cos(av302)
gy3#=l03*Sin(av302)
Line03=NewLine(0, 0, gx3, gy3)

LinesIntersect(Line12, Line03)
Line04=NewLine(0, 0, IntersectX(), IntersectY())
DL#=LenLine(Line03)/LenLine(Line04)

Line14=NewLine(gx1, gy1, IntersectX(), IntersectY())
DL2#=LenLine(Line14)/LenLine(Line12)

;projection Tex*
Line12=NewLine(u1, v1, u2, v2)
MulLine(Line12, DL2)
Line04=NewLine(u0, v0, LineX2(Line12), LineY2(Line12))
MulLine(Line04, DL)

PickU=LineX2(Line04)
PickV=LineY2(Line04)

;delete
Delete Each TVector
Delete Each TLine
End Function

Function NewLine(x1#, y1#, x2#, y2#)
g.TLine=New TLine
g
\x=x1
g
\y=y1
g
\dx=x2-x1
g
\dy=y2-y1
Return Handle(g)
End Function
Function
DelLine(id)
g.TLine=Object.TLine(id)
If g=Null Return
Delete
g
End Function
Function
LenLine#(id)
g.TLine=Object.TLine(id)
If g=Null Return -1
Return Sqr(g\dx*g\dx+g\dy*g\dy)
End Function
Function
MulLine(id, k#)
g.TLine=Object.TLine(id)
If g=Null Return
g\dx=g\dx*k
g
\dy=g\dy*k
End Function
Function
LineX2#(id)
g.TLine=Object.TLine(id)
If g=Null Return 0
Return g\x+g\dx
End Function
Function
LineY2#(id)
g.TLine=Object.TLine(id)
If g=Null Return 0
Return g\y+g\dy
End Function
Function
LineX1#(id)
g.TLine=Object.TLine(id)
If g=Null Return 0
Return g\x
End Function
Function
LineY1#(id)
g.TLine=Object.TLine(id)
If g=Null Return 0
Return g\y
End Function
Function
ResetLine(id,x1#, y1#, x2#, y2#)
g.TLine=Object.TLine(id)
If g=Null Return
g\x=x1
g
\y=y1
g
\dx=x2-x1
g
\dy=y2-y1
End Function
Function LinesIntersect
(id1, id2)
g1.TLine=Object.TLine(id1)
If g1=Null Return
g2.TLine=Object.TLine(id2)
If g2=Null Return
;line N1
a1#=g1\dy
b1
#=-g1\dx
c1
#=a1 * g1\x + b1 * g1\y
;line N2
a2#=g2\dy
b2
#=-g2\dx
c2
#=a2 * g2\x + b2 * g2\y
;calculate
dx#=c1*b2-c2*b1
dy
#=a1*c2-a2*c1
d
#=a1*b2-a2*b1
If d=0 Return 0
LOverlapX#=dx/d
LOverlapY
#=dy/d
Return 1
End Function
Function
IntersectX#()
Return LOverlapX
End Function
Function
IntersectY#()
Return LOverlapY
End Function
;==================
;=============================
Function NewVector(x#, y#, z#)
v.TVector=New TVector
v
\x=x
v
\y=y
v
\z=z
Return Handle(v)
End Function
Function
DelVector(id)
v.Tvector=Object.Tvector(ID)
If v=Null Return
Delete
v
End Function
Function
LenVector#(ID)
v.Tvector=Object.Tvector(ID)
If v=Null Return 0
Return Sqr(v\x*v\x+v\y*v\y+v\z*v\z)
End Function
Function
MulScalar#(id1, id2)
v1.Tvector=Object.Tvector(id1)
If v1=Null Return 0
v2.Tvector=Object.Tvector(id2)
If v2=Null Return 0
Return v1\x * v2\x + v1\y * v2\y + v1\z * v2\z
End Function
Function
AngleVectors#(id1, id2)
v1.Tvector=Object.Tvector(id1)
If v1=Null Return 0
v2.Tvector=Object.Tvector(id2)
If v2=Null Return 0
Return ACos(MulScalar(id1, id2)/LenVector(id1)/LenVector(id2))
End Function
Function
TurnVectorXY(id, angle#)
v.Tvector=Object.Tvector(ID)
If v=Null Return
cn#=Cos(angle)
sn#=-Sin(angle)
oldX#=v\x
oldY
#=v\y
v
\x=oldX * cn - oldY * sn
v
\y=oldY * cn + oldX * sn
End Function
;===================

Function argb%(a%,r%=0,g%=0,b%=0)
Return (a Shl 24) Or (r Shl 16) Or (g Shl 8) Or b
End Function

Function
rgb%(r%,g%,b%)
Return (r Shl 16) Or (g Shl 8) Or b
End Function

Function
geta%(val%)
Return (val Shr 24)
End Function
Function
getr%(val%)
Return (val Shr 16) And ($000000FF)
End Function

Function
getg%(val%)
Return (val Shr 8) And ($000000FF)
End Function

Function
getb%(val%)
Return (val And $000000FF)
En
d Function





Trilliput 01.08.2006 20:19

Re: b3d хелп или описание
 
А будет ли такой способ работать например при использовании двух слоев текстур? Например если я создам terrain в 3D World Studio и налажу два слоя текстур.

ЗЫ Сколько слоев текстур поддерживает blitz или модели b3d? (То при использовании больше 2 слоев исчезал мягкий переход между текстурами, тоесть просто накладывалась текстура как бы квадратом)

Trilliput 01.08.2006 20:20

Re: b3d хелп или описание
 
А проще способы организовать подобное?

ЗЫ как то код заканчивается странно "Е [". Те там должно быть "Еnd function"? А после него какие то еще функции идут?

tormoz 01.08.2006 21:19

Re: b3d хелп или описание
 
Цитата:

Сообщение от Trilliput
А проще способы организовать подобное?

ЗЫ как то код заканчивается странно "Е [". Те там должно быть "Еnd function"? А после него какие то еще функции идут?

Исправил.
можешь упростить функцию.
GetBrushTexture - см эту команду

layer_t - слой текстуры. 0 - первый и тд

Trilliput 02.08.2006 10:06

Re: b3d хелп или описание
 
Фсего одна функция? А к чему весь остальной код? (Тяжело понимать свой код, а чужой и тем более)

impersonalis 02.08.2006 18:17

Re: b3d хелп или описание
 
Цитата:

Тяжело понимать свой код
комментируй =)


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

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