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=2491)

Platon 24.01.2007 14:41

Re: Частичное текстурирование примитива.
 
Вот, с текстурными координатами мог напутать, а так функция должна работать.
Код:

Function CreateCube2(SizeX# = 1, SizeY# = 1, SizeZ# = 1)
        Local Mesh = CreateMesh()
        ;top
        Local Surface = CreateSurface(Mesh)
        AddVertex(Surface, -0.5, 0.5,  0.5, 0, 0)
        AddVertex(Surface,  0.5, 0.5,  0.5, 1, 0)
        AddVertex(Surface,  0.5, 0.5, -0.5, 1, 1)
        AddVertex(Surface, -0.5, 0.5, -0.5, 0, 1)
        AddTriangle(Surface, 0, 1, 2)
        AddTriangle(Surface, 2, 3, 0)
        ;bottom
        Surface = CreateSurface(Mesh)
        AddVertex(Surface, -0.5, -0.5,  0.5, 0, 0)
        AddVertex(Surface,  0.5, -0.5,  0.5, 1, 0)
        AddVertex(Surface,  0.5, -0.5, -0.5, 1, 1)
        AddVertex(Surface, -0.5, -0.5, -0.5, 0, 1)
        AddTriangle(Surface, 0, 3, 2)
        AddTriangle(Surface, 2, 1, 0)
        ;front
        Surface = CreateSurface(Mesh)
        AddVertex(Surface, -0.5,  0.5, 0.5, 0, 0)
        AddVertex(Surface,  0.5,  0.5, 0.5, 1, 0)
        AddVertex(Surface,  0.5, -0.5, 0.5, 1, 1)
        AddVertex(Surface, -0.5, -0.5, 0.5, 0, 1)
        AddTriangle(Surface, 0, 3, 2)
        AddTriangle(Surface, 2, 1, 0)
        ;back
        Surface = CreateSurface(Mesh)
        AddVertex(Surface, -0.5,  0.5, -0.5, 0, 0)
        AddVertex(Surface,  0.5,  0.5, -0.5, 1, 0)
        AddVertex(Surface,  0.5, -0.5, -0.5, 1, 1)
        AddVertex(Surface, -0.5, -0.5, -0.5, 0, 1)
        AddTriangle(Surface, 0, 1, 2)
        AddTriangle(Surface, 2, 3, 0)
        ;left
        Surface = CreateSurface(Mesh)
        AddVertex(Surface, -0.5,  0.5, -0.5, 0, 0)
        AddVertex(Surface, -0.5,  0.5,  0.5, 1, 0)
        AddVertex(Surface, -0.5, -0.5,  0.5, 1, 1)
        AddVertex(Surface, -0.5, -0.5, -0.5, 0, 1)
        AddTriangle(Surface, 0, 3, 2)
        AddTriangle(Surface, 2, 1, 0)
        ;right
        Surface = CreateSurface(Mesh)
        AddVertex(Surface, 0.5,  0.5, -0.5, 0, 0)
        AddVertex(Surface, 0.5,  0.5,  0.5, 1, 0)
        AddVertex(Surface, 0.5, -0.5,  0.5, 1, 1)
        AddVertex(Surface, 0.5, -0.5, -0.5, 0, 1)
        AddTriangle(Surface, 0, 1, 2)
        AddTriangle(Surface, 2, 3, 0)
       
        ScaleMesh(Mesh, SizeX, SizeY, SizeZ)
        UpdateNormals(Mesh)
        Return Mesh
End Function

Graphics3D(640, 480, 16, 2)
SetBuffer(BackBuffer())

Camera = CreateCamera()
PositionEntity(Camera, 0, 0, -3)

Cube = CreateCube2()

Repeat
        TurnEntity(Cube, 1, 1, 1)

        RenderWorld()
        Flip()
Until KeyDown(1)

End

ЗЫ
Почему так быстро регистрация пропадает? Каждые пять минут приходицца заного логиницца.

Черный крыс 24.01.2007 15:04

Re: Частичное текстурирование примитива.
 
2 Хроно....ИМХО ты скажи зачем тебе это надо??? Просто если у каждого кубика разбить каждую сторону на сюрфейсы....то после 50-ти таких кубов блиц начнет неслабо тормозить.... - это слабая сторона блитца....многие наоборот стараются все что можно - обьеденить в один сюрфейс...

Chrono Syndrome 24.01.2007 16:27

Re: Частичное текстурирование примитива.
 
Цитата:

ИМХО ты скажи зачем тебе это надо???
Ну, допустим, мне нужна такая сцена: куб, грани которого меняют цвет при наведении на них курсора...

2Platon: Спасибо. Но на самом деле все, как выяснилось, много проще (PB + mmEngine) :
Код:

Macro CreateSide()
*S = CreateSurface_(*Cube)
AddVertex_(*S, -1, 1, -1, 0, 0)
AddVertex_(*S, 1, 1, -1, 1, 0)
AddVertex_(*S, 1, -1, -1, 1, 1)
AddVertex_(*S, -1, -1, -1, 0, 1)
AddTriangle_(*S, 0, 1, 2)
AddTriangle_(*S, 0, 2, 3)
EndMacro
 
Procedure Create6SurfCube(Parent = #Null)
Define *Cube = CreateMesh_(Parent), *S, I
For I = 1 To 4
CreateSide()
RotateMesh_(*Cube, 0, 90, 0)
Next I
RotateMesh_(*Cube, 90, 0, 0)
For I = 1 To 2
CreateSide()
RotateMesh_(*Cube, 180, 0, 0)
Next I
ProcedureReturn *Cube
EndProcedure


Черный крыс 24.01.2007 17:28

Так есть способ гораздо проще....перевернуть куб по нормали - и вот тебе окантовка...можно покрасить в любой цвет.

Вот тебе код программного создания окантовки....
Цитата:


Function Createcontur(ent,scon#=0)
If scon=0 scon#=(MeshDepth(ent)+MeshWidth(ent)+MeshHeight(en t))/400
invmesh=CopyMesh(ent,ent)
FlipMesh invmesh
EntityFX invmesh,1
EntityColor invmesh,0,0,0
;EntityTexture invmesh,black,0,0
For j=1 To CountSurfaces(invmesh)
surf = GetSurface(invmesh,j)
surf2= GetSurface(ent,j)
For i=0 To CountVertices(surf)-1
VertexCoords surf,i,VertexX(surf2,i)+scon*VertexNX(surf2,i),Ver texY(surf2,i)+scon*VertexNY(surf2,i),VertexZ(surf2 ,i)+scon*VertexNZ(surf2,i)
Next
Next
Return invmesh
End Function


Chrono Syndrome 24.01.2007 18:52

Re: Частичное текстурирование примитива.
 
Цитата:

Вот тебе код программного создания окантовки....
Спасибо, конечно, но мой вариант мне нравиться больше ;) ...

Chrono Syndrome 24.01.2007 22:44

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

Chrono Syndrome 25.01.2007 10:21

Re: Частичное текстурирование примитива.
 
Все ясно - нормали. Вопрос снят.


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

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