forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Xors3D (http://forum.boolean.name/forumdisplay.php?f=126)
-   -   Xors3D (http://forum.boolean.name/showthread.php?t=6180)

Mr_F_ 25.07.2014 12:36

Ответ: Xors3D
 
Цитата:

"if (diffuse.a < 0.5f) discard; // реализация маски"
всё верно, должно работать

diffuse.a выдаёт альфаканал.
затем сравниваешь его с 0.5 (в шейдерах цвет считается от 0 до 1, вместо 0-255, т.е. по сути это серый 128), если альфа прозрачнее средней в этом пикселе, то выкидываем этот пиксель.

Цитата:

зачем точка
точка выдаёт элемент типа.
у тебя тип - float4.
в нём 4 элемента-флоата: x,y,z,w, их же альтернативно можно получать через r,g,b,a, нет разницы.

Arton 25.07.2014 18:00

Ответ: Xors3D
 
Подозрение что я криво скопипасти шейдер (ибо pdf), т. к. ничего не работает, а Хорс ругается на несуществующую технику.

Какой есть просто дебагер HLSL?

Я что-то нашёл, но оно громоздкое =/

Mr_F_ 25.07.2014 18:38

Ответ: Xors3D
 
хз, я как-то без дебаггера пишу, лог ошибок д3д хлсл компилера довольно исчерпывающий

Samodelkin 25.07.2014 22:39

Ответ: Xors3D
 
Цитата:

Сообщение от Arton (Сообщение 284627)
Какой есть просто дебагер HLSL?

Есть Render Monkey - там шейдеры как раз до 3.0 включительно.
Однако имхо - он тебя еще больше запутает, т. к. нужно всё таки понимать как шейдеры с пайплайном д3д9 совмещаются.
Сам я собственно тоже на д3д9 сразу делаю, потому что пишу шейдеры в формате эффектов, а эффектов в RM вроде нет - только вершинные и пиксельные отдельно, а всё остальное через интерфейс RM настраивается.
Если ты знаешь как функционал эффектов и настроек RM взаимозаменять то можно пользоваться инструментом в качестве исследования новых шейдеров и прочих экспериментов.

tirarex 25.07.2014 22:44

Ответ: Xors3D
 
Я этим пользуюсь http://moka.ucoz.ru/load/5-1-0-110

Detmer 24.08.2016 20:04

Ответ: Xors3D
 
Привет! Есть проблемка с ксорсом (750 ревизия). Почему-то не работает transition в функции xAnimate. Код минимальный, модели простейшие, как и анимации, как не пробовал изворачиваться, анимация дергается, транзишн не пашет. Аналогичный код в Блитце работает на ура.

В сэмплах ксорса есть "forest" там моделька кузнеца. Запустив этот пример вижу, что транзишн работает!:4to: Меняю модельку на свою - транзишн не работает! Окей. Далее запускаю эту модельку кузнеца в Блитце, и блитц вообще не считывает из неё никакой анимации, никакие извращения с xExtractAnimSeq не помогают.

Из всего этого делаю вывод, что нормальный человеческий транзишн не работает, по крайней мере без танцев с бубном, и видимо нужно как-то по особому делать анимацию у моделек, чтобы оно работало, как у того кузнеца из сэмплов.

Кто-то встречался с таким? Есть идеи?

Опупеть я трупо*б! Возиться с ксорсом в 2016 это извращение, знаю, но есть причины.

tirarex 25.08.2016 02:37

Ответ: Xors3D
 
Запаренть свою модель к пивоту и толкай уже пивот.

Detmer 25.08.2016 10:43

Ответ: Xors3D
 
Толкать - в смысле анимировать? :)

Цитата:

int piv = xCreatePivot();
int mesh = xLoadAnimMesh("mesh.b3d",piv);
xAnimate(piv,3,1,0,10);
Вроде того? Не работает:dontknow:

ant0N 25.08.2016 11:06

Ответ: Xors3D
 
Цитата:

Вроде того? Не работает
ниет. Толкат это транслэйтить, двигать
Анимировать пивот бессмысленно. Если анимация рабочая, то все итак должно работать

Detmer 25.08.2016 11:26

Ответ: Xors3D
 
Цитата:

Сообщение от ant0N (Сообщение 308071)
Толкат это транслэйтить, двигать
Анимировать пивот бессмысленно. Если анимация рабочая, то все итак должно работать

Ну я так и подумал, что толкать тут бессмысленно, как и анимировать пивот. Проблема ведь не в толкании, а в анимации. И анимация рабочая, только ксорс не выполняет транзишн, то есть переход не плавный между анимациями. На блице всё работает, повторюсь. Ранее не один и не два раза пользовался этим на блице, всегда всё работало. Значит дело в ксорсе всё же.

Detmer 25.08.2016 17:37

Ответ: Xors3D
 
Решил проблему. Для будущих поколений, так сказать, опишу суть. Хотя, может, это я один такой дурак? :crazy: Тогда не серчайте. :)

А суть в разных способах реализации транзишна у блитца и ксорса. Алсо, обнаружил, что и название параметра у них разное. В Блитце это именно "transition", а в ксорсе "translation", хотя справка в итоге всё равно говорит, что это значение "of transition". :)

Итак, в качестве условия для вызова анимации у меня стояла команда xKeyDown. Соответственно, если кнопка была нажата, анимация вызывалась сотни раз в секунду. Но в блице это не мешало всему работать корректно.

В блитце всё работало без проблем по той причине, что там транзишн действует по принципу:
1. Играется какая-то анимация.
2. Вызывается функция Animate.
3. С текущего кадра происходит транзишн к первому кадру вызваной анимации.
Чем больше транзишн, тем плавнее и медленее переход.

В ксорсе отличие в том, что на пункте 3 транзишн не к первому кадру идет, а как бы отскакивает назад от текущего положения. Если транзишн = 1, тогда да, к первому кадру. Если скажем 10, то может на середину отпрыгнуть и уже с середины проигрывать до конца.

Грубый пример:
Есть моделька с анимацией в 15 кадров. Проигрывается с 1 по 15 соответственно. Тип анимации допустим стоит 3. То есть один раз проигрывается и застывает на последнем кадре. Если ставим транзишн 1, то она будет резко отскакивать почти к началу и снова проигрываться при повторном вызове функции Animate. Если поставим 7, то примерно на середину плавно отойдёт (в нашем примере на 7-8 кадры) и с этого места начнет к последнему кадру вызваной анимации проигрываться.

Зависимость не такая прямая, конечно, что транзишн=7, это 7-8 кадры, но в целом верная. Чем больше транзишн, тем он плавнее, и тем меньше "отскок" в кадрах. Чем меньше транзишн, тем он порывистее, но и "отскок" ближе к первым кадрам анимации.

Еще важный момент заключается в том, что если до окончания "откатывания" (читай транзишна) еще раз вызвать Animate, то он уже не плавно "откатывается", а дергается назад! Что несколько опечалило. В блитце оно всё-таки поровнее всё как-то, без дёрганий.

Именно поэтому в блице всё было окей, а в ксорсе из-за частого срабатывания xKeyDown а следовательно и Animate, происходила резкая серия таких "отскоков" и выглядело, будто никакого транзишна и нет вовсе!

Так же прилагаю гифки для наглядности.

1. Ксорс, транзишн равен 10. Моделька птички, 15 кадров, проигрывается один раз и застывает. Три раза вызываю анимацию еще раз. Потом еще три раза но уже два раза нажимаю кнопку анимации, из-за чего возникают скачки.


2. Ксорс, транзишн равен 2. Тоже самое, три раза жмакаю просто, потом трижды двойное нажатие. Здесь отскоки почти не видны, потому что транзишн невелик. Чем больше транзишн, тем более заметны отскоки, то есть их легче словить. При транзишне=2 нужно очень быстро жмакать клавишу анимации, чтобы получился отскок. При транзишн=10 достаточно пару раз в секунду. Но, конечно, можно ручками реализовать способ, чтобы отскоков не было вообще. Возможно потом накатаю, выложу в тред.


3. Блиц, транзишн равен 10, три простых нажатия, затем три двойных, но как видим, скачков не возникает! Анимация просто как бы застопоривается на первых кадрах. Тоже самое. если зажать кнопку анимации.


4. Блиц, транзишн 2.


А! И да, наверное я мог просто написать, что надо использовать xKeyHit вместо xKeyDown:-D

Всем peace! ;)


UPD: гифки внутри!:super:

Владислав 06.09.2016 17:59

Ответ: Xors3D
 
Есть кто живой? :)
Не могу нигде найти, как в xors3D дела обстоят с cubemap. Я уж думал я что-то не понимаю, переписал на блитц - работает, тот же самый код ни в какую не хочет на xors3d, объекты белые.
Какое тут нужно колдунство?

tirarex 11.09.2016 18:59

Ответ: Xors3D
 
Цитата:

Сообщение от Владислав (Сообщение 308351)
Есть кто живой? :)
Не могу нигде найти, как в xors3D дела обстоят с cubemap. Я уж думал я что-то не понимаю, переписал на блитц - работает, тот же самый код ни в какую не хочет на xors3d, объекты белые.
Какое тут нужно колдунство?

Используй шейдеры, с ними колдовать на много проще.

Владислав 13.09.2016 13:20

Ответ: Xors3D
 
Да что-то у меня нет под рукой шейдера cubemap или же pccm для xors'a

UPD: cubemap шойдер нашел)

antarman 27.06.2022 15:38

Re: Xors3D
 
Код:

Include "Xors3d.bb"

Const PI_180 = (0.0174532925199433)
Const WaterMapSize = 512

; setup maximum supported AntiAlias Type
xSetAntiAliasType(xGetMaxAntiAlias())
; set application window caption
xAppTitle("Simple Water")
; initialize Graphics mode
xGraphics3D(800, 600, 0, False, True)
xSetBuffer(xBackBuffer())
xHidePointer()
xAntiAlias(True)
; create camera
camera = xCreateCamera()
xPositionEntity(camera, 0, 10, -10)
xCameraFogMode camera,1
xCameraFogColor camera,100,200,255
xCameraZoom camera,.25
; cube fx camera
FXCamera=xCreateCamera()
xCameraClsMode FXCamera,False,True
xCameraProjMode FXCamera,0
xCameraViewport FXCamera,0,0,WaterMapSize,WaterMapSize
xCameraZoom FXCamera,.0125
; ambient light
xAmbientLight 32,32,32
; light
mainlight=xCreateLight()
xRotateEntity mainlight,45,60,30
xLightColor mainlight,192,192,192
; create level
level = xLoadAnimMesh("level\test.b3d")
water= xLoadMesh("level\water.3ds")
xMoveEntity water,0,-2,0
WaterMapTexture=xCreateTexture(WaterMapSize,WaterMapSize,128+48)
xEntityTexture water,WaterMapTexture
xEntityColor water,100,200,255
xEntityColor water,512,512,512
xEntityAlpha water,0.7
xEntityFX water,1

; For mouse look
xMoveMouse(xGraphicsWidth() / 2, xGraphicsHeight() / 2)
mousespeed# = 0.5
camerasmoothness# = 4.5
camxa#=180

Const C_level=1,C_player=2,C_floorpivot=3

xCollisions c_player,c_level,2,2
xEntityType camera,c_player
xEntityType level,c_level,1
xEntityRadius camera,4.5,6


; main program loop
While xKeyDown(KEY_ESCAPE)=0
        ; camera control
        If xKeyDown(KEY_W) Then : xMoveEntity(camera, 0, 0, 1): EndIf
        If xKeyDown(KEY_S) Then : xMoveEntity(camera, 0, 0, -1): EndIf
        If xKeyDown(KEY_A) Then : xMoveEntity(camera, -1, 0, 0): EndIf
        If xKeyDown(KEY_D) Then : xMoveEntity(camera, 1, 0, 0): EndIf
        mxs# = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness)
        mys# = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness)
        camxa# = camxa - mxs
        camya# = camya + mys
        If camya < -89 Then : camya = -89 : EndIf
        If camya > 89 Then : camya = 89 : EndIf
        xMoveMouse(xGraphicsWidth()/2, xGraphicsHeight()/2)
        xRotateEntity(camera, camya, camxa, 0.0)

        If xEntityY(camera,1)<-3 Then : underwater=1 : Else : underwater=0 : EndIf
        wdb=1-wdb
        xCameraProjMode camera,0
        xCameraProjMode FXCamera,1
        xHideEntity(water)
        If underwater=0        Then
                xPositionEntity FXCamera,xEntityX(camera),xEntityY(water)-2,xEntityZ(camera)
                If wdb Then
                        ;do Left view
                        xSetCubeFace WaterMapTexture,0
                        xRotateEntity FXCamera,0,90,0
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                        ;do forward view
                        xSetCubeFace WaterMapTexture,1
                        xRotateEntity FXCamera,0,0,0
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                Else
                        ;do Right view
                        xSetCubeFace WaterMapTexture,2
                        xRotateEntity FXCamera,0,-90,0
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                        ;do backward view
                        xSetCubeFace WaterMapTexture,3
                        xRotateEntity FXCamera,0,180,0
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                EndIf
                ;do up view
                xSetCubeFace WaterMapTexture,4
                xRotateEntity FXCamera,-90,0,0
                xRenderWorld
                xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
        Else
                xPositionEntity FXCamera,-xEntityX(camera),xEntityY(camera)-2,xEntityZ(camera)
                If wdb Then
                        ;do Left view
                        xSetCubeFace WaterMapTexture,0
                        xRotateEntity FXCamera,0,-90,180
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                        ;do forward view
                        xSetCubeFace WaterMapTexture,1
                        xRotateEntity FXCamera,0,0,180
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                Else
                        ;do Right view
                        xSetCubeFace WaterMapTexture,2
                        xRotateEntity FXCamera,0,90,180
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                        ;do backward view
                        xSetCubeFace WaterMapTexture,3
                        xRotateEntity FXCamera,0,180,180
                        xRenderWorld
                        xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
                EndIf
                ;do down view
                xSetCubeFace WaterMapTexture,5
                xRotateEntity FXCamera,-90,0,180
                xRenderWorld
                xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
        EndIf
        xShowEntity(water)
        xCameraProjMode FXCamera,0
        xCameraProjMode camera,1
        xSetBuffer(xBackBuffer())
        xUpdateNormals water
        If underwater Then
                If waterdirection=1 Then
                        xFlipMesh water
                        xEntityAlpha water,1
                        xEntityColor water,155,200,255
                EndIf
                waterdirection=-1
                xCameraFogColor camera,50,100,155
                t#=xMillisecs()/6
                xScaleEntity camera,1+Cos(t)*0.04,1+Sin(t)*0.04,1+Cos(t)*0.02
                xCameraFogRange camera,0,200+Sin(xMillisecs()*0.05)*60
                xTurnEntity camera,0,0,Sin(t)*2
        Else
                If waterdirection=-1 Then
                        xFlipMesh water
                        xEntityAlpha water,.7
                        xEntityColor water,255,255,255
                EndIf
                waterdirection=1

                xCameraFogColor camera,100,200,255
                xScaleEntity camera,1,1,1
                xCameraFogRange camera,100,1000
        EndIf
        s=xGetSurface(water,0)
        For i =0 To xCountVertices(s)-1
                Freq#=xMillisecs()/4
                vx# = xVertexX(s,i)
                vy# = xVertexY(s,i)
                vz# = xVertexZ(s,i)
                vy#=Sin(freq+vx*500+vz*300)*1.2
                xVertexCoords s,i,vx,-vy,vz
        Next
        xUpdateWorld()
        ; render scene
        xRenderWorld()
        ; switch back buffer
        xFlip()
Wend

; For camera mouse look
Function CurveValue#(newvalue#, oldvalue#, increments%)
        If increments > 1 Then : oldvalue = oldvalue - (oldvalue - newvalue) / increments : EndIf
        If increments <= 1 Then : oldvalue = newvalue : EndIf
        Return oldvalue
End Function

все остальное из cubewater для Blitz3D


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

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