|
3D-программирование Вопросы, касающиеся программирования 3D мира |
24.01.2007, 14:41
|
#16
|
Знающий
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений (для 70 пользователей)
|
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
ЗЫ
Почему так быстро регистрация пропадает? Каждые пять минут приходицца заного логиницца.
|
(Offline)
|
|
24.01.2007, 15:04
|
#17
|
|
Re: Частичное текстурирование примитива.
2 Хроно....ИМХО ты скажи зачем тебе это надо??? Просто если у каждого кубика разбить каждую сторону на сюрфейсы....то после 50-ти таких кубов блиц начнет неслабо тормозить.... - это слабая сторона блитца....многие наоборот стараются все что можно - обьеденить в один сюрфейс...
|
|
|
24.01.2007, 16:27
|
#18
|
|
Re: Частичное текстурирование примитива.
ИМХО ты скажи зачем тебе это надо???
|
Ну, допустим, мне нужна такая сцена: куб, грани которого меняют цвет при наведении на них курсора...
2 Platon: Спасибо. Но на самом деле все, как выяснилось, много проще (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
|
#19
|
|
Так есть способ гораздо проще....перевернуть куб по нормали - и вот тебе окантовка...можно покрасить в любой цвет.
Вот тебе код программного создания окантовки....
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
|
|
|
|
24.01.2007, 18:52
|
#20
|
|
Re: Частичное текстурирование примитива.
Вот тебе код программного создания окантовки....
|
Спасибо, конечно, но мой вариант мне нравиться больше ...
|
|
|
24.01.2007, 22:44
|
#21
|
|
Re: Частичное текстурирование примитива.
Так... Тут у меня еще одна проблемка появилось: сгенерированный таким образом куб почему-то таинственным образом исчезает, если добавить в сцену источник света... Почему такое может происходить, кто знает ?
|
|
|
25.01.2007, 10:21
|
#22
|
|
Re: Частичное текстурирование примитива.
Все ясно - нормали. Вопрос снят.
|
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:26.
|