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

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

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

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

Ответ
 
Опции темы
Старый 14.06.2011, 14:13   #1
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Сообщение Несколько вопросов

Здравствуйте еще раз, форумчане. Буду вам признателен, если вы ответите мне на возникшие вопросы.

1) В функции AnimateMD2 третий параметр - скорость анимации. Как я понимаю, число кадров в секунду будет равно скорости, умноженной на 25?

2) Это из 2D-мира. Функция MouseXSpeed() в следующем коде:
Repeat

Print MouseXSpeed()
Print MouseXSpeed()
WaitKey()

Until KeyHit(1)
возвращает вначале n-е число, а после 0. Почему? И в чем выражается эта скорость? В пикселях?

3) Третий вопрос. Чему равна единица пространства? Она не совпадает с величиной, указанной в редакторе или же совпадает?

4) Вопрос касается буферизации. Вот код:
Graphics3D 400, 200

If GraphicsBuffer()=BackBuffer() Then
	Print "YES"
	WaitKey()
EndIf

camera=CreateCamera()

cube=CreateCube()
PositionEntity cube, 0, 0, 5

RenderWorld

WaitKey()
Пишет "YES" и ждет клавиши. Ничего не происходит. Снова жмешь клавишу, и программа отключается. Все логично: Graphics3D ставит в текущий буфер задний буфер, а текст автоматически выводится в передний буфер. Однако вот такой код:
Graphics3D 400, 200

camera=CreateCamera()

cube=CreateCube()
PositionEntity cube, 0, 0, 5

RenderWorld

WaitKey()
рисует мне куб! Но как так! RenderWorld-то по идее рендерит задний буфер! А Flip-ом тут и не пахнет. В чем дело?

5) Пожалуйста, поправьте меня, если я что-то не так скажу. Ширина и высота камеры устанавливаются равными ширине и высоте графического режима. Координаты камеры - это точка, в которой находится ее центр. Ортографическая проекция рендерится быстрее, чем перспективная.

Прошу прощения за большое количество вопросов.
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 14:37   #2
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Несколько вопросов

возвращает вначале n-е число, а после 0. Почему? И в чем выражается эта скорость? В пикселях?
скорость -1.0-0.0-1.0 хз в чем,чем быстрей двигаешь мышь-тем быстрей скорость,но не как не больше/меньше 1/-1
1) В функции AnimateMD2 третий параметр - скорость анимации. Как я понимаю, число кадров в секунду будет равно скорости, умноженной на 25?
да,если в максе за 1 секу делать 25 кадров-так же и в блитзе будет(не используй md2)
3) Третий вопрос. Чему равна единица пространства? Она не совпадает с величиной, указанной в редакторе или же совпадает?
ммм.вроде совпадает,я делаю меши-совпадает..
рисует мне куб! Но как так! RenderWorld-то по идее рендерит задний буфер! А Flip-ом тут и не пахнет. В чем дело?
ммм,косяк...не рендрится,И НЕ БУДЕТ....flip а нет..
мммм.НЕ МОЖЕТ ТАК БЫТЬ:народ,объясните МНЕ как такое может быть....с первого раза рендера не было,стоит раз буфер инициализировать(фронтальный) так всегда потом рендер--хоть закрой прогу,хоть нет:Нажмите на изображение для увеличения
Название: опа.png
Просмотров: 888
Размер:	19.1 Кб
ID:	14060
Ширина и высота камеры устанавливаются равными ширине и высоте графического режима.
камера-точка с которой рендер,она указывает пропорции изображения для рендра на экран,чем меньше камера-тем БОЛЬШЕ изображение(обьекты...) КООРДИНАТЫ камеры=координаты точки начала просчета рендра
---кто лучше знает,объясните.....
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (14.06.2011)
Старый 14.06.2011, 14:49   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Несколько вопросов

Сообщение от Hagrael Посмотреть сообщение

2) Это из 2D-мира. Функция MouseXSpeed() в следующем коде:
Repeat

Print MouseXSpeed()
Print MouseXSpeed()
WaitKey()

Until KeyHit(1)
возвращает вначале n-е число, а после 0. Почему?
Вторая скорость - скорость мыши между двумя вызывами функции. А на вряд ли ты успеешь подвигать мышь за время менее 1 мс.
V=(x2-x1)/t
(x2-x1)->0 => V->0

ps: http://forum.boolean.name/forumdisplay.php?f=37
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (14.06.2011)
Старый 14.06.2011, 14:52   #4
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Несколько вопросов

Вторая скорость - скорость мыши между двумя вызывами функции. А на вряд ли ты успеешь подвигать мышь за время менее 1 мс.
V=(x2-x1)/t
(x2-x1)->0 => V->0
нум можно если захотеть...
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 15:35   #5
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Несколько вопросов

Спасибо, Костян.

Так значит x1 устанавливается равным x2 после выполнения функции. Ну а если ты вызвал функцию в первый раз? Или подождав очень долгое время в третий раз? Тогда откуда берется x1? Я так понимаю, что скорость мыши - это количество пикселей, на которое она успела сместиться за секунду. Так что наверное хранится 1000 x-ов мыши, которые были за 0, 1, 2, 3, ... 999, 1000 мс ранее. По прохождению еще одной мс, добавляется новая координата, а самая последняя удаляется. Когда же вызывается функция MouseXSpeed, то все все координаты стираются, и в конец (0 мс) добавляется текущая координата. Действительно все делается так?

Касатально 4-го вопроса, связанного с буферизацией. Вот такой код:
Graphics3D 400, 200

camera=CreateCamera()

cube=CreateCube()
PositionEntity cube, 0, 0, 5

RenderWorld ; Flip

WaitKey()

End
что с Flip-ом, что без выдаст тебе куб. Вот в этом заключается часть магии. Оставшаяся часть магии в том, что при таком коде:
Graphics3D 400, 200

camera=CreateCamera()

cube=CreateCube()
PositionEntity cube, 0, 0, 5

Print 1

RenderWorld

WaitKey()
цифра после рендеринга исчазает (ее ты и не успеваешь увидеть). А вот при таком коде:
Graphics3D 400, 200

camera=CreateCamera()

cube=CreateCube()
PositionEntity cube, 0, 0, 5

If GraphicsBuffer()=BackBuffer() Then
	Print 1
	WaitKey()
EndIf

RenderWorld

WaitKey()
цифра не исчезает! После однократного нажатия ничего не происходит, а после двукратного программа завершается. Волшебство!
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 15:43   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Несколько вопросов

Используй SetBuffer()

Отрисовка 2D (текста и т.п.), вызывай после RenderWorld и перед Flip'ом.
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 15:48   #7
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Несколько вопросов

Выяснил, что эта B3D-единица зависит от ширины приложения и никак не зависит от его высоты. Видно, находится она по какой-то формуле. Родился новые вопрос:

Как узнать размеры объекта в единицах B3D и пикселях?
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 16:04   #8
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Несколько вопросов

И еще один:

Как сделать так, чтобы текстура не повторялась?
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 16:04   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Несколько вопросов

Это 3D. Он ни как не соотносится к пикселям.
Используя матрицы проекции (камеры), идёт преобразование 3D в 2D - на экран.
От разрешения это не зависит.
Нету соотношения. Можно вычислить размер объекта на экране но это математика и работа с матрицами.

Зачем вообще задаёшься подобным? Что хочешь реализовать? Клик по объекту? Для этого есть CameraPick.
Читай документацию, там много есть полезного..
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 16:25   #10
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Несколько вопросов

Чем больше я делаю ширину, посылаемую оператору Graphics, тем больше становится куб. А вот высота куба всегда одинаковая.

А в справке не написано ничего про размеры объектов.
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 18:13   #11
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Несколько вопросов

Не уже ли никто не задавался подобными вопросами?
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 18:23   #12
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Несколько вопросов

Сообщение от Hagrael Посмотреть сообщение
Спасибо, Костян.

Так значит x1 устанавливается равным x2 после выполнения функции. Ну а если ты вызвал функцию в первый раз? Или подождав очень долгое время в третий раз? Тогда откуда берется x1? Я так понимаю, что скорость мыши - это количество пикселей, на которое она успела сместиться за секунду. Так что наверное хранится 1000 x-ов мыши, которые были за 0, 1, 2, 3, ... 999, 1000 мс ранее. По прохождению еще одной мс, добавляется новая координата, а самая последняя удаляется. Когда же вызывается функция MouseXSpeed, то все все координаты стираются, и в конец (0 мс) добавляется текущая координата. Действительно все делается так?
Пфффф... Скорость - 1ая производная координаты по времени. Сколько нам надо хранить координат чтобы (зная текущее состояние точки) рассчитать мгновенную сокрость? - ОДНУ.
Если ты не знал, есть ещё MouseXSpeed,MouseZSpeed

А вообще, в блитце (смотрим хелп) эти комнады возвращают не скорость, а расстояние*, пройденное курсором с момента последнего вызова.
Global mouse1%=MouseX()
MouseXSpeed()
Global mouse2%
Global ErrMax%=0
While Not KeyHit(1)
	mouse2=MouseX()
	Local v%=(mouse2-mouse1)
	Local v2%=MouseXSpeed()
	mouse1=mouse2
	If Abs(v-v2)>ErrMax
		ErrMax=Abs(v-v2)
	EndIf
	AppTitle Int(v)+" "+v2+"  er="+ErrMax
Wend
End
*- учитывая что система дискретная, и предполагая её истинную реалтаймовость (вызов функции в строго фискированное время вне зависимости от общей загруженности системы) можно сказать, что это и есть скорость: т.к. делить на 1 сек** (шаг дискретизации), тоже что и не делить.

**- секунда выбрана, как единица времени по системе СИ; шаг дискретизации подбирается программистом исходя из нужд.

***- в общем случае, аппроксимация скорости не всегда может носить такой тривальный характер (на основе определения производной).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо impersonalis за это полезное сообщение:
Hagrael (14.06.2011), SBJoker (15.06.2011)
Старый 14.06.2011, 21:13   #13
Dzirt
Элита
 
Аватар для Dzirt
 
Регистрация: 16.01.2008
Сообщений: 1,800
Написано 958 полезных сообщений
(для 3,833 пользователей)
Ответ: Несколько вопросов

Имп, ему 15....ты рознесёшь ему мозг.
(Offline)
 
Ответить с цитированием
Старый 14.06.2011, 21:37   #14
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Несколько вопросов

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

Сообщение от Hagrael Посмотреть сообщение
Хм, и правда, нам ведь нужна скорость мыши именно в данный момент времени. Но за исключением этой вещи я все сказал правильно - когда вызывается функция MouseXSpeed, то меняется x1. Но непонятно, зачем это сделано.
меняется и x1, и x2.
	mouse2=MouseX()
	Local v%=(mouse2-mouse1)
	Local v2%=MouseXSpeed()
	mouse1=mouse2
Касаемо буферизации: см. замечание MoKи (тут) + почитай про CameraClsMode camera,cls_color,cls_zbuffer
Graphics3D 400, 200,32,2

camera=CreateCamera()
CameraClsMode camera,False,True

cube=CreateCube()
PositionEntity cube, 0, 0, 5

Print 1

RenderWorld

WaitKey()
И всё* работает!

*-если не будет закрыто растром, представляющим проекцию трёхмерной сцены

Чем больше я делаю ширину, посылаемую оператору Graphics, тем больше становится куб. А вот высота куба всегда одинаковая.
ничего не ясно
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Hagrael (15.06.2011)
Ответ


Опции темы

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

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


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


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