forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Вопрос-Ответ (для новичков) (http://forum.boolean.name/showthread.php?t=7886)

pax 03.07.2010 22:06

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Dream (Сообщение 152729)
создать ещё один такой мешь, увеличить его, сделать Flip, покрасить в чёрный цвет и немного прозрачности)

Просто увеличить подойдет для шарика, но не подойдет для сложной геометрии. Более верный вариант - скопировать меш повершинно и каждую вершину сдвинуть в сторону нормали на величину обводки. И поменять знак у составляющих нормали (Flip). Такой вариант правда может не подойти для некоторой геометрии, например для кубика т.к. в углах будут видны расслоения граней, но зато для органической модели создаст "правильную" обводку.

Лучший вариант - заготовить модель для обводки в 3d пакете.

Kolobok 03.07.2010 22:10

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Dream (Сообщение 152738)
сделать флип! читай внимательно

Не знаю о чём ты, вот мой полный код (и флип, я его везде пишу в 3д):
Код:

Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()

light = CreateLight()
RotateEntity light, 35,20,0

shape = CreateSphere()
EntityColor shape,255,255,0

border = CreateSphere(8,shape)
EntityAlpha border,.3
EntityColor border,255,0,0
ScaleEntity border,1.1,1.1,1.1

cam = CreateCamera(shape)
PositionEntity cam,0,3,-6
RotateEntity cam,10,0,0

While Not KeyHit(1)       

        UpdateWorld       
        RenderWorld

        Flip

Wend


Dream 03.07.2010 22:11

Ответ: Вопрос-Ответ (для новичков)
 
уффффффф... FlipMesh!!!!

Цитата:

Сообщение от pax (Сообщение 152752)
Просто увеличить подойдет для шарика, но не подойдет для сложной геометрии. Более верный вариант - скопировать меш повершинно и каждую вершину сдвинуть в сторону нормали на величину обводки. И поменять знак у составляющих нормали (Flip). Такой вариант правда может не подойти для некоторой геометрии, например для кубика т.к. в углах будут видны расслоения граней, но зато для органической модели создаст "правильную" обводку.

Лучший вариант - заготовить модель для обводки в 3d пакете.

да, для того чтобы на моделях ыбло номарльно, нужно будет в редакторе позицинировать центр модели по цетру координат, иначе будут косяки.

Knightmare 03.07.2010 22:15

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

И поменять знак у составляющих нормали (Flip)
Эээ, FlipMesh() меняет местами 1 и 3 индексы в треугольниках. В результате видимой становится другая грань треугольника (инвертируется нормаль считаемая как cross(v1 - v0, v2 - v0) и используемая в backface culling). Такой метод обводки использовался фиг знает с каких времен. А то что ты написал займет в стопицот раз больше времени, да и результат получится хуже.

Hurrit 03.07.2010 22:25

Ответ: Вопрос-Ответ (для новичков)
 
Алсо, этот вариант отрисовывает в два раза больше вертексов. Самый правильный вариант - использовать шейдер. Как этот эффект называется забыл, но знаю что он широко применяется в аниме играх

Kolobok 03.07.2010 22:39

Ответ: Вопрос-Ответ (для новичков)
 
Во FlipMesh() - то что хотел :)
Яж не буду использовать загогулины ) Так что и это пойдёт.

Dream 03.07.2010 22:51

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Hurrit (Сообщение 152767)
Алсо, этот вариант отрисовывает в два раза больше вертексов. Самый правильный вариант - использовать шейдер. Как этот эффект называется забыл, но знаю что он широко применяется в аниме играх

кажется toon shader назывется, когда делается обводка
но в блице шейдеров нету, поэтому...

pax 03.07.2010 22:55

Ответ: Вопрос-Ответ (для новичков)
 
Двухпроходный шейдер, выполняющий ту же функцию, что и описанную мной не применим к блитцу (кроме Xors). Да я ошибся, и сейчас вспомнил что в шейдере просто указывается другой порядок обхода вершин для лицевой стороны полигонов и берется монотонный цвет. Но рисует этот метод такое же количество поликов (т.е. два прохода = х2). Пока не знаю других вариантов для создания outline эффекта (не было надобности копать глубже).

Kolobok 04.07.2010 00:37

Ответ: Вопрос-Ответ (для новичков)
 
Мне в игре Princ Of Persia 4 понравилась обводка, вот решил что-то подобное сделать, только проще, тетрис какой-нибудь )

is.SarCasm 04.07.2010 01:20

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Мне в игре Princ Of Persia 4 понравилась обводка, вот решил что-то подобное сделать, только проще, тетрис какой-нибудь )
если я не ошибаюсь, то это бублики движка

Randomize 04.07.2010 03:39

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Kolobok (Сообщение 152797)
Мне в игре Princ Of Persia 4 понравилась обводка, вот решил что-то подобное сделать, только проще, тетрис какой-нибудь )

PHP код:

Function Cel_Shade(Shaded_EntityOutlineScale#=0.025, r#=0, g#=0, b#=0)
    
Local Outline_Entity CopyMesh(Shaded_Entity)         
    
UpdateNormals(Outline_Entity
    
EntityFX(Outline_Entity1+8)
    
    
    
Local i
    
For 1 To CountSurfaces(Outline_Entity)
        
        
Local surf GetSurface(Outline_Entityi)
        
Local j
        
        
For 0 To CountVertices(surf) - 1
            Local Vx
#  = VertexX#(surf, j)
            
Local Vy#  = VertexY#(surf, j)
            
Local Vz#  = VertexZ#(surf, j)
            
Local VNx# = VertexNX#(surf, j)
            
Local VNy# = VertexNY#(surf, j)
            
Local VNz# = VertexNZ#(surf, j)
            
VertexCoords (surfjVx#+(VNx#*OutlineScale#), Vy#+(VNy#*OutlineScale#), Vz#+(VNz#*OutlineScale#))
        
Next
        
    Next
    
    FlipMesh Outline_Entity
    EntityColor Outline_Entity
rgb
    PositionEntity Outline_Entity
EntityX#(Shaded_Entity, True), EntityY#(Shaded_Entity, True), EntityZ#(Shaded_Entity, True)
    
EntityParent Outline_EntityShaded_Entity
End 
Function 

;)

Kolobok 04.07.2010 22:47

Ответ: Вопрос-Ответ (для новичков)
 
А как скрывать, отображать объекты? :)
Типа свойства Visible...

Добавил:
Всё разобрался
HideEntity
ShowEntity

is.SarCasm 04.07.2010 23:04

Ответ: Вопрос-Ответ (для новичков)
 
Первый способ:
EntitAlpha - настраивает прозрачность. 0 = невидимко
Второй способ:
HideEntity - причем он не только прячится, но и не используется в коллизиях. См. справку.
Цитата:

Скрывает объект так, что он становится невидимым и больше не участвует в столкновения.

Основное применение - позволяет Вам создавать все объекты в начале программы, скрывать их, а затем копировать их и показывать по мере необходимости в основном игра. Это более эффективно, чем создание объектов в процессе игры.

Если Вы желаете скрыть объект так, чтобы он стал невидим, но все еще участвовал в столкновениях, то используйте команду EntityAlpha 0 вместо HideEntity. Это сделает объект полностью прозрачным.

HideEntity действует на указанный объект и все его дочерние(привязанные к нему) объекты, если такие существуют.

RlexGm 05.07.2010 13:26

Ответ: Вопрос-Ответ (для новичков)
 
я написал говнокод приседания, но он слишком багнутый, хочу узнать как это делается цивилизованно.Может кто нибудь дать пример с использованием.Приседание примерно как в CS 1.6 (ну и в других шутерах)

pax 05.07.2010 13:54

Ответ: Вопрос-Ответ (для новичков)
 
Ну... делаешь анимацию приседания... потом запускаешь анимацию ходьбу на корточках... как-то так... :)

Я надеюсь не программным путем кости двигал?)


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

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