![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
При создании простенькой 3D игры, я наткнулся на проблемму со взаимодействием игрока с окружаещим миром. У меня вырисовывается комната, в которой стоит мебель нарисованная в 4D Cinema. Клавишами управления можно поворачивать камеру по оси X. По RND ставиться бутылочка на верхние плоскости от мебели. Так же я использую стандартный виндовозный курсор. Вот как можно определить - находиться ли бутылочка под курсором или нет?
|
|||
|
||||
Dubinsky |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Ну можно в Бэк буфере рисовать только то что можно выбрать причём всё разными цветами , а освещение настроить без теней (для бэк буфера), потом смотрим какого цвета пиксел в этом буфере (буфер не выводим на экран ) и зная цвет , знаем объект , однако мне такой способ не очень ...
по крайней мере я так делал в Опен ЖеЛе и Директе 3Д, смысл везде был похожий |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
Спасибо за идею, но это получается всё очень тормознуто! У меня очень много предметов.
|
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Как вариант - ray tracing... -------------------- С уважением, г-н Посол. |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
А как это сделать? Пожете подкинуть код? Буду очень благодарен! |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
В общем-то я это делал давным-давно
![]() -------------------- С уважением, г-н Посол. |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
Ничего подобного в DirectX я не нашел! Может быть плохо искал, не знаю!
Dubinsky Можешь подкинуть код своего примера (только для DirectX). Я посмотрю, что, да как... |
|||
|
||||
p0s0l |
|
||||||||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
![]() Немного повызывав gluPickMatrix, эспериментально определил формулы матрицы (они простые):
Как это использовать ? Например, было у тебя примерно так:
Теперь нужно определить, какой объект нарисованной сцены находится под курсором:
-------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
Попробовал вставить этот код в свой, и получилась такая херь: все моргает, в верхнем левом углу выводиться один пиксель, при перемещении мышки он изменяет цвет, если отвести курсор ниже 1/4 экрана, то этот пиксель всегда черный.
Пробовал вставить пол кода в инициализацию. Тогда перемещения курсора вообще не обрабатываются, но перестаёт моргать экран. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 2 Всего: 112 |
Моргает потому что выводишь нарисованный пиксел на экран. Не выводи его, рисуй просто в BackBuffer'е... Получай цвет пиксела, и рисуй опять же в бэкбуфере следующий нормальный кадр. Потом уже только делай флип (Present).
Добавлено @ 07:17 В инициализацию вставлять не надо -------------------- С уважением, г-н Посол. |
|||
|
||||
Div |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 3.6.2005 Где: Первоуральск Репутация: 1 Всего: 1 |
Сурфейс и разрешение одинаковые: 800x600x32 70Hz
Добавлено @ 16:46 Можете подкинуть полный код? Чего-то я понять не могу. ![]() |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |