Суббота, 23 Ноября 2024, 20:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
ArchidoДата: Воскресенье, 29 Апреля 2012, 07:35 | Сообщение # 681 | Тема: XNA столкновения (3D)
Сэнсэй
Сейчас нет на сайте
Ну, столкновения сферы со сферой тебе мало чем помогут, т.к. едва ли много объектов, которые можно достаточно точно описать сферой. Обычно делается проверка столкновения сферы (игрок) с треугольником (карта).
В целом суть таких столкновений заключается в том, чтобы сначала определить сам факт столкновения и самую близкую точку, в которой это произошло. Далее определяют "глубину проникновения" и нормаль в той самой точке, после остается "отодвинуть" сферу по направлению нормали на величину "проникновения". В результате это выглядит так, как будто ты упираешься в стену biggrin
В целом там нет ничего сложного, ну немного математики... smile . Поэтому если нет желания с этим возиться, то проще взять физ. движок.

Added:
Ммм, для простоты можно и приведенный код использовать:
Code
if (bunker.Sphere.Intersects(player.Sphere))

Чтобы не "застревать" можно по идее делать итерацию движения игрока и запоминать предыдущее его положение. Далее проверять с помощью этого кода факт столкновения и если он имеет место быть, то перемещать игрока в его предыдущее положение. Таким образом будет происходить некое столкновение, но вдоль стены "ездить" все равно не выйдет таким способом smile


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Воскресенье, 29 Апреля 2012, 07:55
ArchidoДата: Суббота, 28 Апреля 2012, 05:48 | Сообщение # 682 | Тема: Что посмотреть подскажите :С
Сэнсэй
Сейчас нет на сайте
Мм, думаю автора темы это уже не интересует, но вдруг кто чего и не видел happy
Quote (psihrus)
научная фантастика/антиутопия/пост апокалипсис/космическая фантастика

"12 Обезъян", "Планета K-Pax", "Эквилибриум", "Я, робот", "Пандорум", "Остров". Это на вскидку smile

Quote (Jericho)
Исходный код - классный фильм

+1 . Есть еще отчасти похожий - "Дежавю". Тоже годный.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Суббота, 28 Апреля 2012, 05:40 | Сообщение # 683 | Тема: OpenGL или DirectX
Сэнсэй
Сейчас нет на сайте
Quote (Car-HD-Game)
С другой стороны на OpenGL больше возможностей, тут ты менее ограничен,аля более трудное изучение, DirectX на мой взгляд проще и доступнее.

Не согласный я smile

DX всегда считался сложнее в изучении чем OpenGL, а с приходом DX11 так тем более. В плане возможностей они примерно равны, как и в плане производительности - все только от радиуса кривизны рук зависит smile

Quote (BASS)
ИМХО, для DirectX "ад зависимостей" - явление реальное. В отношении OpenGL с этим проще: одна dll - и вперёд.

Я думаю слышали о расширениях OpenGL? Которые различны (могут быть, могут не быть) от железа к железу, + так называемые "vendоr-specific" расширения, которые есть на NV картах и нет на AMD и наоборот. У AMD до сих пор переодически встречаются баги в их драйверах, что приводит к падению приложения при использовании определенного расширения. Это все добавляет головной боли при разработке.
DX таких проблем не имеет. Поэтому и используется в мейнстриме как основной GAPI, несмотря на кроссплатформенность OpenGL. Аудитория геймеров Linux/Mac довольно таки мала по сравнению с PC, поэтому с этим мирятся.

P.S. А вот для обучения абсолютно все равно, что выбирать biggrin


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 27 Апреля 2012, 18:07 | Сообщение # 684 | Тема: Вопросы по DirectX
Сэнсэй
Сейчас нет на сайте
Lord_Zeon
Можно соответствующим способом подгонять текстурные координаты под нужный участок на текстуре.
Т.е. у тебя необходимое изображение 24х24 например, а размер текстуры 32х32. Остальное ненужное пространство залито, скажем, белым цветом. В текс. координатах у тебя там будет не 1.0f, а скажем 0.76f (24 / 32 + epsilon). Но на мелких изображения все равно могут быть глюки небольшие.

Поэтому если тебе нужна попиксельная точность - то можно добавить в текстурку альфаканал (tga например), соответственно для изображения альфа равна 1, а для белого участка = 0. Далее перед отрисовкой включаешь альфа тест и он обрежет этот прозрачный участок.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 27 Апреля 2012, 16:34 | Сообщение # 685 | Тема: Вопросы по DirectX
Сэнсэй
Сейчас нет на сайте
Lord_Zeon
Текстура должна быть размера степени двойки.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 27 Апреля 2012, 15:48 | Сообщение # 686 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Quote (Тритон)
Под твоим спойлером как раз иллюстрация того, то сигнатура берётся по номинальному классу.

И чо?

Added:
Всякие "сигнатуры", "номинальные классы", тема то для новичков smile , так, что давай на пальцах wink


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Пятница, 27 Апреля 2012, 15:52
ArchidoДата: Пятница, 27 Апреля 2012, 15:45 | Сообщение # 687 | Тема: Вопросы по DirectX
Сэнсэй
Сейчас нет на сайте
А я что-то не понял в чем проблема smile

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 27 Апреля 2012, 15:40 | Сообщение # 688 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Тритон
Молочик! Пиши исчо! wink

А вот кстати, что есть в С++ стандарте по поводу параметров по умолчанию и виртуальных функций:

Так, что это нормальное явление smile , правда совсем не очевидное... Поэтому не пишите параметры по умолчанию у виртуальных функций wink


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 27 Апреля 2012, 12:08 | Сообщение # 689 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
warzes
Советую для начала скомпилить мой код, посмотреть на результат и удивиться.
Потом пройтись отладчиком и посмотреть - функция какого класса вызывается и с каким параметром. Далее подумать. После этих процедур уже можно и поумничать happy

P.S. Результатом там будет 11, а не 10.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Пятница, 27 Апреля 2012, 09:54 | Сообщение # 690 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Тритон
Ох, ты меня вообще похоже не слышишь... Как же это сложно.

Quote (Тритон)
При этом ты затрёшь нолями ещё 3 байта. Если они и были по нолям, то всё в порядке. А если нет?

Code

void Replace (int &arg) {
          char &x = *((char*)&arg + 0);
          x = 'W';
}

char str[] = "<+>";        
Replace( (int&) str[1]);
std::cout << str;  //str = "<W>";

И где я их затер? Можешь даже в отладчике посмотреть последний байт параметра arg, он каким был - таким и остался.

О чем ты вообще пишешь? Прочитай мой предыдущий пост внимательно, хотя... придется наверное повторить на пальцах:
Ты утверждал: "приведение к ссылке на другой размер вообще не возможно". На, что я тебе привел работающий пример, который делает каст сылки одного типа на другой, при этом, выполняя все тот же своп 2-х символов (а не 8-ми) без каких либо последствий. Точка. Дальнейшее бесмысленное обсуждение никакого значения не имеет. Вопрос закрыт.

vasua99
Давай еще задач для "новичков" wink , а то мы бестолково топчимся на одном месте sad

warzes
Quote (warzes)
Первая задача вообще вредная и до сих пор не дан ответ почему так

Давно уже ответили biggrin . Правильнее вообще так:
Code

#include <cstdio>      
      class A      
      {      
        public:      
          virtual void p(int n=10) { printf("%d",n); }      
      };      
           
      class B : public A      
      {      
        public:      
          virtual void p(int n=20) { printf("%d",n+1); }      
      };      
           
      int main()      
      {      
        A* my = new B();      
        my->p();      
        delete my;      
        return 0;      
      }


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Пятница, 27 Апреля 2012, 10:10
ArchidoДата: Пятница, 27 Апреля 2012, 08:13 | Сообщение # 691 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Тритон
Хех, ты вообще пишешь немного о чем-то своем happy , при чем не только в этой теме...

Изначально вопрос состоял в том, что приведение ссылок вообще невозможно. При чем это были твои слова. Речи небыло о том, хорошо это или плохо.
Итак приведение в С++ возможно с чего угодно и на что угодно. Как оно там работает, хорошо это или плохо - это уже отдельная песня. Скажу только, что если понимать как оно работает - то никаких проблем с использованием таких вещей не будет. Целесообразность - отдельный вопрос, который тут не обсуждается.

Quote (Тритон)
Хорошо, допустим строка у тебя длинная и за границу ты не выйдешь

Если и выйду, то ничего не будет абсолютно. Инфа 100%

Quote (Тритон)
Но функция то значение отдельного байта всё равно уже не способна ни прочитать, ни записать

Все можно:
Code

void swap(int &a, int &b) {
     char &x = *((char*)&a + 1);
     x = '7';
}


Quote (Тритон)
аргументы у тебя - байты

Аргументы - всегда байты biggrin

Quote (Тритон)
Уж если свопишь подстроки, то выглядеть это должно иначе

Я не своплю подстроки, я своплю два символа. Ты до сих пор не понимаешь как работает это конструкция: "a ^= (b ^= (a ^= b & 0xFF) & 0xFF) & 0xFF".
Говорить больше не о чем.

Quote (Тритон)
нельзя хитрить с регистрами

Где и кто хитрит с регистрами? biggrin Или кто собирается это делать?

Все остальное, что ты написал - "поучения", как это таки плохо и как нужно это делать правильно. Благодарю бро, я терь просветленный.

P.S. У тебя большая каша в голове и ты "выкладываешь" эту кашу фактически в каждой обсуждаемой теме, при этом не очень хорошо разбираясь, собственно, в вопросах этой темы. Стоит чуток об этом подумать.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 26 Апреля 2012, 17:10 | Сообщение # 692 | Тема: Как узнать, на какой строке ошибка?
Сэнсэй
Сейчас нет на сайте
Quote (Тритон)
Во-первых у меня нет сотни лишних килобаксов за лицензию

Microsoft_Visual_Studio_Express

Quote (Тритон)
а этот проект должен быть полностью на легальном софте

Коммерческое использование Visual Studio Express Edition

Quote (Тритон)
А во-вторых студия меня уже в конец задолбала

tongue


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 26 Апреля 2012, 17:04 | Сообщение # 693 | Тема: OpenGL или DirectX
Сэнсэй
Сейчас нет на сайте
Такое уже тут было. Поэтому в кратце: под винду DirectX, под mobile сегмент - OpenGL ES . Инфа 100%

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 26 Апреля 2012, 16:59 | Сообщение # 694 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Quote (Тритон)
Ты их воткнул в вызов. В явном виде. Но не привёл, а испортил. Символы переставятся сразу четвёрками, если за массивом есть другое данное, то полбеды, ты просто его запоганишь, а если там валяется функция, или память за массивом вообще не доступна приладе, то получишь крах с егогомессагой из системы. Привести же на другой размер нельзя. Значение можно, так как при этом создаётся новое значение уже другого данного, но в случае ссылки это должно быть то же самое данное.

wacko . А вообще, чувак, ты мне нравишься, пиши еще! tongue

Еще раз спрошу - ты смотрел результат выполнения кода? Вот тебе такое:
Code

void mycool_swap(int &a, int &b) {   
   a ^= (b ^= (a ^= b & 0xFF) & 0xFF) & 0xFF;   
}   

...   

char str[] = "Hello bro";   
mycool_swap((int&)str[0], (int&)str[4]);
std::cout << str;

Какой результат получается? Где и что тут портится? Жду новых историй tongue


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Четверг, 26 Апреля 2012, 17:00
ArchidoДата: Четверг, 26 Апреля 2012, 16:40 | Сообщение # 695 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Омг, скока я нового узнал то седня, особенно про "приводящие конструкторы" happy . А в своем примере ты ерунду написал.

Ты мне скажи - ты мой код пробовал запускать? Видел результат? Можешь объяснить почему оно так работает? (или будешь говорить - что не работает? smile ) . И еще раз повторюсь: в теле функции swap никаких приведений типов нет.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Четверг, 26 Апреля 2012, 16:40
ArchidoДата: Четверг, 26 Апреля 2012, 15:54 | Сообщение # 696 | Тема: Как узнать, на какой строке ошибка?
Сэнсэй
Сейчас нет на сайте
Могу только посоветовать использовать MSVS (наверное кэп, но что поделать happy ), под виндой писать на чем-то кроме студии смысла не имеет. Инфа 100%

C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Четверг, 26 Апреля 2012, 15:49 | Сообщение # 697 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Тритон
biggrin

Какая еще вторая функция? Так не пробовал сделать?
Code

void mycool_swap(int &a, int &b) {   
        a ^= (b ^= (a ^= b & 0xFF) & 0xFF) & 0xFF;   
}   

...   

char str[] = "Hello";       
mycool_swap((int&)str[0], (int&)str[4]);

В функцию передается два 4-байтных Int'a, а не char'a и при чем именно по сылке - раз символы в массиве все таки меняются smile . В теле функции swap никаких приведений типов нет, так, что думай почему оно так wink

Quote (Тритон)
Читай стандарт, описание диалекта и все подключаемые головы

>> подключаемые головы

tongue


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Четверг, 26 Апреля 2012, 15:51
ArchidoДата: Среда, 25 Апреля 2012, 15:40 | Сообщение # 698 | Тема: casm
Сэнсэй
Сейчас нет на сайте
Quote (reyzor)
Ни чего что он как-бэ по синтаксису и по реализации другой будет ?

Ну, по спеке правда и не скажешь smile . MASM с макро и есть как бе С + Asm, который остается при этом низкоуровневым и шустро исполняется.
Так, что нибудь конкретное то будет по отличиям от всего остального? smile Идея писать такое, конечно, весьма похвальна, но все таки нужно с умом к таким вещам подходить wink


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
ArchidoДата: Среда, 25 Апреля 2012, 15:29 | Сообщение # 699 | Тема: Пару логических задач для новичков)
Сэнсэй
Сейчас нет на сайте
Омг, скока букаф tongue

Quote (Тритон)
Кроме того, приведение к ссылке на другой размер вообще не возможно.


Тритон, Проверяй:

Code

void swap(int &a, int &b) {
         a ^= (b ^= (a ^= b & 0xFF) & 0xFF) & 0xFF;
}

...

char str[] = "Hello";     
swap((int&)str[0], (int&)str[4]);


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)

Сообщение отредактировал Archido - Среда, 25 Апреля 2012, 15:30
ArchidoДата: Среда, 25 Апреля 2012, 09:07 | Сообщение # 700 | Тема: casm
Сэнсэй
Сейчас нет на сайте
Quote (reyzor)
И что с того что они есть ?

Ну вот те пример. Посмотри на код и подумай, чем твоя реализация будет лучше.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг