Результаты поиска
| |
dima13230 | Дата: Четверг, 24 Марта 2016, 01:23 | Сообщение # 21 | Тема: XNA 2D Occlusion Culling |
частый гость
Сейчас нет на сайте
| Заодно и сам вызов отображения тайла кинул на всякий случай
|
|
| |
dima13230 | Дата: Четверг, 24 Марта 2016, 01:22 | Сообщение # 22 | Тема: XNA 2D Occlusion Culling |
частый гость
Сейчас нет на сайте
| Код for (int x = ((int)cam.Pos.X / 15) - graphics.GraphicsDevice.Viewport.Width / 15 / 2; x < (cam.Pos.X / 15) + graphics.GraphicsDevice.Viewport.Width / 15 / 2; x++) { for (int y = ((int)cam.Pos.Y / 15) - graphics.GraphicsDevice.Viewport.Height / 15 / 2; y < (cam.Pos.Y / 15) + graphics.GraphicsDevice.Viewport.Height / 15 / 2; y++) { if (tiles[x, y] != null) { if (x < 0 || x >= ViewTilesWidth) continue; if (y < 0 || x >= ViewTilesHeight) continue; int id = (int)tiles[x, y].type;
DrawFrameTile(id, x, y, 0, 0);
} } }
|
|
| |
dima13230 | Дата: Четверг, 24 Марта 2016, 01:19 | Сообщение # 23 | Тема: XNA 2D Occlusion Culling |
частый гость
Сейчас нет на сайте
| Цитата Lertmind ( ) что-то типа фонарика в темноте
Возможно и это спрошу потом :-)
Добавлено (24 марта 2016, 01:18) ---------------------------------------------
Цитата FlyOfFly ( ) Спасибо! Только радиус увеличу, а то отображается лишь малая часть тайлов :-)
Тогда используй, половины ширины и высоты камеры(делю сначала на TileSize, что бы получить количество возможных тайлов на экране, а половина, так камера у тебя вроде бы по середине) Код
for(int i = (camera._pos.x/TileSize)-Camera_Width/TileSize/2;i<(camera._pos.x/TileSize)+Camera_Width/TileSize/2;i++){ for(int j = (camera._pos.y/TileSize)-Camera_Height/TileSize/2;j<(camera._pos.y/TileSize)+Camera_Height/TileSize/2;j++){ if(i<0 || i>=MapWidth) continue; if(j<0 || j>=MapHeight) continue; //вывод тайла, который на i,j } }
или экрана Код
for(int i = (camera._pos.x/TileSize)-Screen_Width/TileSize/2;i<(camera._pos.x/TileSize)+Screen_Width/TileSize/2;i++){ for(int j = (camera._pos.y/TileSize)-Screen_Height/TileSize/2;j<(camera._pos.y/TileSize)+Screen_Height/TileSize/2;j++){ if(i<0 || i>=MapWidth) continue; if(j<0 || j>=MapHeight) continue; //вывод тайла, который на i,j } }
Пишет что индекс выходит за пределы массива
Добавлено (24 марта 2016, 01:19) --------------------------------------------- FlyOfFly, может я дам код отображения? Он чуть отличается от того, что ты давал. ( правда суть та же )
Сообщение отредактировал dima13230 - Четверг, 24 Марта 2016, 01:20 |
|
| |
dima13230 | Дата: Четверг, 24 Марта 2016, 01:07 | Сообщение # 24 | Тема: XNA 2D Occlusion Culling |
частый гость
Сейчас нет на сайте
| Спасибо! Только радиус увеличу, а то отображается лишь малая часть тайлов :-) Добавлено (24 марта 2016, 01:07) ---------------------------------------------
Цитата Lertmind ( ) Ты не объяснил как именно у тебя выглядит камера, я нарисовал пример:
Синяя - камера, и тебе надо узнать какие клетки отобразить (с галочкой) и не отображать (с крестиком)?
Камера квадратная. Отображает вид сбоку.
|
|
| |
dima13230 | Дата: Четверг, 24 Марта 2016, 00:56 | Сообщение # 25 | Тема: XNA 2D Occlusion Culling |
частый гость
Сейчас нет на сайте
| Цитата FlyOfFly ( ) Цитата dima13230 ()
А набор тайлов представляет из себя двумерный массив с координатами x и y. Я думаю, что можно вычислить площадь видимой зоны окна и сравнивать с координатами. Но что точно нужно сделать?
В таком случае, надо просто не выводить весь массив стразу, а выводить только в радиусе определенном вот допустим типа такого Код
for(int i = (camera._pos.x/TileSize)-5;i<(camera._pos.x/TileSize)+5;i++){ for(int j = (camera._pos.y/TileSize)-5;j<(camera._pos.y/TileSize)+5;j++){ if(i<0 && i>=MapWidth) continue; if(j<0 && j>=MapHeight) continue; //вывод тайла } }....
Не, не работает, выдаёт исключение OutOfMemory ( наверное вечный цикл... )
|
|
| |
dima13230 | Дата: Четверг, 24 Марта 2016, 00:33 | Сообщение # 26 | Тема: XNA 2D Occlusion Culling |
частый гость
Сейчас нет на сайте
| Не получается сделать так, чтобы если камера не видит тайл, он не отображался. Всё это происходит в 2D среде. Вот скрипт камеры:
Код using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Terraria.Input; using Microsoft.Xna.Framework.Input;
namespace 2DBlocks { public class Camera { protected float _zoom; // Camera Zoom public Matrix _transform; // Matrix Transform public Vector2 _pos; // Camera Position protected float _rotation; // Camera Rotation public Game1 game;
public Camera(Game1 Game) { _zoom = 1.0f; _rotation = 0.0f; _pos = Vector2.Zero; game = Game; }
// Sets and gets zoom public float Zoom { get { return _zoom; } set { _zoom = value; if (_zoom < 0.1f) _zoom = 0.1f; } // Negative zoom will flip image }
public float Rotation { get { return _rotation; } set { _rotation = value; } }
// Auxiliary function to move the camera public void Move(Vector2 amount) { _pos += amount; } // Get set position public Vector2 Pos { get { return _pos; } set { _pos = value; } }
public Matrix get_transformation(GraphicsDevice graphicsDevice) { _transform = // Thanks to o KB o for this solution Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) * Matrix.CreateRotationZ(Rotation) * Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) * Matrix.CreateTranslation(new Vector3(game.GraphicsDevice.Viewport.Width * 0.5f, game.GraphicsDevice.Viewport.Height * 0.5f, 0)); return _transform; }
} }
А набор тайлов представляет из себя двумерный массив с координатами x и y. Я думаю, что можно вычислить площадь видимой зоны окна и сравнивать с координатами. Но что точно нужно сделать?
Сообщение отредактировал dima13230 - Четверг, 24 Марта 2016, 00:36 |
|
| |
dima13230 | Дата: Понедельник, 27 Апреля 2015, 22:24 | Сообщение # 27 | Тема: Инструкция:как компилировать движок HPL1 |
частый гость
Сейчас нет на сайте
| Я в своей первой теме научу вас компилировать движок HPL1,что является довольно большой проблемой,так как движок хороший,но некомпилируемый. Скажу честно: я умертвил немало своих нервных клеток перед тем,как я всё таки скомпилировал его. Я использую Visual Studio 2008,поэтому не гарантирую что данный способ сработает на других версиях.Итак,приступим: 1.Скачать библиотеки и сам движок ОБЯЗАТЕЛЬНО по этим адресам: Библиотеки: http://www.moddb.com/engines....release Движок: http://www.moddb.com/engines/hpl/downloads/hpl1-engine-initial-release Учтите,что библиотеки libogg и libvorbis необходимо скачать самостоятельно! Иначе будет ошибка! ( эти библиотеки есть в архиве,но их версия слишком старая ) Помимо тех библиотек надо самостоятельно скачать и установить angelscript,SDL,Newton Dynamics. 2.Далее устанавливаем библиотеки и открываем студию... 3.Компилируем проект и вуаля! ( однако может выскочить ошибка с неизвестным идентификатором AL_EFFECT_EAXREVERB. Всё что нужно сделать,это удалить приставку EAX. Но есть один минус - это повлияет на звук,но не бойтесь,не критически,просто будет меньше возможностей "ревербератора". ) Прошу строго не судить,так как я уже говорил это моя первая тема.
Сообщение отредактировал dima13230 - Вторник, 28 Апреля 2015, 19:06 |
|
| |
dima13230 | Дата: Пятница, 24 Апреля 2015, 19:01 | Сообщение # 28 | Тема: Компиляция движка HPL |
частый гость
Сейчас нет на сайте
| Цитата ezhickovich ( ) try removing the glee source and header file from the dependencies folder.
До словно: Попробуй удалить сорец и хедер глии из папки с зависимостями проекта... Мне не помогло Лог: http://rghost.ru/6CFsGplSP
Компилирую на Visual Studio 2008Добавлено (24 апреля 2015, 18:47) --------------------------------------------- Так,скомпилировать мне удалось,а что мне делать с полученными obj файлами? Добавлено (24 апреля 2015, 19:01) --------------------------------------------- Вот английские документация и туториалы от разработчиков: https://wiki.frictionalgames.com/hpl1/start
Сообщение отредактировал dima13230 - Пятница, 24 Апреля 2015, 13:55 |
|
| |
|