| 
	
		
		
			| Результаты поиска |  |  |  | 
| 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 |  |  |  |  |  
 |