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

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

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 23.12.2007, 00:07   #1
dector
Модератор
 
Регистрация: 21.12.2006
Сообщений: 564
Написано 79 полезных сообщений
(для 203 пользователей)
Сообщение 3D в 2D

Это не регрессия...

Просто есть точка с координатами (x;y;z) надо ее нарисовать на экране(он ясное дело 2д). как это сделать чтобы эти координаты были проэкцией точки на плоскость.
(Offline)
 
Ответить с цитированием
Старый 23.12.2007, 00:23   #2
dector
Модератор
 
Регистрация: 21.12.2006
Сообщений: 564
Написано 79 полезных сообщений
(для 203 пользователей)
Re: 3D в 2D

а тперь вопрос посложнее: как применить это с учетом позиции камеры?
(Offline)
 
Ответить с цитированием
Старый 23.12.2007, 00:42   #3
Horror
Бывалый
 
Регистрация: 09.09.2006
Сообщений: 656
Написано 54 полезных сообщений
(для 110 пользователей)
Re: 3D в 2D

А ты в Блитце делаешь ?
если да то там есть свои фичи типо каманд
CameraProject
ProjectedX()
ProjectedY()
(Offline)
 
Ответить с цитированием
Старый 23.12.2007, 00:58   #4
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: 3D в 2D

Вот тут объясняется, как применяются модельные и видовые преобразования
http://fly.cc.fer.hr/~unreal/theredbook/chapter03.html
А тут просто матрицы проекций.
http://fly.cc.fer.hr/~unreal/theredbook/appendixg.html
(Offline)
 
Ответить с цитированием
Старый 23.12.2007, 01:03   #5
dector
Модератор
 
Регистрация: 21.12.2006
Сообщений: 564
Написано 79 полезных сообщений
(для 203 пользователей)
Re: 3D в 2D

А если математикой - отнимаем от координат обьекта координаты камеры. Если с поворотами - то там еще чуток тригонометрии
ты меня тригонометрией не пугай Я ее и на уравнениях и на неровностях побеждаю
и пиши смысловые сообщения, а не чтобы показатся умным
(Offline)
 
Ответить с цитированием
Старый 23.12.2007, 02:11   #6
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: 3D в 2D

Думаю поймешь из исходника, переписывать алгоритм лень
;Разрешение
ScreenWidth = 800
ScreenHeight = 600

;Центр экрана
CenterX = ScreenWidth Shr 1
CenterY = ScreenHeight Shr 1

;Инициализация графики
Graphics3D(ScreenWidth, ScreenHeight, 32, 2)
SetBuffer(BackBuffer())

;Камера
Camera = CreateCamera()

;Принудительная установка угла фокуса камеры необходима чтобы проекция
;была корректной т.к. узнать его с помощью средств Блица невозможно
Zoom# = 1.2
CameraZoom(Camera, Zoom)

;Проекцируемый объект
Cube = CreateCube()

;Удаление объекта от камеры
Mz = 10
Repeat
	
	;Вращаем и двигаем камеру чтобы убедиться в корректности проекции
	TurnEntity(Camera, 0.5, 1.2, -2.1)
	MoveEntity(Camera, 1.5, 0.05, 0.4)
	
	;Получаем экранные координаты
	Mx = MouseX()
	My = MouseY()
	;Изменяем координату "удаленности" объекта от камеры
	Mz = Mz + MouseZSpeed()
	
	;############################################
	;Проецируем экранные координаты в мировые
	Px# = (Mx - CenterX) * Mz / Zoom / CenterX
	Py# = (My - CenterY) * Mz / -Zoom / CenterX
	;Умножаем координаты (вектор) на матрицу трансформации камеры
	Wx# = GetMatElement(Camera, 0, 0) * Px + GetMatElement(Camera, 1, 0) * Py + GetMatElement(Camera, 2, 0) * Mz + GetMatElement(Camera, 3, 0)
	Wy# = GetMatElement(Camera, 0, 1) * Px + GetMatElement(Camera, 1, 1) * Py + GetMatElement(Camera, 2, 1) * Mz + GetMatElement(Camera, 3, 1)
	Wz# = GetMatElement(Camera, 0, 2) * Px + GetMatElement(Camera, 1, 2) * Py + GetMatElement(Camera, 2, 2) * Mz + GetMatElement(Camera, 3, 2)
	;Позиционируем объект по полученым координатам
	PositionEntity(Cube, Wx, Wy, Wz)
	;Поворачиваем объект по углам поворота камеры чтобы убрать влияние ориентации камеры
	RotateEntity(Cube, EntityPitch(Camera), EntityYaw(Camera), EntityRoll(Camera))
	;############################################
	
	RenderWorld()
	Flip()
Until KeyDown(1)
End
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SBJoker (29.11.2010)
Старый 23.12.2007, 16:20   #7
dector
Модератор
 
Регистрация: 21.12.2006
Сообщений: 564
Написано 79 полезных сообщений
(для 203 пользователей)
Re: 3D в 2D

Cyan
попробую. спасибо..
(Offline)
 
Ответить с цитированием
Старый 24.12.2007, 02:18   #8
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: 3D в 2D

CenterX = ScreenWidth Shr 1
CenterY = ScreenHeight Shr 1
маньяк!
(Offline)
 
Ответить с цитированием
Старый 24.12.2007, 02:28   #9
dector
Модератор
 
Регистрация: 21.12.2006
Сообщений: 564
Написано 79 полезных сообщений
(для 203 пользователей)
Re: 3D в 2D

А что такое?

Эта функция производит двоичный сдвиг числа вправо указанное количество раз. Это более быстрый метод деления числа экспоненциально. Одним сдвигом вправо вы делите число на 2. Двумя сдвигами вы делите число на 4 и т.д.

Полезность этой команды заключается в более быстром математическом выполнении расчетов.


Он видимо просто код копирнул... Но я еще не пробовал. Завтра заценю.

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 200 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
(Offline)
 
Ответить с цитированием
Старый 24.12.2007, 02:33   #10
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: 3D в 2D

dector, козе понятно , что ето деление на два целочисленного числа.
другое дело - зачем?
ну съекономит он пару тактов на ОДИН запуск программы.
(Offline)
 
Ответить с цитированием
Старый 24.12.2007, 02:39   #11
dector
Модератор
 
Регистрация: 21.12.2006
Сообщений: 564
Написано 79 полезных сообщений
(для 203 пользователей)
Re: 3D в 2D

Ну в принципе согласен. Не спорю.
ПРосто для таких как я выдержку из хелпа привел). Думаю если кто заглянет - чтобы не спрашивали что это такое.

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 200 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
(Offline)
 
Ответить с цитированием
Старый 24.12.2007, 12:53   #12
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: 3D в 2D


Сообщение от HolyDel
другое дело - зачем?
Привычка. Причем весьма полезная
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Reizel (02.01.2010)
Ответ


Опции темы

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

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


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


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