forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Как наложить текстуру только на одну грань куба? (http://forum.boolean.name/showthread.php?t=19431)

STekLyAToR 22.09.2014 17:15

Как наложить текстуру только на одну грань куба?
 
Такое возможно, я знаю, колитесь как!

ABTOMAT 22.09.2014 20:23

Ответ: Как наложить текстуру только на одну грань куба?
 
Когда куб создан через xCreateCube то никак.
Надо создавать эту грань отдельно.

Вот пример функции где создаётся куб, на каждую сторону которого кладётся отдельная текстура.

Код:

Function mLoadSkyBox%(Dir$,Typ$="jpg")
        Local Mesh%=xCreateMesh()
        Local Brush%,Texture%,Surf%,v0%,v1%,v2%,v3%
       
        ; Left
        If FileType(Dir+"\"+"left."+Typ)<>0
                Texture=xLoadTexture(Dir+"\"+"left."+Typ,49)
                Brush=xCreateBrush()
                xBrushTexture Brush,Texture
                Surf=xCreateSurface(Mesh,Brush)
                v0=xAddVertex(Surf,-1, 1,-1,0,0)
                v1=xAddVertex(Surf,-1, 1, 1,1,0)
                v2=xAddVertex(Surf,-1,-1,-1,0,1)
                v3=xAddVertex(Surf,-1,-1, 1,1,1)
                xAddTriangle Surf,v2,v1,v0
                xAddTriangle Surf,v1,v2,v3
        EndIf
        ; Front
        If FileType(Dir+"\"+"front."+Typ)<>0
                Texture=xLoadTexture(Dir+"\"+"front."+Typ,49)
                Brush=xCreateBrush()
                xBrushTexture Brush,Texture
                Surf=xCreateSurface(Mesh,Brush)
                v0=xAddVertex(Surf,-1, 1,1,0,0)
                v1=xAddVertex(Surf, 1, 1,1,1,0)
                v2=xAddVertex(Surf,-1,-1,1,0,1)
                v3=xAddVertex(Surf, 1,-1,1,1,1)
                xAddTriangle Surf,v2,v1,v0
                xAddTriangle Surf,v1,v2,v3
        EndIf
        ; Right
        If FileType(Dir+"\"+"right."+Typ)<>0
                Texture=xLoadTexture(Dir+"\"+"right."+Typ,49)
                Brush=xCreateBrush()
                xBrushTexture Brush,Texture
                Surf=xCreateSurface(Mesh,Brush)
                v0=xAddVertex(Surf,1, 1, 1,0,0)
                v1=xAddVertex(Surf,1, 1,-1,1,0)
                v2=xAddVertex(Surf,1,-1, 1,0,1)
                v3=xAddVertex(Surf,1,-1,-1,1,1)
                xAddTriangle Surf,v2,v1,v0
                xAddTriangle Surf,v1,v2,v3
        EndIf
        ; Back
        If FileType(Dir+"\"+"back."+Typ)<>0
                Texture=xLoadTexture(Dir+"\"+"back."+Typ,49)
                Brush=xCreateBrush()
                xBrushTexture Brush,Texture
                Surf=xCreateSurface(Mesh,Brush)
                v0=xAddVertex(Surf, 1, 1,-1,0,0)
                v1=xAddVertex(Surf,-1, 1,-1,1,0)
                v2=xAddVertex(Surf, 1,-1,-1,0,1)
                v3=xAddVertex(Surf,-1,-1,-1,1,1)
                xAddTriangle Surf,v2,v1,v0
                xAddTriangle Surf,v1,v2,v3
        EndIf
        ; Bottom
        If FileType(Dir+"\"+"bottom."+Typ)<>0
                Texture=xLoadTexture(Dir+"\"+"bottom."+Typ,49)
                Brush=xCreateBrush()
                xBrushTexture Brush,Texture
                Surf=xCreateSurface(Mesh,Brush)
                v0=xAddVertex(Surf,-1,-1, 1,0,0)
                v1=xAddVertex(Surf, 1,-1, 1,1,0)
                v2=xAddVertex(Surf,-1,-1,-1,0,1)
                v3=xAddVertex(Surf, 1,-1,-1,1,1)
                xAddTriangle Surf,v2,v1,v0
                xAddTriangle Surf,v1,v2,v3
        EndIf
        ; Top
        If FileType(Dir+"\"+"top."+Typ)<>0
                Texture=xLoadTexture(Dir+"\"+"top."+Typ,49)
                Brush=xCreateBrush()
                xBrushTexture Brush,Texture
                Surf=xCreateSurface(Mesh,Brush)
                v0=xAddVertex(Surf,-1, 1, 1,0,0)
                v1=xAddVertex(Surf,-1, 1,-1,1,0)
                v2=xAddVertex(Surf, 1, 1, 1,0,1)
                v3=xAddVertex(Surf, 1, 1,-1,1,1)
                xAddTriangle Surf,v2,v1,v0
                xAddTriangle Surf,v1,v2,v3
        EndIf
       
        xEntityFX Mesh,1+8
        xFlipMesh Mesh
        xUpdateNormals Mesh
       
        Return Mesh
End Function


KCEPOKC 25.09.2014 10:49

Ответ: Как наложить текстуру только на одну грань куба?
 
Да, придется создавать свой куб.

А cubemap'ы? Или это из другой оперы?

ABTOMAT 25.09.2014 12:53

Ответ: Как наложить текстуру только на одну грань куба?
 
Ну я понял вопрос не как про кубемапы потому что иначе бы автор наверное сказал что его вопрос касается кубемап.

KCEPOKC 25.09.2014 13:12

Ответ: Как наложить текстуру только на одну грань куба?
 
Вообще, если это для майнкрафта, то, как писали ранее, неправильно рисовать блоки просто кубами, ибо с увеличением мира наступает жесткий стаковерфлоу, мемеори аксесс волэйшон и проч.
Дерзай, короче.

Также полезно для майна юзать SVO, ИМХО.

Кирпи4 25.09.2014 17:44

Ответ: Как наложить текстуру только на одну грань куба?
 
Цитата:

Сообщение от ABTOMAT (Сообщение 287137)
Texture=xLoadTexture(Dir+"\"+"top."+Typ,49)
Brush=xCreateBrush()
xBrushTexture Brush,Texture[/code]

Блин, зачем ты ему это показал... Теперь он своими кубами будет выёбывать до кипятка жёсткий диск

ABTOMAT 25.09.2014 18:46

Ответ: Как наложить текстуру только на одну грань куба?
 
Код не мой, я просто скопипастил :-) В контексте примера (загрузка скайбокса) это нормально, так как грузится один раз за запуск. Если человек умеет голову включать, он и сам догадается.

STekLyAToR 27.09.2014 14:33

Ответ: Как наложить текстуру только на одну грань куба?
 
Нашёл более лучшее решение проблемы!
1. Создать нужный куб в 3ds max и наложить текстуру.
2. Загрузить этот куб.
А за ответы спасибо!

KCEPOKC 27.09.2014 16:22

Ответ: Как наложить текстуру только на одну грань куба?
 
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

ABTOMAT 27.09.2014 19:44

Ответ: Как наложить текстуру только на одну грань куба?
 
Цитата:

Сообщение от KCEPOKC (Сообщение 287358)
*** скрытый текст ***

Ну а чего? Человек по крайней мере решил проблему. В реальном мире деньги платят не за ваш навык программирования, а за решение поставленных проблем, разве нет?

KCEPOKC 28.09.2014 20:24

Ответ: Как наложить текстуру только на одну грань куба?
 
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.


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

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