Лёха_Virus писал(а):так получается что ни LoadTexture ни CreateWrap ни SetTexture ни Apply делать не надо что-ли?
Угу, я это делаю так (Wrap делаю в Max-e):
Public D3DRM As Direct3DRM3
Public Scene As Direct3DRMFrame3 ' Фрейм сцены
Public Type MyWorld
Wrld As Direct3DRMFrame3
End Type
Public World(0 To ...) As MyWorld
----------------------------------------------------------------------------
' Создание объектов сцены
Public Sub CreateWorld(Index As Integer, xFileName As String)
With World(Index)
Set .Wrld = D3DRM.CreateFrame(Scene)
.Wrld.LoadFromFile MeshPath & xFileName, 0, _
D3DRMLOAD_FROMFILE, Nothing, Nothing
End With
End Sub
' Настройка прозрачности текстур
Public Sub SetWorldTexture(Index As Integer)
Dim S As Long, i As Long, j As Long
Dim ChFrame As Direct3DRMFrame3
Dim ChFrameS As Direct3DRMFrame3
Dim MeshBuild As Direct3DRMMeshBuilder3
Dim FaceCount As Long
Set ChFrame = D3DRM.CreateFrame(Nothing)
Set ChFrameS = D3DRM.CreateFrame(Nothing)
Set ChFrame = World(Index).Wrld.GetChildren.GetElement(0)
S = ChFrame.GetChildren.GetSize
If S > 0 Then
For i = 0 To S - 1
Set ChFrameS = ChFrame.GetChildren.GetElement(i)
Set MeshBuild = ChFrameS.GetVisual(0)
MeshBuild.SetQuality D3DRMRENDER_GOURAUD Or _
D3DRMLIGHT_ON
FaceCount = MeshBuild.GetFaceCount
For j = 0 To FaceCount - 1
Set Face = MeshBuild.GetFace(j)
Set Texture = Face.GetTexture
' прозрачный цвет=0
Texture.SetDecalTransparentColor 0
Texture.SetDecalTransparency D_TRUE
Next j
Next i
End If
Set MeshBuild = Nothing
Set ChFrame = Nothing
Set ChFrameS = Nothing
End Sub
Лёха_Virus писал(а):...CreateWrap . Я просто замучился накладывать текстуру на шарик.
Я тоже, и бросил эту затею!
Лёха_Virus писал(а):...осветить половину шарика с боку? я пробовал директлайт - он не поворачивается ваще, поинт - маленький какой-то... а спот ваще чёт не светит...
Чтобы поворачивался, надо всунуть в фрейм:
Public Device As Direct3DRMDevice3 ' Устройство рендеринга
Device.SetRenderMode _
3DRMRENDERMODE_VIEWDEPENDENTSPECULAR _
Or 3DRMRENDERMODE_BLENDEDTRANSPARENCY _
Or D3DRMRENDERMODE_SORTEDTRANSPARENCY _
Or D3DRMRENDERMODE_LIGHTINMODELSPACEPublic CameraLight As Direct3DRMLight 'Подсветка со стороны камеры
Public MainLightAmbient As Direct3DRMLight 'окружающее освещение сцены
Public FrameMainLight As Direct3DRMFrame3 'фрейм освещения сцены
Set FrameMainLight = D3DRM.CreateFrame(Scene)
' окружающее освещение сцены
Set MainLightAmbient = D3DRM.CreateLightRGB(D3DRMLIGHT_AMBIENT, 1, 1, 1)
FrameMainLight.AddLight MainLightAmbient
' Точечное освещение со стороны камеры
Set CameraLight = D3DRM.CreateLight(D3DRMLIGHT_POINT, dx.CreateColorRGB(0.4, 0.4, 0.4))
CameraLight.SetRange 100 ' радиус поинта
CameraLight.SetConstantAttenuation 0
CameraLight.SetLinearAttenuation 1 ' линейное ослабление
CameraLight.SetQuadraticAttenuation 0
Camera.AddLight CameraLight
' Источник конусного света:
Dim Lamp As Direct3DRMFrame3
Dim LampLight As Direct3DRMLight
Set Lamp = D3DRM.CreateFrame(Nothing)
Set LampLight = D3DRM.CreateLightRGB(D3DRMLIGHT_SPOT, 1, 1, 1)
LampLight.SetRange 50 ' длина конуса
LampLight.SetUmbra 3.14 ' угол наружного конуса = 180
LampLight.SetPenumbra 3.14 ' угол внутреннего конуса
LampLight.SetConstantAttenuation 0.4
LampLight.SetQuadraticAttenuation 0.4
LampLight.SetLinearAttenuation 0.5
Lamp.SetPosition Nothing, x, y, z
Lamp.AddLight LampLight
' ориентация векторная, надо подобрать (значения в диапазоне 1-0-1)
Lamp.SetOrientation Nothing, 1, 0, 0, 0, 1, 0