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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 21.09.2005, 04:39   #1
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
1. Я долго думал, чем игры созданные на DerectX 9 отличаются от игр созданных на DerectX 7. Кто-то может ответить на этот вопрос, что в DerectX 9 лучше графика, но по моему графику делают в 3D приложениях и DerectX от этого не зависит. Ну короче говоря скажите чем они отличаются???

2.И правда ли, что если создавать код в блитз3Д функциями, он будет работать быстрее, чем простой без функцией???
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 05:32   #2
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
попробую ответить...

DirectX... на самом деле, чтоб запрограммировать элементарное отображение кубика на экране (3Д), нужно гораааздо больше писанины чем мы пишем на блице... DirectX это так называемый драйвер для отображения 2Д и 3Д на экране, для обслуживания игровых устройств и вывода звука. таким образом можно проследить такую последовательность прохода команд для отображения чегонить на экране: Блиц - DirectX - Драйвер видеокарты - видеокарта - монитор.

На счет того, чем 9-я версия лучше, чем 7-я я ответить не возьмусь, предположительно там какието ошибки исправили, появилась поддержка новых видеокарт (с новыми функциями), добавилось сервиса (набор команд)...

про Функции это тебе кто-то подлым образом наврал, код будет работать быстрей если его написать без функций, потому, что на машинном уровне функции долго обрабатываются процессором, намного дольше чем простой переход, но как сейчас заведено, все программируют с использованием функций и считают это хорошим тоном... программирование функциями пошло из-за появления ООП (объектно-ориентированного программирования), где без функций никак. В блице программировать функциями необязательно, но с наличием функций программа получается немного удобочитаемей, чем без них, ну и конечно есть такие моменты, когда без функций очень трудно обойтись, например рекурсия...


если ты имеешь ввиду использование системных функций по отношению к самонаписанным, то системные выигрывают (хотя и не всегда), потому, что наминаписанные функции неоптимизированы на уровне ассемблера.
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 08:51   #3
jimon
 
Сообщений: n/a
directx 7 и directx9 - ихние отличия можно сопоставить с отличиями windows 98 с windows xp ... а написать реально чем они отличаются - слишком долго и нудно

ps. программируемые конвееры, улутчены работа с буферами, расширение команд, несколько фич всяких там mapingов и тд
 
Ответить с цитированием
Старый 21.09.2005, 12:20   #4
KRIK
Бывалый
 
Регистрация: 19.09.2005
Сообщений: 649
Написано 3 полезных сообщений
(для 3 пользователей)
1.Ну я тоже так думал, что с функциями работать будет хуже,просто меня смутила 1 вещь - очень много народу программирует функциям,но теперь я понел почему. )

2.Ну я тоже понял приблезитнльную разницу.



СПАСИБО ЗА ОТВЕТЫ!
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 17:34   #5
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
"программируют функциями" - круто сказал!
Я все же советую тебе использовать функции:
1. как сказал SubZer0 - читать код проще будет, а значит и возможные ошибки легче найти при возникновении
2. код становится более универсальным, т.е. если у тебя есть части проги, которые делают одно и то же, то заново переписывать смысла особого нет, а тут вызвал функцию - и все
3. функциями как законченными кусками проги всегда можно поделиться с товарищами, а обычный кусок кода - совсем другая тема...

Не передумал? - Дело твое...
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 19:00   #6
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Хочу еще вот что сказать (хотя эту тему мы уже обсуждали):

Мне нравится когда люди говорят как хороши функции и как они полезны а сами творят следующее:

есть такой физический движок для Блица ODE... лежит тут, скачайте его, откройте архив... там в каталоге sample есть файл ode_tutorial_03_01.bb сожержимое файла позволю себе опубликовать:
;-----------------------------;
; BlitzODE ARKON Wrapper 0.5b;
; Tutorial 3         ;
;-----------------------------;

Const LENGTH# = 0.7 * 8
Const WIDTH# = 0.5 * 8
Const HEIGHT# = 0.2 * 8
Const RADIUS# = .16 * 8
Const STARTZ# = 5 + .5 * 8
Const CMASS# = 50
Const WMASS# = 10

Include "BlitzODE.bb"

;------ Initialize Graphics --------

Graphics3D 800, 600
SetBuffer BackBuffer()

SetFont LoadFont("Arial", 14, 1, 1, 0)

cam = CreateCamera()
PositionEntity cam, -10, 20, 0
lh = CreateLight()
PositionEntity lh, 100, 100, 100
RotateEntity lh, 90, 0, 0
LightColor lh, 100, 100, 100
AmbientLight 50, 50, 50

plane = CreatePlane()
;mirror = CreateMirror(plane)
EntityColor plane, 0, 0, 150
EntityAlpha plane, .8

SeedRnd MilliSecs()
;--------- Initialize ODE ----------

Global space = ODE_dWorldCreate(0)

;---- Setting contact parameters ---

ODE_dSetContactMode(dContactBounce)
ODE_dSetMU(40); Friction
;ODE_dWorldSetCFM(0.00001)
;-------- Create many box ---------

For i = 1 To 10
	g.TODEGeom = New TODEGeom
	g\body = ODE_dBodyCreate()
	g\geom = ODE_dCreateBox(space, 2, 2, 2, 10)
	ODE_dGeomSetBody g\geom, g\body
	ODE_dBodySetPosition(g\body, Rnd(-35, 35), Rnd(15, 25), Rnd(-35, 35))
	ODE_dBodySetRotation(g\body, Rand(-180, 180), Rand(-180, 180), Rand(-180, 180))
	
	g\mesh = CreateCube()
	EntityColor g\mesh, Rand(255), Rand(255), Rand(255)
	EntityShininess g\mesh, 0.7
Next

;------- Create many balls ---------

For i = 1 To 10
	g.TODEGeom = New TODEGeom
	g\body = ODE_dBodyCreate()
	g\geom = ODE_dCreateSphere(space, 1, 10)
	ODE_dGeomSetBody g\geom, g\body
	ODE_dBodySetPosition(g\body, Rnd(-35, 35), Rnd(15, 25), Rnd(-35, 35))
	ODE_dBodySetRotation(g\body, Rand(-180, 180), Rand(-180, 180), Rand(-180, 180))
	
	g\mesh = CreateSphere()
	EntityColor g\mesh, Rand(255), Rand(255), Rand(255)
	EntityShininess g\mesh, 0.7
Next

;------- Create fixed box ----------

geom = ODE_dCreateBox(space, 15, .1, 15, 10)
ODE_dGeomSetPosition(geom, 20, 2.5, 0)
ODE_dGeomSetRotation(geom, 0, 0, 20)
mesh = CreateCube()
PositionEntity mesh, 20, 2.5, 0
RotateEntity mesh, 0, 0, 20
ScaleMesh mesh, .5, .05, .5
ScaleEntity mesh, 15, 1, 15

;-----------------------------------

Function AddCCylinder()
	r# = Rnd(0.4, 2)
	h# = Rnd(r / 2.0, r / 2.0 + 2.5)
	cr = Rand(255)
	cg = Rand(255)
	cb = Rand(255)
	g.TODEGeom = New TODEGeom
	g\body = ODE_dBodyCreate()
	g\geom = ODE_dCreateCCylinder(space, r, h * 2, 1)
	ODE_dGeomSetBody(g\geom, g\body)
	g\mesh = CreatePivot()
	cl = CreateCylinder(8, 1, g\mesh)
	RotateEntity cl, 90, 0, 0
	EntityColor cl, cr, cg, cb
	ScaleEntity cl, r, h, r
	sh1 = CreateSphere(8, g\mesh)
	ScaleEntity sh1, r, r, r
	PositionEntity sh1, 0, 0, h
	EntityColor sh1, cr, cg, cb
	sh1 = CreateSphere(8, g\mesh)
	ScaleEntity sh1, r, r, r
	PositionEntity sh1, 0, 0, -h
	EntityColor sh1, cr, cg, cb
	px# = Rnd(-60, 60)
	py# = Rnd(15, 40)
	pz# = Rnd(-60, 60)
	ax# = Rnd(-180, 180)
	ay# = Rnd(-180, 180)
	az# = Rnd(-180, 180)
	ODE_dBodySetPosition(g\body, px#, py#, pz#)
	ODE_dBodySetRotation(g\body, ax#, ay#, az#)
	PositionEntity g\mesh, px#, py#, pz#
	RotateEntity g\mesh, ax#, ay#, az#
	gCount = gCount + 1
End Function

For i = 1 To 20
AddCCYlinder()
Next

Global cbody%[5], joint%[4], box%[1], sphere%[4]

;----------- Crete CAR -------------

;Car body
cbody[0] = ODE_dBodyCreate()
ODE_dBodySetPosition(cbody[0], 0, STARTZ, 0)
box[0] = ODE_dCreateBox(0, LENGTH, HEIGHT, WIDTH, CMASS)
ODE_dGeomSetBody(box[0], cbody[0])
g.TODEGeom = New TODEGeom
g\body = cbody[0]
g\geom = box[0]
g\mesh = CreateCube()
EntityColor g\mesh, 255, 255, 0
CAR = g\mesh
ScaleMesh g\mesh, .5, .5, .5
ScaleEntity g\mesh, LENGTH, HEIGHT, WIDTH
ODE_dBodySetMass(cbody[0], CMASS)
ODE_dBodyTranslateMass(cbody[0], 0, -1, 0)

;Car wheels
For i = 1 To 4
	cbody[i] = ODE_dBodyCreate()
	ODE_dBodySetRotation(cbody[i], 90, 0, 0)
	sphere[i - 1] = ODE_dCreateSphere(0, RADIUS, WMASS)
	ODE_dGeomSetBody(sphere[i - 1], cbody[i])
	g.TODEGeom = New TODEGeom
	g\body = cbody[i]
	g\geom = sphere[i - 1]
	g\mesh = CreateCylinder(16)
	ScaleEntity g\mesh, RADIUS, RADIUS * .2, RADIUS
	EntityColor g\mesh, 20, 0, 0
	ODE_dBodySetMass(cbody[i], WMASS)
Next

ODE_dBodySetPosition (cbody[1],0.5*LENGTH,-.5 + STARTZ-HEIGHT*0.5,WIDTH*0.5);
ODE_dBodySetPosition (cbody[2],0.5*LENGTH,-.5 + STARTZ-HEIGHT*0.5,-WIDTH*0.5);
ODE_dBodySetPosition (cbody[3],-0.5*LENGTH,-.5 + STARTZ-HEIGHT*0.5, WIDTH*0.5);
ODE_dBodySetPosition (cbody[4],-0.5*LENGTH,-.5 + STARTZ-HEIGHT*0.5,-WIDTH*0.5);

For i = 0 To 3
	joint[i] = ODE_dJointCreateHinge2()
	ODE_dJointAttach(joint[i], cbody[0], cbody[i + 1])
	ODE_dJointSetHinge2Anchor(joint[i], ODE_dBodyGetPositionX(cbody[i + 1]), ODE_dBodyGetPositionY(cbody[i + 1]), ODE_dBodyGetPositionZ(cbody[i + 1]))
  ODE_dJointSetHinge2Axis1 (joint[i],0,1,0)
  ODE_dJointSetHinge2Axis2 (joint[i],0,0,1)
Next

For i = 0 To 3
  ODE_dJointSetHinge2Param(joint[i], dParamSuspensionERP, .3)
  ODE_dJointSetHinge2Param(joint[i], dParamSuspensionCFM, .065)
Next

For i = 2 To 3
	ODE_dJointSetHinge2Param(joint[i],dParamLoStop,0)
	ODE_dJointSetHinge2Param(joint[i],dParamHiStop,0)
Next

ODE_dBodySetPosition cbody[0], 0, 5, 0

car_space% = ODE_dSimpleSpaceCreate(space)
ODE_dSpaceAdd(car_space, box[0])

For i = 1 To 4
	ODE_dSpaceAdd(car_space, sphere[i - 1])
Next

speed# = .1

CreateTriMesh()

;------------------------------------------


ODE_UpdateGeoms()

;-----------------------------------

gameFPS = 50.0
framePeriod = 1000 / gameFPS
frameTime = MilliSecs () - framePeriod

While Not KeyHit(1)
	Repeat
 frameElapsed = MilliSecs () - frameTime
	Until frameElapsed
	
	frameTicks = frameElapsed / framePeriod
	frameTween# = Float(frameElapsed Mod framePeriod) / Float(framePeriod)
	For frameLimit = 1 To frameTicks
 If frameLimit = frameTicks Then CaptureWorld
 frameTime = frameTime + framePeriod
 
	;------------ Add Force and Torque ----------

 If KeyHit(57)
 	For g.TODEGeom = Each TODEGeom
  ODE_dBodyEnable g\body
  ODE_dBodyAddForce g\body, 0, Rnd(20, 50), 0
  ODE_dBodyAddTorque g\body, Rnd(-10, 10), Rnd(-10, 10), Rnd(-10, 10)
 	Next
 EndIf


	;-------------- Update car physics ------------ 

 If KeyDown(200)
 	speed# = speed# + .1
 ElseIf KeyDown(208)
 	speed# = speed# - .1
 EndIf
 If Abs(speed) > .01
 	speed# = speed# * .95
 EndIf
	
 If KeyDown(203)
 	If steer# < .75 steer# = steer# + .05
 ElseIf KeyDown(205)
 	If steer# > -.75 steer# = steer# - .05
 Else
 	steer# = steer# * .95
 EndIf
	
 For i = 0 To 3
   ODE_dJointSetHinge2Param(joint[i],dParamVel2, speed# * 12)
   ODE_dJointSetHinge2Param(joint[i],dParamFMax2, 20.0)
 Next
	
   v# = steer# - ODE_dJointGetHinge2Angle1(joint[0])
   v = v * 11.0
   v1# = steer# - ODE_dJointGetHinge2Angle1(joint[1])
   v1 = v1 * 11.0
   ODE_dJointSetHinge2Param (joint[0],dParamVel,v)
   ODE_dJointSetHinge2Param (joint[0],dParamFMax, 50)
   ODE_dJointSetHinge2Param (joint[0],dParamLoStop,-0.75)
   ODE_dJointSetHinge2Param (joint[0],dParamHiStop,0.75)
   ODE_dJointSetHinge2Param (joint[1],dParamVel,v1)
   ODE_dJointSetHinge2Param (joint[1],dParamFMax, 50)
   ODE_dJointSetHinge2Param (joint[1],dParamLoStop,-0.75)
   ODE_dJointSetHinge2Param (joint[1],dParamHiStop,0.75)

 PointEntity cam, car

	;------------ Update physics world ---------- 

 tm = MilliSecs()
 ODE_dWorldQuickStep 0.1
 pTime = MilliSecs() - tm

	;---------- Fix car angular momuntum --------
 
 For i = 1 To 4
 	ax# = ODE_dBodyGetAngularVelX(cbody[i]) * .998
 	ay# = ODE_dBodyGetAngularVelY(cbody[i]) * .9
 	az# = ODE_dBodyGetAngularVelZ(cbody[i]) * .998
 	
 	ODE_dBodySetAngularVel(cbody[i], ax#, ay#, az#)
 Next
 ax# = ODE_dBodyGetAngularVelX(cbody[0]) * .7
 ay# = ODE_dBodyGetAngularVelY(cbody[0]) * .8
 az# = ODE_dBodyGetAngularVelZ(cbody[0]) * .7

 ODE_dBodySetAngularVel(cbody[0], ax#, ay#, az#)
	Next
	
;---- Set geometry position and rotation ----

	ODE_UpdateGeoms()

;--------------------------------------------

	RenderWorld frameTween#
	
; FPS counter
	fr = fr + 1
	If MilliSecs() - frTime >= 1000
 fps = fr
 fr = 0
 frTime = MilliSecs()
	EndIf
	
	Color 255, 255, 255
	Text 5, 5, "FPS " + fps
	Text 5, 20, "Physics time " + pTime
	Text 5, 580, "Space - Add Force and Torque"

	
	Flip 0
Wend

ODE_dCloseODE()
End

Function CreateTriMesh()
	mesh = LoadMesh("002.b3d")
	ScaleEntity mesh, 1, 1, 1

	TriMesh = ODE_dTriMeshCreate(mesh)
	
	tex = CreateTexture(32, 32, 8)
	SetBuffer TextureBuffer(tex)
	ClsColor 0, 0, 100
	Cls
	Color 255, 255, 0
	Rect 0, 0, 31, 31, 0
	Rect 1, 1, 29, 29, 0

	ScaleTexture tex, .025, .025
	EntityTexture mesh, tex

SetBuffer BackBuffer()
	
End Function
смотрим внимательно на код, здесь использование функции AddCCylinder было крайне нобходимо неправда-ли?

пойдем по всем пунктам указанным Жекой:

1. удобочитаемость от этого ну прямо жутко улучшилась...
2. эта функция больше НИГДЕ не вызывалась
3. эта функция является НЕПЕРЕНОСИМОЙ потому, что для каждого случая пришлось бы переписывать ее заново, поскольку она не принимает никаких параметров, т.е. эта функция очень узкоспециализирована (имеется ввиду размер, цвет, позиция и угол)...

я говорил вот про такие случаи...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 20:03   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Тяжелый случай...

От темы отошли... А раз так, то: я все тела функций пишу после команды End, т.е. после всего. В этом случае не приходится смотреть на те функции, которые не нужны при написании: понадобилась функция - нажал на ее имя в списке справа (в редакторе кода), они типа независимы получаются... и основной код не засоряют....
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 20:47   #8
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Смущение

Originally posted by SubZer0@Sep 21 2005, 03:32 AM
программа получается немного удобочитаемей, чем без них
естественно подразумевалось
программа получается намного удобочитаемей, чем без них
исправляю досадную опечатку
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 21.09.2005, 21:06   #9
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Originally posted by impersonalis+Sep 21 2005, 06:47 PM--><div class='quotetop'>ЦИТАТА(impersonalis @ Sep 21 2005, 06:47 PM)</div><div class='quotemain'>
Originally posted by SubZer0@Sep 21 2005, 03:32 AM
программа получается немного удобочитаемей, чем без них
естественно подразумевалось
программа получается намного удобочитаемей, чем без них
исправляю досадную опечатку [/b]


в свете вот этого:

<!--QuoteBegin-SubZer0
@Sep 21 2005, 05:00 PM
смотрим внимательно на код....., здесь использование функции было крайне нобходимо неправда-ли?

пойдем по всем пунктам..

1. удобочитаемость от этого ну прямо жутко улучшилась...
2. эта функция больше НИГДЕ не вызывалась
3. эта функция является НЕПЕРЕНОСИМОЙ потому, что для каждого случая пришлось бы переписывать ее заново, поскольку она не принимает никаких параметров, т.е. эта функция очень узкоспециализирована (имеется ввиду размер, цвет, позиция и угол)...
[/quote]

опечатка и правда досадная


ЗЫ извиняюсь перед xxxKRIKxxx, за ненужный спор в топике
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сильно отличается? d3zmAn Прочие вопросы 3 31.12.2009 21:26
пули и Physx 3ghost Blitz3D 7 28.08.2009 21:54
Полет пули Errant C++ 3 22.04.2007 22:22
Отличная Физика! moka Алгоритмика 3 25.08.2006 21:53
неполучаются привязки hunt 3D-программирование 13 16.07.2006 00:00


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


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