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

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

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

Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново...

Ответ
 
Опции темы
Старый 07.03.2011, 22:55   #1
Coks
Знающий
 
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений
(для 312 пользователей)
Улучшенная функция тримеша

Теперь тримешь без проблем строится из многосюрфейсных мешей:
Function BodyCreateMesh(mesh%, mass# = 0)
           nsurf = CountSurfaces(mesh)
	nvert = 0
	nface=0
	For ns = 1 To nsurf
		Local surf = GetSurface(mesh,ns)
		nface = nface+CountTriangles(surf)
		nvert = nvert +CountVertices(surf)
	Next

	fbank = CreateBank(nface*4*3)
	nf = 0
	vbank = CreateBank(nvert*4*3)
	nv = 0
	pnvv = 0
	For ns = 1 To nsurf
		surf = GetSurface(mesh,ns)
		nfv = CountTriangles(surf)
		For nfc = 0 To nfv -1
			PokeInt fbank,nf*12+0,TriangleVertex(surf,nfc,0)+pnvv+ns-1
			PokeInt fbank,nf*12+4,TriangleVertex(surf,nfc,1)+pnvv+ns-1
			PokeInt fbank,nf*12+8,TriangleVertex(surf,nfc,2)+pnvv+ns-1
			nf=nf+1
		Next

		nvv = CountVertices(surf)
		For nvc = 0 To nvv - 1
			PokeFloat vbank,nv*12+0,VertexX(surf,nvc)
			PokeFloat vbank,nv*12+4,VertexY(surf,nvc)
			PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)
			nv = nv+1
		Next
		pnvv=pnvv+nvv-1
	Next
	bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,mass)
	FreeBank vbank
	FreeBank fbank
	Return bbb%
End Function

Последний раз редактировалось Coks, 08.03.2011 в 00:53.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Coks за это полезное сообщение:
ARA (07.03.2011), burovalex (08.04.2012), H@NON (10.03.2011)
Старый 11.03.2011, 18:45   #2
DeeJex
Разработчик
 
Аватар для DeeJex
 
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений
(для 329 пользователей)
Ответ: Улучшенная функция тримеша

БЕЗНОГNМ
Function BodyCreateMesh(mesh, mass# = 0)
           nsurf = CountSurfaces(mesh)
	nvert = 0
	nface=0
	For ns = 1 To nsurf
		Local surf = GetSurface(mesh,ns)
		nface = nface+CountTriangles(surf)
		nvert = nvert +CountVertices(surf)
	Next

	fbank = CreateBank(nface*4*3)
	nf = 0
	vbank = CreateBank(nvert*4*3)
	nv = 0
	pnvv = 0
	For ns = 1 To nsurf
		surf = GetSurface(mesh,ns)
		nfv = CountTriangles(surf)
		For nfc = 0 To nfv -1
			PokeInt fbank,nf*12+0,TriangleVertex(surf,nfc,0)+pnvv+ns-1
			PokeInt fbank,nf*12+4,TriangleVertex(surf,nfc,1)+pnvv+ns-1
			PokeInt fbank,nf*12+8,TriangleVertex(surf,nfc,2)+pnvv+ns-1
			nf=nf+1
		Next

		nvv = CountVertices(surf)
		For nvc = 0 To nvv - 1
			PokeFloat vbank,nv*12+0,VertexX(surf,nvc)*EntityScaleX(mesh)
			PokeFloat vbank,nv*12+4,VertexY(surf,nvc)*EntityScaleY(mesh)
			PokeFloat vbank,nv*12+8,VertexZ(surf,nvc)*EntityScaleZ(mesh)
			nv = nv+1
		Next
		pnvv=pnvv+nvv-1
	Next
	bbb%=pxCreateTriMesh(vbank, fbank, nvert, nface,mass)
	FreeBank vbank
	FreeBank fbank
	Return bbb%
End Function

Function EntityScaleX#(ent%)  
    row=0 
    el1# = GetMatElement(ent,row,0)  
    el2# = GetMatElement(ent,row,1)  
    el3# = GetMatElement(ent,row,2)  
    Return Sqr(el1*el1+el2*el2+el3*el3)  
End Function 
Function EntityScaleY#(ent%)  
    row=1 
    el1# = GetMatElement(ent,row,0)  
    el2# = GetMatElement(ent,row,1)  
    el3# = GetMatElement(ent,row,2)  
    Return Sqr(el1*el1+el2*el2+el3*el3)  
End Function
Function EntityScaleZ#(ent%)
    row=2 
    el1# = GetMatElement(ent,row,0)  
    el2# = GetMatElement(ent,row,1)  
    el3# = GetMatElement(ent,row,2)  
    Return Sqr(el1*el1+el2*el2+el3*el3)  
End Function
Hint: убирает потребность в ResetXForm и проблемы с масштабами.
__________________
299 792 458
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Coks (11.03.2011)
Старый 11.03.2011, 18:56   #3
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Улучшенная функция тримеша

Сообщение от DeeJex Посмотреть сообщение
БЕЗНОГNМ
...
Hint: убирает потребность в ResetXForm и проблемы с масштабами.
Опередил же!
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 13.03.2011, 17:00   #4
Colossus
Разработчик
 
Аватар для Colossus
 
Регистрация: 12.10.2008
Адрес: Самара
Сообщений: 437
Написано 55 полезных сообщений
(для 92 пользователей)
Ответ: Улучшенная функция тримеша

а в чем разница?
__________________
Пекарня: Intel Core i3 - 3240(3.40Ghz), ram 8 gb, video Gigabyte Nvidia GeForce GTX 650 1gb

Лэптоп : Intel Core i3 - 2365(1.40Ghz), ram 4gb, video Int Intel HD3000(512mb)

Мой набор: 3ds Max 9 + Xors3d(Blitz3d) + Photoshop
(Offline)
 
Ответить с цитированием
Старый 13.03.2011, 17:59   #5
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,354
Написано 2,470 полезных сообщений
(для 6,850 пользователей)
Ответ: Улучшенная функция тримеша

Сообщение от Colossus Посмотреть сообщение
а в чем разница?
Вариант от DeeJex`а принимает во внимание ScaleEntity при создании тримеша.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 17.04.2011, 16:25   #6
Coks
Знающий
 
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений
(для 312 пользователей)
Ответ: Улучшенная функция тримеша

Сообщение от DeeJex Посмотреть сообщение
Hint: убирает потребность в ResetXForm и проблемы с масштабами.
С ResetXForm это не может помочь!
А для изменения масштаба лучше использовать функцию ScaleMesh, в противном случае могут вылезти другие неприятные глюки.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ARA (17.04.2011)
Старый 17.04.2011, 21:22   #7
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Улучшенная функция тримеша

а если ентитю покрутят или переместят? все ваши танцы с отдельными элементами матрицы трансформации станут ненужными. была же кажется функция переводящая вектор из системы ентити в систему мира? както ТФорм кажется...
(Offline)
 
Ответить с цитированием
Старый 17.04.2011, 22:45   #8
Coks
Знающий
 
Регистрация: 29.05.2007
Сообщений: 227
Написано 126 полезных сообщений
(для 312 пользователей)
Ответ: Улучшенная функция тримеша

Так а смысл вращать/перемещать объект, если из него собираешься делать тримешь. Сначала сделай физ. тело, а потом его уже ориентируй как тебе надо.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Coks за это полезное сообщение:
burovalex (08.04.2012), Colossus (29.09.2011)
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


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