Пятница, 08 Ноября 2024, 10:25

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Вопросы по DirectX
Lord_ZeonДата: Пятница, 27 Апреля 2012, 15:14 | Сообщение # 1
частый гость
Сейчас нет на сайте
Искажается текстура, пробовал разные варианты, уже часа 4 сижу думаю над этим, не пойму в чем причина.

Вопрос решен.


Сообщение отредактировал Lord_Zeon - Понедельник, 07 Мая 2012, 21:21
ArchidoДата: Пятница, 27 Апреля 2012, 15:45 | Сообщение # 2
Сэнсэй
Сейчас нет на сайте
А я что-то не понял в чем проблема smile

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


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

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


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Lord_ZeonДата: Воскресенье, 29 Апреля 2012, 20:33 | Сообщение # 7
частый гость
Сейчас нет на сайте
Добавлен новый вопрос.
ArchidoДата: Понедельник, 30 Апреля 2012, 19:05 | Сообщение # 8
Сэнсэй
Сейчас нет на сайте
Quote (Lord_Zeon)
Хотел сделать для себя простой движок на DirectX, столкнулся с проблемой, в главном классе объявляются девайсы LPDIRECT, получается что базовый класс к примеру назовем его Graphics (будет использоваться в будущем как интерфейс), и у него есть наследники, класс Спрайт и.т.д, так вот после того как классы завершены, для каждого из них объявляются объекты к примеру Graphics Init;(Отвечает за инициализацию DirectX) и.т.д, проблема в том что когда объявляeтся объект Sprite Spr, Spr2; к ним для каждого нужно передавать девайс LPDIRECT, как это сделать так чтобы не нужно было каждый раз к ним передавать девайс?


В корне неправильная архитектура... То, что у тебя именуется как Graphics - занимается инициализацией и всем, что с этим может быть связано (вроде Lost Device), созданием\уничтожением ресурсов... ну и занимается отрисовкой (или предоставляет интерфейс для этого), но сам не является объектом который умеет рисовать сам себя, для этого должны быть другие классы.

Скажем, можно ввести базовый абстрактный CRenderableObject, от которого наследуются все остальные классы, которые умеют рисоваться. Он либо рисует сам (при этом каждому объекту придеться хранить D3DDevice (или Graphics), сделав его например Синглтоном и создавая в конструкторе каждый раз, т.е. автоматом), либо выступает в качестве аргумента у некой функции Render класса Graphics, который его и рисует. Второй вариант правда будет сильно посложнее.

Опыт создания игрушек есть на сторонних движках? Т.к. неплохо было бы посмотреть как в простеньких движках этих примерно реализовано подобное.


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

Сообщение отредактировал Archido - Понедельник, 30 Апреля 2012, 19:06
Lord_ZeonДата: Понедельник, 30 Апреля 2012, 19:31 | Сообщение # 9
частый гость
Сейчас нет на сайте
Archido,
Спасибо за ответ, согласен что неправильная архитектура, я даже и не пытался все осмыслить, писал как считал правильным, единственное что меня тогда беспокоило это как передавать девайс для других объектов, в скором времени перепишу.

Игрушки на сторонних движках не создавал (Не люблю разбираться в чужом, считаю что лучше пробовать написать самому). Где то валяется исходник движка GEGE, вечерком посмотрю как там устроено.

Может из литературы что-нибудь по этому есть, с удовольствием бы почитал.


Сообщение отредактировал Lord_Zeon - Понедельник, 30 Апреля 2012, 19:32
ArchidoДата: Понедельник, 30 Апреля 2012, 19:48 | Сообщение # 10
Сэнсэй
Сейчас нет на сайте
Quote (Lord_Zeon)
Игрушки на сторонних движках не создавал (Не люблю разбираться в чужом, считаю что лучше пробовать написать самому)

Ну, велосипеды это конечно весьма похвально smile , но нужно хоть примерно понимать, что и как именно велосипедить. Когда делаешь простую игрушку на каком либо движке, то постоянно обращаешься к его компонентам (классам) и работаешь с ними, в процессе, понимая за что отвечает и какие функции выполняет каждый класс. Вот уже полезный опыт. А дальше можно покопаться во внутренностях движка и понять как оно там изнутри устроено... И дальше уже велосипеды пойдут гораздо веселее и понятнее happy

Насчет литературы, насколько мне известно, на русском толковой вообщем-то нет. Есть хорошая на английском, но там уже слишком все наворочено, так, что наверное уже на будущее smile . А сейчас стоит посмотреть как другие люди движки пишут.


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

Сообщение отредактировал Archido - Понедельник, 30 Апреля 2012, 19:49
Lord_ZeonДата: Четверг, 03 Мая 2012, 01:09 | Сообщение # 11
частый гость
Сейчас нет на сайте
Добавлено (03.05.2012, 01:09)
---------------------------------------------
Все исправил, почти готово, в классе graphics.cpp будут все функции которые напрямую взаимодействуют с девайсом, а для остальных подклассов буду вызывать их функции-члены через наследование, эффект почти такой же как я и хотел.


Сообщение отредактировал Lord_Zeon - Четверг, 31 Мая 2012, 02:55
  • Страница 1 из 1
  • 1
Поиск:

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