Как это сдлеать? итд итп
Rey - 2014-02-09 02:30:40
Собсно прошу помощи в понятии пары моментов по теме DirectX.
1) Как создать 2 разных обьекта (куб и сферу или пирамиду) и управлять ими? Как создать 1 обьект и управлять им я знаю но вот как 2 разных незнаю. Толи для каждого создавать свой буфер вершин, свой шейдер, свои матрицы, итд или както добовлять в существующий и делать отступ от первого. Желательно получить исходник. Но если слишком сложно то хотябы словами последовательности действий.
2) Как устанавливаются системы времени/метрики в приложении. Допустим я постоянно перемещаю обьект1 по оси х на 1ед. Но с какой скоростью это будет я понятия не имею. Вобщем есть снаряд - я хочу чтобы он летел 2 метра в секунду. Нужно нормальное время и нормальные метры. Где их взять и как их сделать?)
Answers:
3) Изначально мышка двигается по 2д координатам экрана. Как сделать так, что если 3д ланшафт изменяется(вертится / меняет углы) то мышкой выбералась бы именно та точка ланшафта на которую мы наводим. Дожна быть какаето проекция от укозателя мыши к ланшафту или чтото такое... Может какаето функция DirectImput.
2014-02-10 11:23:30
rshatalov
1. в старой версии сайта есть серия уроков по этой теме - создание камеры. Часть кода можно использовать в твоём случае.
2. Всё относительно. Подбирай, экспериментируй.
3. Нет такой функции. Да, должна быть проекция. На старом сайте есть урок. Там можно посмотреть часть решения.
на счет второго я так и непонял) Ну есть у нас в цикле функция рисующая кадры, Но ее скорость выполнения думаю не особо контролируема. Следовательно каждый кадр снаряд летит на 1 единицу -> за 100 кадров 100 единиц -> С какой скоростью я это увижу? Я понимаю что по логике с колвом кадров в секунду т. е. 60 кадров - 60 единиц в секунду. Но кадровка в секунду может менятся и будет по разным причинам это в свою очередь приведет к тормозам расчетов и отоброжения. Следовательно расчеты нужно проводить отдельно от отрисовки и прокадровки. Тогда единственый источник скорости кадры в секунду отпадает и мы остаемся с формулой движения без источника времени->скорости.Может я совсем дурак но я вижу это именно так. Не может выпущеная ракета физически остановится потомучто фпс залагал. Да она может на экране зависнуть из за лагов на пару секунд но она всеравно попадет туда куда должна была попасть вовремя. Короче чегото я незнаю или непонимаю (думаю это глупо состороны но оно так и есть =)
Видимо мне както нада понять правильную архетектуру взаимодействия расчетов/времени/отрисовки где и как это правильно должно происходить...Пичаль короче...
смотрю вот уроки про камеру действительно вродебы то что нужно) Блин програмка шедевр жаль что на 9 х Потомучто следуя советам я начал сразу 11 изучать хотя думаю разобраться можно. Единственное что когда вращаеш камеру какието линии вылазят постоянно на весь экран. Что то подобное я делал на глуте опенжля именно там я познавал примудрости трансформаций итд итп. Но там моих умений/знаний хватало только на ортографическую проэкцию. Посути там создаються аналоги функций дх 11 XMMatrixRotationRollPitchYaw для вычисления матрицы поворота камеры вокруг вектора. и XMMatrixLookAtLH для создания камеры - матрицы вида? Блин это одна из важнейших тем - создание камер любых видов(в т.ч free look camera) и понимаение их принципа действия. Хочу урок на 11 хксе =)
на счет третего вопроса какой именно урок на старом сайте про проэкцию мышки? Блин эта тема меня мучает довольно давно непонимаю почему не сделали такую функцию аля Z кордината мыши.
И если не очень сложно, то можно ли както сотворить редактирование коментов или хотябы их удаление как вариант.
2014-02-11 12:05:15
rshatalov
> Я понимаю что по логике с колвом кадров в секунду т. е. 60 кадров - 60 единиц в секунду. Но кадровка в секунду может менятся и будет по разным причинам это в свою очередь приведет к тормозам расчетов и отоброжения. Следовательно расчеты нужно проводить отдельно от отрисовки и прокадровки.
Сделай два потока. В одном расчёт местоположения, в другом отрисовка объектов в текущем состоянии.
> без источника времени->скорости
Для контроля времени используй таймеры (на старом сайте тоже был урок).
> Единственное что когда вращаеш камеру какието линии вылазят постоянно на весь экран.
В программе не реализовано отсечение (clipping) - нужно было сделать проще. А по отсчечению урока так и не написал. Для dx9 уже и смысла нет.
3. http://old.shatalov.su/ru/articles/directx9_primer/object_picking.php
Главное, понять принцип.
> И если не очень сложно, то можно ли както сотворить редактирование коментов или хотябы их удаление как вариант.
Пока сложно. В будущем будет, а сейчас есть задачи поважнее.
3.Странно почемуто этого урока я не видел... А на счет многопоточной архетектуры рановато для меня наверно.Очень немногое про это знаю(хотя понимаю что это очень класная штука когда доходит до производительности), как только начинаеш чтото в голове строить милион вопросов сразуже(взаимодействие / приорететы / функциональность / рациональность итд итп).
Кстати вот недавно возник вопросец по 3д преобразованиям/шейдерам/потокам : увидил я както что 1 человек в шейдеры отправляет уже готовую(перемноженую) матрицу пробразования мир*камера*проэкция. Так вот тут я задумался есть ли в этом причина. Толи тем самым он разгружает шейдер для более быстрой его работы->нагружая тем самым кпу->тогда где вычисляются шейдеры в гпу? Если так то что более эффективне множить в шейдерах или в программе?
И да спасибо еще раз!!!
Итак наконецто спустя полторы недели благодоря богу контрлС и его жене КонтрлV + их сынку методу тыка удалось родить следующее
сори норм файлообменика незнаю
http://exbit.net/dszmpvgkxwcx.html
короче там нарисованый мной кораблик стреляет ракетой) загружены как obj модельки. Теперь хотелось бы спросить когда я в дебаге компилирую этот код движение летящей ракеты заметно лагает. Собсно вопрос почему ведь там всеголиш 2 обьекта и 2 текстурки а уже лагает. В релизе получше дела но всеже хотелось бы узнать почему так...
+Интетрисует что всегда ли нужно создавать отдельные шейдыры для каждного нового обьекта? или както можно это обойти?
столкнулся с проблемой загрузки моделей в дх11. Начал гуглить везде пишут что в дх11 урезали какойто мешлоадер и что теперь нужно писать загрузчик мешей самому. И что лучше делать свой формат мешей. Вопрос что это значит и как его делать и зачем. Блин вон есть куча 3д редакторов которые экспортируют файлы в какихто уже готовых форматах зачемп ридумывать какойто свой. Я вот сделалмодель в 3 д Maya экспортировал обьект через плагин в .obj формате нашол какойто загрузчик obj в директХ11 но когда пытаюсь подлючить свет текстуры полу черные полу нормальные.
Короче какойто кошмар... Неужели вотэто нада сидеть и писать самому конвертор и загрузчик из Maya в directX ?
Что то я все больше и больше смотрю на директХ 11 как на калеку которого микрософт хочет убить раз за разом.
2014-02-24 08:50:07
Aleksey11
Если ты говоришь такие вещи, значит ты вообще далёк от разработки графона.
dx11 великолепен. и в сто крат лучше пресловутого OpenGL.
А если его ещё сделают открытым, то опенгл вымрет.
Что значит открытым а он какой ?
2014-03-05 12:58:46
Петренко Михаил
У меня в уроке по функциям получился такой код для буквы Т :
#include <iostream> // cin, cout
#include <clocale> // поддержка русского языка
#include <conio.h> // _getch()
#include <stdlib.h> // поддержка функции очистки экрана system("cls")
using namespace std;
int main()
{
setlocale(LC_CTYPE,"Russian"); // установка русского языка
char act; // переменная для хранения ввода пользователя
int ch; // ввод пользователя приведённый к типу int
int benz=10;
int proverka=0;
int quit;
int x = 0; // две переменные для хранения координат пользователя
int y = 0;
char map[15][20]; // двумерный массив для хранения игровой карты
// блок инициализации массива
// внешний цикл отвечает за строки
for (int i = 0; i< 15; i++)
{
// внутренний цикл отвечает за столбцы
for (int j = 0; j< 20; j++)
{
map[i][j] = ' ';
}
}
map[6][6]='C';
map[0][0] = 'Т';// помещаем игровой персонаж в начало координат
while (1)
{
system("cls"); // вызов функции очистки экрана
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 20; j++)
{
cout << map[i][j]; // в циклах поэлементно выводится массив
}
cout << "\n"; // переход на новую строку после каждого "ряда"
}
act = _getch();
ch = static_cast<int>(act);
switch (static_cast<int>(act))
{
case -32:
break;
}
if(ch==27)
{
cout<<" Выйти? 1-да ,2-нет";
cin>>quit;
if(quit==1)
{
exit(0);
}
}
if(ch==75)
{
map[x][y] = ' '; // "Убираем" объект со старой координаты
y--; // изменяем координаты
map[x][y] = 'Т'; // "рисуем" объект на новом месте
benz--;
proverka++;
}
if(ch==77)
{
map[x][y] = ' ';
y++;
map[x][y] = 'Т';
benz--;
proverka++;
}
if(ch==80)
{
map[x][y] = ' ';
x++;
map[x][y] = 'Т';
benz--;
proverka++;
}
if(ch==72)
{
map[x][y] = ' ';
x--;
map[x][y] = 'Т';
benz--;
proverka++;
}
if (benz==0)
{
cout<<" Вы проиграли. Ходов- "<<proverka;
_getch();
exit(0);
}
if(map[6][6]==' ')
{
cout<<" Бензин пополнен.";
_getch();
map[6][6]='C';
benz=100;
}
} // конец цикла while
_getch();
return 0;
}
2d и шрифты в DX11. Как?(для игры соответствено, производительность итд)
2014-03-28 07:10:15
Aleksey11
Rey, по-дефолту - никак.
надо использовать GUI какой-нибудь.
ну разве DX11 не "прелесть" после этого.
2014-03-29 09:05:10
Aleksey11
Rey, с чего ты вообще взял, что API, которое связывает видеокарту и твою программу, должно уметь выводить текст? Текст - те же пиксели, которые, с точки зрения видеокарты, вообще ничем не отличаются от моделек каких-нибудь.