forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Материалы и Blitz3D. Вопрос по текстурированию. (http://forum.boolean.name/showthread.php?t=17736)

infuzo 09.01.2013 17:07

Материалы и Blitz3D. Вопрос по текстурированию.
 
Дело вот в чём. Пишу йоба игру в Blitz3D, где используются модели с материалами, то есть на модель накладываются много текстур. Если текстуры лежат вместе с моделью и правильно названы, то проблем нет, модель сама собою текстурируется. Но как самому прописовать текстуры для таких моделей я не понимаю. Можете мне скинуть или рассказать как текстурировать модели в формате 3ds в Blitz3d, на которые наложено несколько, а не одна, текстур.

Program23 09.01.2013 19:17

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Режим смешивания EntityBlend?
EntityFX, посмотри тоже. А вообще, юзай pipline for 3ds max и там настраивай текстуры, а экспортируй в b3d format.

infuzo 09.01.2013 20:04

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Код:

mesh = LoadMesh("dot.3ds")
tex1 = LoadTexture("Limeston.jpg")
tex2 = LoadTexture("metal.jpg")
tex3 = LoadTexture("wood_pla.jpg")
TextureBlend tex2,3

EntityTexture mesh, tex1,0,0
EntityTexture mesh, tex2,0,1
EntityTexture mesh, tex3,0,2

Сделал так, желаемого результата добиться не удалось. Видна только последняя текстура, что мне сделать?

infuzo 09.01.2013 22:43

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Может здесь нужно использовать PaintMesh или PaintEntity?

FREE MAN 09.01.2013 23:33

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Цитата:

Сообщение от infuzo (Сообщение 248809)
Код:

mesh = LoadMesh("dot.3ds")
tex1 = LoadTexture("Limeston.jpg")
tex2 = LoadTexture("metal.jpg")
tex3 = LoadTexture("wood_pla.jpg")
TextureBlend tex2,3

EntityTexture mesh, tex1,0,0
EntityTexture mesh, tex2,0,1
EntityTexture mesh, tex3,0,2

Сделал так, желаемого результата добиться не удалось. Видна только последняя текстура, что мне сделать?

Попробуй добавить TextureBlend к tex1 и tex3 должно срастись, со значениями сам разберёшся что и как.
простой пример в атаче прилагается как это можно реализовывать

HolyDel 09.01.2013 23:36

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
TextureBlend только ко второй применил. примени ко всем трем. ну хотябы к последним двум.

infuzo 10.01.2013 00:04

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Применял, результата никакого. В уроке от блитз скул (шестой, если не ошибаюсь), который предложил Phyton, демонстрирует только текстурирование, а не указание пути текстур по материалам для определённой модели. Вопрос остаётся в силе.

FREE MAN 10.01.2013 00:32

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
выложи свой код, попытаюсь помочь...

infuzo 10.01.2013 00:40

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Код:

Graphics3D 800,600,32,2

SetBuffer BackBuffer()

mesh = LoadMesh("school.3ds")
tex1 = LoadTexture("texture/Limeston.jpg")
tex2 = LoadTexture("texture/metal.jpg")
tex3 = LoadTexture("texture/wood_pla.jpg")
TextureBlend tex2,3
TextureBlend tex3,3

EntityTexture mesh, tex1,0,0
EntityTexture mesh, tex2,0,1
EntityTexture mesh, tex3,0,2


lit=CreateLight()

cam=CreateCamera()

While Not KeyHit(1)
       
        HidePointer
        varMouseY = varMouseY + (MouseYSpeed()/2)/2
        If varMouseY >= 70 Then varMouseY = 70
        If varMouseY <= -70 Then varMouseY = -70
        If varMouseY = 0 Then varMouseY = 1
        RotateEntity cam,varMouseY ,EntityYaw(cam) - (MouseXSpeed()/2)/2,1
       
        MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
       
        If KeyDown(17) Then MoveEntity cam, 0,0,0.1
        If KeyDown(31) Then MoveEntity cam, 0,0,-0.1
        If KeyDown(30) Then MoveEntity cam, -0.1,0,0
        If KeyDown(32) Then MoveEntity cam, 0.1,0,0
       
        RenderWorld
       
        Text 10,20, CountSurfaces(mesh)
        Flip
Wend


burovalex 14.01.2013 13:22

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Ну если логически:
У тебя есть модель школы, т.е. сложный объект. Есть несколько несовместимых материалов(дерево, железо).
Значит у тебя школа состоит из нескольких элементов.
Значит тебе надо в максе обозвать все деревяные элементы школы (например, Wood1,Wood2...) и в блитце текстурировать дочерние меши.

mesh = LoadMesh("school.3ds")
For i=1 to CountChildren(mesh)
meshChild=FindChild(mesh,("Wood"+i))
If meshChild<>0 then TextureEntity(meshChild, WoodTexture) ;а может быть здесь нужен PaintMesh
next

infuzo 24.01.2013 00:51

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Цитата:

Сообщение от burovalex (Сообщение 249382)
Ну если логически:
У тебя есть модель школы, т.е. сложный объект. Есть несколько несовместимых материалов(дерево, железо).
Значит у тебя школа состоит из нескольких элементов.
Значит тебе надо в максе обозвать все деревяные элементы школы (например, Wood1,Wood2...) и в блитце текстурировать дочерние меши.

mesh = LoadMesh("school.3ds")
For i=1 to CountChildren(mesh)
meshChild=FindChild(mesh,("Wood"+i))
If meshChild<>0 then TextureEntity(meshChild, WoodTexture) ;а может быть здесь нужен PaintMesh
next

Разве child = материал?

Arton 24.01.2013 15:56

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Цитата:

Сообщение от infuzo (Сообщение 250485)
Разве child = материал?

Нет, child это дочерний объект.

В этом коде идёт поиск дочерних объектов с именем "Wood", а когда найден, на него натягивается соответствующая текстура.

А PaintMesh это к кистям относится. Кисть это текстура со свойствами: блеск, прозрачность. цвет и т. д. В справке блица хорошо всё объясняется.

tormoz 24.01.2013 21:42

Ответ: Материалы и Blitz3D. Вопрос по текстурированию.
 
Нужно:
перебрать чилды ентити
в чилдах перебрать сурфейсы
получить с сурфейсов браши по слоям
с брашей текстуры
Код:

For i=1 To CountChildren(model)
      child=GetChild(model,i)
      If child<>0
    surf_=GetSurface(child,1)
    brush_=GetSurfaceBrush(surf_)
    texture_t=GetBrushTexture(brush_,0)


получить флаги, углы и бленды мем-хаком(чз длл)
Код:

it=Peek_L(texture_t)
        If it<>0
                        inf=Peek_L(it+4)       
                       
                        flag_=Peek_W(inf+20)
                        blend=Peek_L(it+24)
          scx#=Peek_F(it+36)
          scy#=Peek_F(it+40)

          posx#=Peek_F(it+44)
                        posy#=Peek_F(it+48)
                    angle#=Peek_F(it+52)
          angle=180*angle/3.141559


получить имя файла текстуры
Код:

name$=TextureName$(texture_t)
загрузить текстуры с полученными флагами
наложить текстуры на браши с полученным блендом
Код:

BrushTexture brush_,texture_,0,0
или
не морочить яйца и ложить текстуры с моделью


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

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