Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 20.02.2011, 17:56   #16
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

Кстати, заметил особенность - xLinePick юзает не отрезок, а луч, хотя в параметрах и предлагается указать координаты двух концов.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 20.02.2011, 17:58   #17
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Xors3D + BlitzMax

Вообще-то отрезок и юзается. Точнее из него делается луч, а последний параметр задает его длину, если поставить 0 - высчитается автоматом.
(Offline)
 
Ответить с цитированием
Старый 20.02.2011, 18:04   #18
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

Сообщение от Knightmare Посмотреть сообщение
Вообще-то отрезок и юзается. Точнее из него делается луч, а последний параметр задает его длину, если поставить 0 - высчитается автоматом.
Тю мля Я думал последний параметр - радиус линии в поперечнике, как у аналогичной команды в блитце. Теперь ясно, пойду править косяки
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 20.02.2011, 18:05   #19
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Xors3D + BlitzMax

В блитзе это тоже длина. Но в диапазоне [0; 1].
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (20.02.2011)
Старый 20.02.2011, 18:08   #20
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

Да? 0_о Хм... А вроде работало как радиус Вот что значит на блитцмакс с ксорсом перешел
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 24.02.2011, 22:23   #21
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

Что-то у меня закрадываются смутные сомнения, что xEntityPick страшно не дружит с тримешами...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 24.02.2011, 22:32   #22
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Xors3D + BlitzMax

Чем он у тебя не дружит?
(Offline)
 
Ответить с цитированием
Старый 24.02.2011, 22:37   #23
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

Чуть позже наверное пример выложу. Если не решу проблему. Извиняюсь за беспокойство
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 24.02.2011, 23:22   #24
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

' Импорт модуля
Import xorsteam.xors3d

SuperStrict




' Загрузка конфигурации
Global GWidth:Int = 640
Global GHeight:Int = 480
Global GDepth:Int = 32
Global GMode:Int = 1
Global ShadowMode:Int = 0
Global EffectMode:Int = 0
Global GlowMode:Int = 0
Global ContrastMode:Int = 0
Global VSyncMode:Int = 0

Local fileout:TStream = ReadFile("game.cfg")
If fileout Then
  GWidth = ReadInt(fileout)
  GHeight = ReadInt(fileout)
  GDepth = ReadInt(fileout)
  ShadowMode = ReadInt(fileout)
  EffectMode = ReadInt(fileout)
  GlowMode = ReadInt(fileout)
  ContrastMode = ReadInt(fileout)
  VSyncMode = ReadInt(fileout)
EndIf





' Инициализация 3D-режима
xAppTitle "Exilium"
xGraphics3D GWidth, GHeight, GDepth, 1, VSyncMode
SeedRnd MilliSecs()
xHidePointer()

' Антиалайзинг
xSetAntiAliasType(8)
xAntiAlias False

' Фильтрация
xSetTextureFiltering(TF_ANISOTROPICX8)

' Загрузка шрифта
Global arial:Int = xLoadFont("Arial", 12)

' Переменная отладки
Global debug_info:Byte




' Создание камеры
Global camera:Int = xCreateCamera()
xCameraRange camera, 0.1, 3000
xCameraEnableShadows(camera)

' Создание света и тени
xInitShadows(1024, 1024, 1024)
xSetShadowParams 5, 0.95, True, 300
xSetShadowsBlur(5)

Global light_up:Int = xCreateLight()
xRotateEntity light_up, 70, 45, 0
xLightEnableShadows light_up, 1
xLightShadowEpsilons light_up, 0.0001, 0.016









' Загрузка уровня
Global world_scale:Float = 0.35

'Global level:Int = xLoadMesh("data\maps\battle\1\level3.b3d")
'Local level_tex:Int = xLoadTexture("data\maps\battle\1\1.jpg")
'xEntityTexture level, level_tex
''xScaleMesh level, 1.3 * world_scale, 1.3 * world_scale, 1.3 * world_scale
''xPositionEntity level, 0, 640 * world_scale, 50 * world_scale
'xScaleMesh level, 13 * world_scale, 13 * world_scale, 13 * world_scale
'xPositionEntity level, 0, -250, 10
'xUpdateNormals level
'
'xEntityAddHullShape level, 0
'xEntityAlpha level, 0.3
'xEntityPickMode level, 2

Local c1:Int = xCreateCube()
xScaleMesh c1, 300, 5, 300
xPositionEntity c1, 0, -25, 0
'xEntityAddBoxShape c1, 0
'xEntityPickMode c1, 3
xEntityAddHullShape c1, 0
xEntityPickMode c1, 2

'testtt = xLoadAnimMesh("D:\Developing\realise_models2\HERO_EX1\test.b3d")
''testtt=xLoadAnimMesh("D:\Developing\realise_models2\HERO1\test6.b3d")
'xUpdateNormals testtt
'xAnimate(testtt,ANIMATION_LOOP,1.5)
'xScaleEntity testtt, 2, 2, 2
''xScaleEntity testtt, 15, 15, 15
'xEntityFX testtt,FX_FULLBRIGHT



' Загрузка персонажа
TBattleCharacter.CreateBattleCharacter("player", 1, 1, 999)
Global cube:Int = xCreateCube()


' Инициация mouse look
Global mxs:Float, mys:Float, dest_xang:Float, dest_yang:Float, xang:Float, yang:Float
Global camera_target:Int = xCreatePivot()
Global dist_target:Int = xCreatePivot(camera_target)

Global move_target:Int = xCreateCube()






' Главный цикл
While Not xKeyDown(1)

  If VSyncMode Then Delay(16)

  If xMouseHit(1) Then ShootSphere(camera)

  If xKeyHit(88) Then debug_info = Not debug_info

  ' Обработка персонажей
  UpdateCharacters()

  ' Обработка мира
  xUpdateWorld

  xRenderWorld(1.0, 1)

  ' Вывод отладочной информации
  xPhysicsDebugRender debug_info
  If debug_info Then
    xText 10, 10, "FPS: " + xGetFPS()
  EndIf

  ' drawing the scene
  xFlip
Wend






'==============================================================
'
' Пользовательские типы
'
'==============================================================

' Тип персонажа
Type TBattleCharacter
  Global list:TList = CreateList()
  Global list_count:Int

  Field model:Int, anim_mesh:Int
  Field selected:Byte
  Field name:String
  Field level:Int, life:Int, life_max:Int

 
  ' Создание персонажа
  Function CreateBattleCharacter:TBattleCharacter(variant:String, selected:Byte, level:Int, life:Int)
    Select variant
  	  Case "player"
        Local bchar:TBattleCharacter = New TBattleCharacter

        ' Определение переменных
        bchar.selected = selected
        bchar.level = level
        If bchar.level > 99
          bchar.level = 99
        ElseIf bchar.level < 1
          bchar.level = 1
        EndIf

        ' Определение постоянных
        bchar.name = variant

        ' Определение параметров
        bchar.life_max = 60 + bchar.level * 27
        bchar.life = life
        If bchar.life > bchar.life_max
          bchar.life = bchar.life_max
        ElseIf bchar.life < 1
          bchar.life = 1
        EndIf

        ' Загрузка моделей
        bchar.model = xCreateCube()
        xScaleMesh bchar.model, 14 * world_scale, 40 * world_scale, 14 * world_scale
'        xEntityAddBoxShape bchar.model, 10

        TBattleCharacter.list.AddLast(bchar)
        TBattleCharacter.list_count:+1
    End Select
  End Function

  ' Обработка персонажа
  Method Update()
    If selected = 1 Then
      MouseLook(model)
      If xMouseHit(2) Then
        xCameraPick(camera, xMouseX(), xMouseY())
        xPositionEntity move_target, xPickedX(), xPickedY(), xPickedZ()
      EndIf
'      If xEntityDistance(move_target, model) > 10 Then
'        xTranslateEntity model, (xEntityX(move_target, 1) - xEntityX(model, 1)) / 10, (xEntityY(move_target, 1) - xEntityY(model, 1)) / 10, (xEntityZ(move_target, 1) - xEntityZ(model, 1)) / 10
'      EndIf
    EndIf
  End Method

End Type
End






'==============================================================
'
' Пользовательские функции
'
'==============================================================

' Обработка всех персонажей
Function UpdateCharacters()
  For Local bchar:TBattleCharacter = EachIn TBattleCharacter.list
    bchar.Update()
  Next
End Function




' Mouse look
Function MouseLook(target:Int, height:Float = 10, distance:Float = 100, rotate:Float = 50)
  Local collision_distance:Float = 5

  If target <> 0 Then
    If xKeyDown(17) Then xTranslateEntity target, 0, 0, 1
    If xKeyDown(31) Then xTranslateEntity target, 0, 0, -1
    If xKeyDown(30) Then xTranslateEntity target, -1, 0, 0
    If xKeyDown(32) Then xTranslateEntity target, 1, 0, 0

    mxs = xMouseX() - xGraphicsWidth() / 2
    mys = xMouseY() - xGraphicsHeight() / 2
    xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
    mxs = mxs / (rotate / 12)
    mys = mys / (rotate / 12)
    If mxs>rotate Then mxs=rotate
    If mxs < - rotate Then mxs = -rotate
    If mys > rotate Then mys = rotate
    If mys < - rotate Then mys = -rotate

    dest_yang = dest_yang + mys
    If dest_yang < - 85 Then dest_yang = -85
    If dest_yang > 85 Then dest_yang = 85
    yang = (yang + ((dest_yang - yang) - (dest_yang - yang) / 1.5) / 1.5)

    dest_xang = dest_xang - mxs
    If dest_xang > 179.9999 Then
      dest_xang = dest_xang - 359.9999
      xang = xang - 359.9999
    EndIf
    If dest_xang < - 179.9999 Then
      dest_xang = 359.9999 + dest_xang
      xang = 359.9999 + xang
    EndIf
    xang = (xang + ((dest_xang - xang) - (dest_xang - xang) / 1.5) / 1.5)


    xPositionEntity camera_target, xEntityX(target, 1), xEntityY(target, 1), xEntityZ(target, 1)
    xRotateEntity camera_target, 0, xang, 0
    xPositionEntity dist_target, 0, Sin(yang) * distance, -Cos(yang) * distance

    Local vis_line_x:Float = xEntityX(camera_target, 1)
    Local vis_line_y:Float = xEntityY(camera_target, 1)
    Local vis_line_z:Float = xEntityZ(camera_target, 1)
    Local vis_line_dx:Float = xEntityX(dist_target, 1)
    Local vis_line_dy:Float = xEntityY(dist_target, 1)
    Local vis_line_dz:Float = xEntityZ(dist_target, 1)

    If xLinePick(vis_line_x, vis_line_y, vis_line_z, vis_line_dx, vis_line_dy, vis_line_dz, distance) <> 0 Then
'      xPositionEntity camera, xPickedX() - (xPickedX() - vis_line_x) / collision_distance, xPickedY() - (xPickedY() - vis_line_y) / collision_distance, xPickedZ() - (xPickedZ() - vis_line_z) / collision_distance
      xPositionEntity camera, xPickedX(), xPickedY(), xPickedZ()
    Else
'      xPositionEntity camera, vis_line_x + (vis_line_dx - vis_line_x) / (collision_distance * (0.25 + yang / 1000)), vis_line_y + (vis_line_dy - vis_line_y) / (collision_distance * (0.25 + yang / 1000)), vis_line_z + (vis_line_dz - vis_line_z) / (collision_distance * (0.25 + yang / 1000))
'      xPositionEntity camera, vis_line_x + (vis_line_dx - vis_line_x) / (collision_distance * 0.24), vis_line_y + (vis_line_dy - vis_line_y) / (collision_distance * 0.24), vis_line_z + (vis_line_dz - vis_line_z) / (collision_distance * 0.24)
      xPositionEntity camera, vis_line_dx, vis_line_dy, vis_line_dz
    EndIf
    xPointEntity camera, camera_target
  EndIf
End Function




' function to shoot sphere
Function ShootSphere(camera%)
	Local sphere:Int = xCreateSphere()
	xPositionEntity(sphere, xEntityX(camera, True), xEntityY(camera, True) - 5, xEntityZ(camera, True))
	xEntityColor(sphere, 255, 0, 0)
	xEntityAddSphereShape(sphere, 1.0, 1.0)
	xTFormNormal 0.0, 0.0, 1.0, camera, 0
	xEntityApplyCentralImpulse(sphere, xTFormedX() * 50, xTFormedY() * 50, xTFormedZ() * 50)
End Function
Вот пример. Я уже не из б3д меш гружу а просто создаю куб, юзаю на нем тримеш в том числе и для пика. В центре карты камера нормально упирается в "землю" не проваливаясь. При приближении к краям пик перестает работать, камера "проваливается" в куб
И да, такой же абсолютно код маус лока (за исключением измененной команды лайнпика в ксорсе) прекрасно работал в блитце, в той же моей демке avallon
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 24.02.2011, 23:26   #25
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Xors3D + BlitzMax

Какую-то адовую фигню творишь. Потом прогоню код.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (24.02.2011)
Старый 24.02.2011, 23:27   #26
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

Сообщение от Knightmare Посмотреть сообщение
Какую-то адовую фигню творишь. Потом прогоню код.
Я пока к бмаксу привыкаю, потому куча закомменченного
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 24.02.2011, 23:34   #27
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Xors3D + BlitzMax

Я чего-то нифига не понял в твоем примере. Что хоть должно быть? И что не так?
(Offline)
 
Ответить с цитированием
Старый 24.02.2011, 23:37   #28
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

WASD - передвижение. Камера вращается вокруг параллелепипеда, если повернуть ее вниз - она "упирается" в "пол". Но если двигать параллелепипед к краю - камера начнет проваливаться в "пол", будто коллижен-боди у "пола", по которому рассчитывается лайнпик, закончилось раньше, чем мы подошли к краю меша.
И это он на боксе так начинает проваливаться. Если загрузить простенький уровень - при подходе к удаленным от центра координат стенам начинается пляска камеры, будто лайнпик превращается из луча в прямую и пикает в обе стороны.
Если убрать пик - камера нормально вращается на любом отдалении параллелепипеда от центра координат. Так что если косяк у меня - то не во вращении камеры... наверное...
Да, еще, если отдалятся от центра, упершись камерой в "пол" - точка пика будто смещается, хотя если оторвать камеры от пола - камера нормально центрирована на параллелепипеде
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Старый 25.02.2011, 16:00   #29
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: Xors3D + BlitzMax

Решение твоей проблемы:
If xLinePick(vis_line_x, vis_line_y, vis_line_z, vis_line_dx - vis_line_x, vis_line_dy - vis_line_y, vis_line_dz - vis_line_z, distance) <> 0 Then
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Amatsu (25.02.2011)
Старый 25.02.2011, 16:13   #30
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: Xors3D + BlitzMax

У меня изначально код был:
    Local vis_line_x:Float = xEntityX(camera_target, 1)
    Local vis_line_y:Float = xEntityY(camera_target, 1)
    Local vis_line_z:Float = xEntityZ(camera_target, 1)
    Local vis_line_dx:Float = xEntityX(dist_target, 1)-vis_line_x
    Local vis_line_dy:Float = xEntityY(dist_target, 1)-vis_line_y
    Local vis_line_dz:Float = xEntityZ(dist_target, 1)-vis_line_z
Но прочитал в хелпе что dx- х координата, потому подумал что надо в глобальных координатах указывать, в отличие от блитца... И убрал...
В общем очень извиняюсь за тупость, огромное спасибо за выявление моего косяка
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (08.04.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 03:16.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com