|
Xors3D Графический движок с поддержкой DirectX9 |
25.07.2014, 12:36
|
#706
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: 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, нет разницы.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
25.07.2014, 18:00
|
#707
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,313 полезных сообщений (для 5,350 пользователей)
|
Ответ: Xors3D
Подозрение что я криво скопипасти шейдер (ибо pdf), т. к. ничего не работает, а Хорс ругается на несуществующую технику.
Какой есть просто дебагер HLSL?
Я что-то нашёл, но оно громоздкое =/
|
(Offline)
|
|
25.07.2014, 18:38
|
#708
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Xors3D
хз, я как-то без дебаггера пишу, лог ошибок д3д хлсл компилера довольно исчерпывающий
|
(Offline)
|
|
25.07.2014, 22:39
|
#709
|
Мастер
Регистрация: 12.01.2009
Сообщений: 981
Написано 390 полезных сообщений (для 634 пользователей)
|
Ответ: Xors3D
Сообщение от Arton
Какой есть просто дебагер HLSL?
|
Есть Render Monkey - там шейдеры как раз до 3.0 включительно.
Однако имхо - он тебя еще больше запутает, т. к. нужно всё таки понимать как шейдеры с пайплайном д3д9 совмещаются.
Сам я собственно тоже на д3д9 сразу делаю, потому что пишу шейдеры в формате эффектов, а эффектов в RM вроде нет - только вершинные и пиксельные отдельно, а всё остальное через интерфейс RM настраивается.
Если ты знаешь как функционал эффектов и настроек RM взаимозаменять то можно пользоваться инструментом в качестве исследования новых шейдеров и прочих экспериментов.
|
(Offline)
|
|
25.07.2014, 22:44
|
#710
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.08.2016, 20:04
|
#711
|
AnyKey`щик
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Xors3D
Привет! Есть проблемка с ксорсом (750 ревизия). Почему-то не работает transition в функции xAnimate. Код минимальный, модели простейшие, как и анимации, как не пробовал изворачиваться, анимация дергается, транзишн не пашет. Аналогичный код в Блитце работает на ура.
В сэмплах ксорса есть "forest" там моделька кузнеца. Запустив этот пример вижу, что транзишн работает! Меняю модельку на свою - транзишн не работает! Окей. Далее запускаю эту модельку кузнеца в Блитце, и блитц вообще не считывает из неё никакой анимации, никакие извращения с xExtractAnimSeq не помогают.
Из всего этого делаю вывод, что нормальный человеческий транзишн не работает, по крайней мере без танцев с бубном, и видимо нужно как-то по особому делать анимацию у моделек, чтобы оно работало, как у того кузнеца из сэмплов.
Кто-то встречался с таким? Есть идеи?
Опупеть я трупо*б! Возиться с ксорсом в 2016 это извращение, знаю, но есть причины.
|
(Offline)
|
|
25.08.2016, 02:37
|
#712
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D
Запаренть свою модель к пивоту и толкай уже пивот.
|
(Offline)
|
|
25.08.2016, 10:43
|
#713
|
AnyKey`щик
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Xors3D
Толкать - в смысле анимировать?
int piv = xCreatePivot();
int mesh = xLoadAnimMesh("mesh.b3d",piv);
xAnimate(piv,3,1,0,10);
|
Вроде того? Не работает
|
(Offline)
|
|
25.08.2016, 11:06
|
#714
|
Бывалый
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений (для 853 пользователей)
|
Ответ: Xors3D
ниет. Толкат это транслэйтить, двигать
Анимировать пивот бессмысленно. Если анимация рабочая, то все итак должно работать
__________________
Абсолютли!
|
(Offline)
|
|
25.08.2016, 11:26
|
#715
|
AnyKey`щик
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Xors3D
Сообщение от ant0N
Толкат это транслэйтить, двигать
Анимировать пивот бессмысленно. Если анимация рабочая, то все итак должно работать
|
Ну я так и подумал, что толкать тут бессмысленно, как и анимировать пивот. Проблема ведь не в толкании, а в анимации. И анимация рабочая, только ксорс не выполняет транзишн, то есть переход не плавный между анимациями. На блице всё работает, повторюсь. Ранее не один и не два раза пользовался этим на блице, всегда всё работало. Значит дело в ксорсе всё же.
|
(Offline)
|
|
25.08.2016, 17:37
|
#716
|
AnyKey`щик
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Xors3D
Решил проблему. Для будущих поколений, так сказать, опишу суть. Хотя, может, это я один такой дурак? Тогда не серчайте.
А суть в разных способах реализации транзишна у блитца и ксорса. Алсо, обнаружил, что и название параметра у них разное. В Блитце это именно "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
Всем peace!
UPD: гифки внутри!
Последний раз редактировалось Detmer, 25.08.2016 в 23:00.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Detmer за это полезное сообщение:
|
|
06.09.2016, 17:59
|
#717
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Xors3D
Есть кто живой?
Не могу нигде найти, как в xors3D дела обстоят с cubemap. Я уж думал я что-то не понимаю, переписал на блитц - работает, тот же самый код ни в какую не хочет на xors3d, объекты белые.
Какое тут нужно колдунство?
__________________
|
(Offline)
|
|
11.09.2016, 18:59
|
#718
|
Бывалый
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений (для 866 пользователей)
|
Ответ: Xors3D
Сообщение от Владислав
Есть кто живой?
Не могу нигде найти, как в xors3D дела обстоят с cubemap. Я уж думал я что-то не понимаю, переписал на блитц - работает, тот же самый код ни в какую не хочет на xors3d, объекты белые.
Какое тут нужно колдунство?
|
Используй шейдеры, с ними колдовать на много проще.
|
(Offline)
|
|
13.09.2016, 13:20
|
#719
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Xors3D
Да что-то у меня нет под рукой шейдера cubemap или же pccm для xors'a
UPD: cubemap шойдер нашел)
__________________
|
(Offline)
|
|
27.06.2022, 15:38
|
#720
|
AnyKey`щик
Регистрация: 08.08.2006
Сообщений: 3
Написано 0 полезных сообщений (для 0 пользователей)
|
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
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Xors3d wants YOU! |
.Squid |
Xors3D |
33 |
13.01.2013 23:34 |
Xors3D для D |
johnk |
Проекты C++ |
8 |
09.08.2009 14:18 |
Xors3D for .NET? |
johnk |
C++ |
7 |
06.08.2009 09:34 |
Xors3D |
ЛысыЙ_Чук-Иванчук |
Модули для BlitzMax |
145 |
18.06.2009 21:17 |
xors3d |
NitE |
3D-программирование |
9 |
02.04.2009 22:21 |
Часовой пояс GMT +4, время: 06:39.
|