Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 25.07.2014, 12:36   #706
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 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, нет разницы.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arton (25.07.2014)
Старый 25.07.2014, 18:00   #707
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,002
Написано 2,303 полезных сообщений
(для 5,337 пользователей)
Ответ: Xors3D

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

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

Я что-то нашёл, но оно громоздкое =/
(Offline)
 
Ответить с цитированием
Старый 25.07.2014, 18:38   #708
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Xors3D

хз, я как-то без дебаггера пишу, лог ошибок д3д хлсл компилера довольно исчерпывающий
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 25.07.2014, 22:39   #709
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 977
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Xors3D

Сообщение от Arton Посмотреть сообщение
Какой есть просто дебагер HLSL?
Есть Render Monkey - там шейдеры как раз до 3.0 включительно.
Однако имхо - он тебя еще больше запутает, т. к. нужно всё таки понимать как шейдеры с пайплайном д3д9 совмещаются.
Сам я собственно тоже на д3д9 сразу делаю, потому что пишу шейдеры в формате эффектов, а эффектов в RM вроде нет - только вершинные и пиксельные отдельно, а всё остальное через интерфейс RM настраивается.
Если ты знаешь как функционал эффектов и настроек RM взаимозаменять то можно пользоваться инструментом в качестве исследования новых шейдеров и прочих экспериментов.
(Offline)
 
Ответить с цитированием
Старый 25.07.2014, 22:44   #710
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: Xors3D

Я этим пользуюсь http://moka.ucoz.ru/load/5-1-0-110
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
mauNgerS (15.11.2014)
Старый 24.08.2016, 20:04   #711
Detmer
AnyKey`щик
 
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение
(для 2 участников)
Ответ: Xors3D

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

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

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

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

Опупеть я трупо*б! Возиться с ксорсом в 2016 это извращение, знаю, но есть причины.
(Offline)
 
Ответить с цитированием
Старый 25.08.2016, 02:37   #712
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 23.11.2011
Сообщений: 863
Написано 334 полезных сообщений
(для 866 пользователей)
Ответ: Xors3D

Запаренть свою модель к пивоту и толкай уже пивот.
(Offline)
 
Ответить с цитированием
Старый 25.08.2016, 10:43   #713
Detmer
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
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 849
Написано 331 полезных сообщений
(для 853 пользователей)
Ответ: Xors3D

Вроде того? Не работает
ниет. Толкат это транслэйтить, двигать
Анимировать пивот бессмысленно. Если анимация рабочая, то все итак должно работать
__________________
Абсолютли!
(Offline)
 
Ответить с цитированием
Старый 25.08.2016, 11:26   #715
Detmer
AnyKey`щик
 
Регистрация: 22.08.2016
Сообщений: 5
Написано одно полезное сообщение
(для 2 участников)
Ответ: Xors3D

Сообщение от ant0N Посмотреть сообщение
Толкат это транслэйтить, двигать
Анимировать пивот бессмысленно. Если анимация рабочая, то все итак должно работать
Ну я так и подумал, что толкать тут бессмысленно, как и анимировать пивот. Проблема ведь не в толкании, а в анимации. И анимация рабочая, только ксорс не выполняет транзишн, то есть переход не плавный между анимациями. На блице всё работает, повторюсь. Ранее не один и не два раза пользовался этим на блице, всегда всё работало. Значит дело в ксорсе всё же.
(Offline)
 
Ответить с цитированием
Старый 25.08.2016, 17:37   #716
Detmer
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 за это полезное сообщение:
impersonalis (25.08.2016), St_AnGer (25.08.2016)
Старый 06.09.2016, 17:59   #717
Владислав
ПроЭктировщик
 
Аватар для Владислав
 
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений
(для 219 пользователей)
Ответ: Xors3D

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

(Offline)
 
Ответить с цитированием
Старый 11.09.2016, 18:59   #718
tirarex
Бывалый
 
Аватар для tirarex
 
Регистрация: 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
antarman
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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 22:39.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com