И вот такая проблема, на экран рендерится объект, моделька, в которой есть части, которые покрыты текстурой с альфа-каналом, т.е. определенные цвет прозрачный насквозь. И проблема в том, что в итоге объект очень странно отображается... некоторые части не прозрачные... думал, думал почему так может получатся.. и тут доперло, что когда происходит цикл текстурирования объектов модели, на которые натянуты текстуры прозрачные, то сначала рендерится первый объект модели затем второй и так до конца, каждая часть одевается в свою текстуру, но в итоге прозрачная часть будет лишь в том случае, если объекты рендерились попорядку, а не первый рендерился в торым в итоге получая что-то такое:
На заднем плане стоят деревья в которых объекты в разнабой сделаны ф редакторе...
а то что объведено кружочком, я сделал первую ветку, зане й вторая, и третия в точной последовательности...
а вот как реализован алгоритм
- Код: Выделить всё
'Это пишу в цикл рендеринга
Dev.RenderState.AlphaBlendEnable = True
muoviObj(0.8, 0.8, 0.8, 90, 40, 0, 0, -20, -10)
For i = 0 To modello.numX
Dev.Material = modello.mat(i)
Dev.SetTexture(0, modello.tex(i))
modello.mesh.DrawSubset(i)
Next
- Код: Выделить всё
'Это загрузка модели и текстур
Public modello As oggX
Structure oggX
'struttura per la gestione semplice delle mesh
Public mesh As Mesh
Public numX As Integer
Public tex() As Texture
Public mat() As Material
End Structure
Function creaMesh(ByVal fileSrc As String, ByVal materialiOn As Boolean, ByVal textureOn As Boolean, ByVal TexPath As String) As oggX
modello = creaMesh(AppPath() & "\models\tree.x", True, True, AppPath)
With creaMesh
Dim materiali() As ExtendedMaterial
.mesh = Mesh.FromFile(fileSrc, MeshFlags.Dynamic, dev, materiali)
.numX = UBound(materiali)
ReDim .tex(.numX)
ReDim .mat(.numX)
Dim i As Integer
For i = 0 To .numX
If textureOn Then
If materiali(i).TextureFilename <> "" Then
.tex(i) = TextureLoader.FromFile(dev, TexPath & "\textures\" & materiali(i).TextureFilename, 0, 0, 1, 0, Format.A1R5G5B5, Pool.Default, Filter.Linear, Filter.Linear, Drawing.Color.White.ToArgb)
End If
End If
If materialiOn Then
.mat(i) = materiali(i).Material3D
.mat(i).Ambient = .mat(i).Diffuse
End If
Next
End With
End Function
вроде это весь код, для отображения модельки.. ну кроме расположения ее в World.
если, кто-то что-то не понял.. скажите... не умею объеснять =)