Конференция "Игры" » Редактор карт [Delphi, Windows]
 
  • Sloosar © (21.05.08 19:59) [0]
    Я делаю редактор карт для игры. Идея редактора отображать квадратные тайлы по сетке.
    Вот собственно вопрос.
    По уполномолчанию тайл на карте трава. Как умно зделать (не писать кучу "ифов") что бы при помещении на карту например тайла земли он обкружался углами по пириметру? Все тайлы улов есть.
  • Уроки русского (22.05.08 02:54) [1]
    Не "зделать", а сделать.
  • Vudu © (22.05.08 12:46) [2]
    Ты же наверное наверное карты местности в массиве держиш, вот циклом ее перебираеш и в каждой клетке смотриш есть ли земля справа, лева ... и при наличии оной ставиш соответствующий уголок
  • Sloosar © (22.05.08 12:56) [3]
    Да но может быть очень много вариантов. Например: тайл земли который мы ставим и уже есть тайл на северо-западе от него или уже есть на западе и северо-западе. Вариантов куча.
       _
    _|_|_
    |_|_|_|
      |_|
  • МистерТ (22.05.08 13:24) [4]
  • Sloosar © (22.05.08 16:04) [5]
    Спасиба МистерТ. Много чего нового и интересного узнал. Думаю что это мне поможет. Попробую этот способ, но не уверен что у меня получится.
  • Sloosar © (23.05.08 09:05) [6]
    Следовательно из этой статьи выплывает вопрос, как собственно сделать накладную текстуру полупрозрачной? Пробовал поочерёдно брать два пикселя (из накладной текстуры и той что была под ней) и щитать среднее значение, ничего не получается.
    Подскажите мне пожалуйста, как можно грамотно подойти к этой проблеме.
  • МистерТ (23.05.08 09:23) [7]
    Первый вопрос, на чем реализуешь?
    GDI, DirectDraw, Direct3D, OpenGL ?
  • Vudu © (23.05.08 09:27) [8]
    А по моему все просто, в каждой клетке проверяеш что находится вокруг нее, и судя по этому отрисовываеш нужное.
  • Sloosar © (23.05.08 10:19) [9]

    > А по моему все просто, в каждой клетке проверяеш что находится
    > вокруг нее, и судя по этому отрисовываеш нужное.

    Оно то просто, но Вы возьмите и подщитайте сколько есть вариантов.
  • Sloosar © (23.05.08 11:01) [10]

    > Первый вопрос, на чем реализуешь?GDI, DirectDraw, Direct3D,
    >  OpenGL ?

    Реализую на GDI
  • МистерТ (23.05.08 13:47) [11]
    > Пробовал поочерёдно брать два пикселя (из накладной текстуры
    > и той что была под ней) и щитать среднее значение, ничего
    > не получается.

    Расчет прозрачности пикселя:
    Result = Alpha * (srcColor - destColor) + destColor

    З.Ы. СЧитать
    З.З.Ы. попробуй переключится на OpenGL, там прозрачность не надо считать вручную и возможностей больше. Или на DirectX, но он для освоения несколько сложнее.
    ссылка по теме
    http://d3dengine.narod.ru/books.html
  • Sloosar © (23.05.08 16:54) [12]
    Это хорошый учебник по OpenGL. Но там нету ничего, что бы говорило о загрузке графики из файла либо других компонентов Delphi.
    Если можно привидите пример наложения картинки на картинку с полупрозрачностью.
  • МистерТ (23.05.08 18:55) [13]
    > там нету ничего, что бы говорило о загрузке графики из файла
    > либо других компонентов Delphi

    Ты точно читал что там написано ?

    Глава 4
    Раздел Смешение цветов и прозрачность
    много всего про прозрачность

    в той же главе
    Раздел Текстура
    procedure TfrmGL.BmpTexture;
    var
    Bitmap: TBitmap;
    Bits: Array [0..63, 0..63, 0..2] of GLubyte; // массив образа, 64x64
    i, j: Integer; begin
    Bitmap := TBitmap.Create;
    Bitmap.LoadFromFile('gold.bmp1); // загрузка текстуры из файла
    {---заполнение битового массива---}
    ...много букв...
    glEnable (GL__TEXTURE_2D) ;
    Bitmap.Free;
    end;


    тот код, где ...много букв... будь добр - прочитай из книги.
  • Sloosar © (24.05.08 14:25) [14]
    Я немогу кое в чём разобратся. Я создал в OpenGL квадрат на котором и будет всё рисоватся. Но я немогу нанести на него текстуру вот код

    glClear (GL_COLOR_BUFFER_BIT);      

    glBegin (GL_QUADS);
      glVertex2f (-1.0,-1.0);
      glVertex2f (-1.0,1.0);
      glVertex2f (1.0,1.0);
      glVertex2f (1.0,-1.0);
      glEnd;

    SwapBuffers(DC);


    И ещё я так подумал что таким способом можно создать много квадратиков и на них наносить текстуру и так подучится эфект трёхмерности, поскольку можно поднимать их по сетке вверх и вниз. Я пробовал такое проделать но двигатся он будет очень медленно, а с камерой я ещё как то не знаком.
    Если можно приведите премер процедуры которая задает положения камеры в пространстве и направление вида камеры на определённую точку.
  • Sloosar © (24.05.08 14:42) [15]
    И ещё забегая на перёд хочу спросить как можно красиво организовать движение воды?
  • @!!ex © (24.05.08 15:09) [16]

    glClear (GL_COLOR_BUFFER_BIT);      
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, Texture);


    glBegin (GL_QUADS);
     glTexCoord2f(0,0);
     glVertex2f (-1.0,-1.0);
     glTexCoord2f(0,1);
     glVertex2f (-1.0,1.0);
     glTexCoord2f(1,1);
     glVertex2f (1.0,1.0);
     glTexCoord2f(1,0);
     glVertex2f (1.0,-1.0);
     glEnd;

    SwapBuffers(DC);




    > Если можно приведите премер процедуры которая задает положения
    > камеры в пространстве и направление вида камеры на определённую
    > точку.

    gluLookAt - помойму так. я ей принципиально не пользуюсь, позиционирую куамеру с помощью мировых трансформаций.


    > И ещё забегая на перёд хочу спросить как можно красиво организовать
    > движение воды?

    Универсального рецепта нет. очень многое зависит от угла обзора. некоторые вариант хорошо смотрятся вблизи, некоторые хорошо смотрятся вертикально сверху и т.д.

    Вот мой вариант:
    http://www.free-lancers.net/users/AllexInTheDark/projects/95269/

    P.S.
    Этот скриншот уже баян конкретный.. свечу его постоянно просто... а что делат ь новый лень делать, а лучше все равно пока нету. :(
  • Sloosar © (24.05.08 21:42) [17]
    glBindTexture(GL_TEXTURE_2D, Texture);
    При выполнение этой команды выдаётся ошибка "неизвестный индентификатор"
  • @!!ex_ (26.05.08 16:41) [18]

    > Sloosar ©   (24.05.08 21:42) [17]
    >
    > glBindTexture(GL_TEXTURE_2D, Texture);
    > При выполнение этой команды выдаётся ошибка "неизвестный
    > индентификатор"

    Ясен хрен. Я привел пример, а не код для копипаста.
    Подумай головой. Текстуру еще объявить надо и загрузить...
  • Sloosar © (26.05.08 20:24) [19]
    Да я уже нашёл ришение в книге.
    Следующий вопрос у меня такой :
    У меня тайлы отображаются по сетке. Как получить координаты позиции курсора относительно клетки
    > И ещё я так подумал что таким способом можно создать много
    > квадратиков и на них наносить текстуру и так подучится эфект
    > трёхмерности, поскольку можно поднимать их по сетке вверх
    > и вниз.
  • @!!ex_ (26.05.08 22:16) [20]

    > У меня тайлы отображаются по сетке. Как получить координаты
    > позиции курсора относительно клетки

    Это относительно много кода. мне лень писать.
    посмтри в книге. выбор объектов мышкой или что-то в этом роде.

    Есть несколько способов. ЛИчно япользуюсь таким:
    получаю оконные координаты мыши.
    Поулчаю соответствующую 3Д координату через чтение из буффера глубины и преобразование в 3Д.
    Смотрю, какому объекту соответствует координата.
  • Sloosar © (27.05.08 12:54) [21]
    Пишу

    for i:=0 to 100 do
          for j:=0 to 100 do begin
           glBegin (GL_QUADS);
           glTexCoord2d (1.0, 0.0);
           glVertex3f (-1.0+i, 1.0+j, 0.0);
    glTexCoord2d (1.0, 1.0);
           glVertex3f (1.0+i, 1.0+j, 0.0);
    glTexCoord2d (0.0, 1.0);
           glVertex3f (1.0+i, -1.0+j, 0.0);
           glTexCoord2d (0.0, 0.0);
           glVertex3f (-1.0+i, -1.0+j, 0.0);
       glEnd;
          end;
    _____________________________
    glTranslatef(0, 0, -8);
    gluLookAt(50, 50, 0, 50, 50, -10, 0, 0, 0);




    Почему на сцене ничего не отображается?
  • Максим (07.06.08 20:46) [22]
    Что никто не может ответить на мой вопрос?
  • @!!ex © (08.06.08 07:45) [23]
    > [22] Максим   (07.06.08 20:46)

    Почему камера выставляется ПОСЛЕ рендера?
  • @!!ex © (08.06.08 07:53) [24]
    Код вроде рабочий(хоть и не правильный). Поэтому ищи проблемы в камере.
  • Максим (08.06.08 19:21) [25]
    Я так понял проблема с последними тремя нолями читал
    http://mirgames.ru/articles/opengl/camera.html но ничего там так и не понял.
  • Vladimir Vasilyev (11.06.08 11:42) [26]
    смотри статьи на http://gamedev.narod.ru/
  • sloosar © (12.06.08 21:11) [27]
    С камерой я разобрался. Ура :-).
    Теперь меня интересует как можно кликом мышки выбрать объект(в моём случае тайл) и потом опускать и поднимать его??????
  • Dirver (17.06.08 19:26) [28]
    Делал както ландшафт по методу
    http://www.mirgames.ru/articles/base/aigame.html
    Ландшафт состоял из квадов и поскольку интерполяция альфы выполняется для каждого из трианглов отдельно(а не для целого квада), то с одной стороны квада(точнее по диагонали) появлялись зубцы. Так и не нашел способ побороть это(без шейдеров).
  • plotnick (15.07.08 13:26) [29]
  • имя (01.10.08 23:23) [30]
    Удалено модератором
  • имя (01.10.08 23:23) [31]
    Удалено модератором
 
Конференция "Игры" » Редактор карт [Delphi, Windows]
Есть новые Нет новых   [134430   +4][b:0][p:0.002]