xLine3D - нужна ф-я
Здравствуйте. Читаю мануал по Xors3d 1.14 26 Jun 2009, там была такая ф-я. Почему убрали такую полезную функцию, и возможно ли её добавить в следующих релизах?
xLine3D ( int x1, int y1, int z1, int x2, int y2, int z2, int red, int green, int blue, int alpha, bool zenable = true ) Либо подскажите как можно нарисовать линию между двумя движущимися Entity. Пытаюсь использовать динамически создаваемые меши. Global laser =xCreateMesh() xEntityOrder(laser,1) Global LasSurf = xCreateSurface(laser, 0) xAddVertex(LasSurf, -1, -1, 0) xAddVertex(LasSurf, -1, 1, 0) xAddVertex(LasSurf, 1, 1, 0) xAddVertex(LasSurf, 1, -1, 0) xAddTriangle(LasSurf, 0, 1, 2) xAddTriangle(LasSurf, 0, 2, 3) Затем в цикле меняю координаты вершин: xVertexCoords(LasSurf, 0, xEntityX(ship\Ent), xEntityY(ship\Ent), xEntityZ(ship\Ent)) xVertexCoords(LasSurf, 1, xEntityX(ship\Ent), xEntityY(ship\Ent)+1, xEntityZ(ship\Ent)) xVertexCoords(LasSurf, 2, xEntityX(ship\Target), xEntityY(ship\Target), xEntityZ(ship\Target)) xVertexCoords(LasSurf, 3, xEntityX(ship\Target), xEntityY(ship\Target)+1, xEntityZ(ship\Target)) xUpdateNormals(laser) Получается, сложно и не очень хорошо. |
Ответ: xLine3D - нужна ф-я
xCameraProject спроецирует координаты из 3Д в 2Д. А дальше уже просто xLine
|
Ответ: xLine3D - нужна ф-я
ABT,а с zenable что делать будешь?
|
Ответ: xLine3D - нужна ф-я
Да была мысль 2Д линией воспользоваться, но как заметил HolyDel, проблемка будет. Представляете 2 корабля стреляют друг по другу, а вместо лазеров линия от центра одного до центра другого, не очень красиво будет :)
Сейчас сделал так, корявенько конечно. Но работает. Global laser = xCreateCube(ship\Ent) xScaleEntity(laser, 0.1,0.1, 100) xPositionEntity(laser, 0,0,100) создает лазер в виде куба и прикрепляется к родителю (кораблю) далее в цикле If xMeshesIntersect(laser, tar) = True Then dist# = xEntityDistance(ship\Ent, tar) xScaleEntity(laser, 0.1, 0.1, dist/2) xPositionEntity(laser, 0, 0, dist/2) Else xScaleEntity(laser, 0.1, 0.1, 100) xPositionEntity(laser, 0,0,100) EndIf оно конечно работает, но линия было бы всё равно не плохо, да и точки в 3д не помешали бы... |
Ответ: xLine3D - нужна ф-я
Имхо, вместо 3д-линии для лазера лучше использовать спрайт с текстурой. xLine3D создавалась для отображения различной debug-информации.
|
Ответ: xLine3D - нужна ф-я
и была в этом плане весьма удобна, особенно когда я тестил порталы и физику. так что верните, хуле
|
Ответ: xLine3D - нужна ф-я
Я пока выкрутился из ситуации описанным выше способом. Использовать спрайты я не пробовал, но думаю придется голову поломать на какой угол его повернуть. С Z буфером можно выкрутится с помощью xEntityOrder с положительным значением. И ещё со спрайтом не работают шейдеры, хотя по сути это же полигон (2 треугольника). Если использовать поверхности, шейдеры работают, но придется плюсом к проблеме со спрайтом ещё голову поломать как его ориентировать на камеру.
|
Ответ: xLine3D - нужна ф-я
спрайт не всегда полигон. на уровне гапи по крайней мере есть так называемые точечные спрайты. когда текстура натягивается на точку.
мое имхо - если ты делаешь космические бои, где лазеры - основное оружие, то над ним надо попотеть. делай цилиндром каким нибудь. или даже несколькими цилиндрами друг в друга вложенными. етож почти основной эффект в твоей игре, не? |
Ответ: xLine3D - нужна ф-я
Цитата:
А для дебага функция нужна. Запилите как выпилили! |
Ответ: xLine3D - нужна ф-я
Про точечные спрайты не слышал, надо почитать что за звери такие :super:
Сейчас растянутыми квадратами и оставил, видели бы вы какое дуло летало пока масштаб не подобрал :crazy: Кстати может подскажете как ориентировать эти квадраты одной стороной на камеру? Чтобы текстура по нормальному ложилась. И может кому интересно чем я тут маюсь, прямо сюда можно архивчик выложить? |
Ответ: xLine3D - нужна ф-я
векторное произведение знаешь что за штука?
грубо говоря тебе надо умножить вектор, который идет от центра луча до одного его конца, на вектор, который идет из камеры на конец. нормализуешь его и домножаешь на 1/2 ширины луча. далее получаешь две точки, одну - прибавив етот вектор к концу - вторую вычев его из конца. ну и с началом луча такая же история. это типа алгоритм, я мог перепутать в некоторых местах вычитание или сложение или порядок, но сам алгоритм примерно такой. и отключи backface culling, чтобы не мучаться с порядко вершин. |
Ответ: xLine3D - нужна ф-я
Спасибо, буду разбираться.
|
Ответ: xLine3D - нужна ф-я
У спрайта есть несколько режимов отображения. См. документацию Modules -> Constants -> Sprite view modes
|
Ответ: xLine3D - нужна ф-я
Эх забросил я свою поделку на долгие месяцы. Но мужики спасибо добавили всё таки xCreate3DLine :)
|
Часовой пояс GMT +4, время: 07:01. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot