forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Varptr в Blitz3D (http://forum.boolean.name/showthread.php?t=13178)

maxturbo 21.08.2010 01:11

Varptr в Blitz3D
 
Переписываю код с BlitzMax на Blitz3D и столкнулся с такой фигней как можно в Blitz3D использовать функцию BlitzMax'a Varptr? или как она там называется :)
Я так понимаю она находит адрес переменной, а вот как в Blitz3D его найти...

.Squid 21.08.2010 01:46

Ответ: Varptr в Blitz3D
 
Никак

maxturbo 21.08.2010 02:03

Ответ: Varptr в Blitz3D
 
И что я так понимаю что адрес переменной узнать нельзя в Blitz3D

.Squid 21.08.2010 02:50

Ответ: Varptr в Blitz3D
 
Черезжопно можно.
http://fastlibs.com
Смотри FastPointer

maxturbo 21.08.2010 02:57

Ответ: Varptr в Blitz3D
 
Ну я так пологаю на C++ можно написать такую либу чтоб она возврощала адрес переменной? Верно?

Knightmare 21.08.2010 03:40

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от maxturbo (Сообщение 159219)
Ну я так пологаю на C++ можно написать такую либу чтоб она возврощала адрес переменной? Верно?

Верно. Но не для тебя.

pax 21.08.2010 10:18

Ответ: Varptr в Blitz3D
 
Вроде бы можно получать адрес пользовательских типов на сколько я помню... только эти функции не документированы...

Вот тут есть примеры http://www.blitzbasic.com/Community/...hp?topic=53348

wolfhound512 21.08.2010 10:50

Ответ: Varptr в Blitz3D
 
Это не адрес, а порядковый номер объекта в типе

pax 21.08.2010 16:47

Ответ: Varptr в Blitz3D
 
Ну в переводе Handle - ссылка. Я не проверял значения получаемые этой функцией до этого. После маленького исследования получается, что это и не совсем номер элемента в типе. Это номер полученной ссылки на объект типа.
PHP код:

Type MyType
    Field simple
End Type

var1
.MyType = New MyType
var2
.MyType = New MyType

Print Handle(var1)
Print 
Handle(var2)
Delete var1
Print Handle(var2

Вот такой код выдает:
PHP код:

1
2


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

Knightmare 21.08.2010 16:55

Ответ: Varptr в Blitz3D
 
Мне западло поверять, но указание * как тэга типа в decls передает адрес банка или объекта пользовательского типа. Возможно оно будет работать и для переменных.

pax 21.08.2010 16:57

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от Knightmare (Сообщение 159255)
Мне западло поверять, но указание * как тэга типа в decls передает адрес банка или объекта пользовательского типа. Возможно оно будет работать и для переменных.

Ну если человек напишет для этого еще свою библиотеку ;)

Knightmare 21.08.2010 17:07

Ответ: Varptr в Blitz3D
 
Ну за каким-то хреном же ему нужен адрес переменной.

maxturbo 21.08.2010 17:21

Ответ: Varptr в Blitz3D
 
Короче объясню так, есть Ninfa3D для BlitzMax я ее юзаю в Blitz3D все работает вот только в BlitzMax команда используется вот так
Код:

       
Local sampledist:Float = 0.0015
Local strength:Float = 4.6
Local multiplier:Float = 0.22
CreateDOF(512,512,Varptr sampledist,Varptr strength,Varptr multiplier)

А как в Blitz3D использовать, если просто ввести переменные то выходит ошибка!!!

pax 21.08.2010 17:25

Ответ: Varptr в Blitz3D
 
если это dll, то просто объяви эту функцию как нужно в decls. И должно работать.

maxturbo 21.08.2010 17:31

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от pax (Сообщение 159262)
если это dll, то просто объяви эту функцию как нужно в decls. И должно работать.

Да это dll но вроде бы все правельно пишу в decls
Вот так она выглядит в BlitzMax
Код:

Global CreateDOF:Int Ptr(w:Int, h:Int, param0:Float Ptr, param1:Float Ptr, param2:Float Ptr) "C" = GetProcAddress(dll,"CreateDOF")
А вот так вот я делаю в decls
Код:

NF_CreateDOF_%(w%,h%,param0#,param1#,param2#):"CreateDOF"

pax 21.08.2010 17:46

Ответ: Varptr в Blitz3D
 
попробуй так:
Код:

NF_CreateDOF_*(w%,h%,param0*,param1*,param2*):"CreateDOF"

maxturbo 21.08.2010 17:48

Ответ: Varptr в Blitz3D
 
Не работает, ошибку выдает!!!

pax 21.08.2010 18:05

Ответ: Varptr в Blitz3D
 
А что за ошибка?

maxturbo 21.08.2010 18:15

Ответ: Varptr в Blitz3D
 
Просто выдает ошибку отправить отчет Microsoft, даже не компилируется!!!

pax 21.08.2010 18:17

Ответ: Varptr в Blitz3D
 
Не компилируется и выдает ошибку, это на каком же этапе?

Venom2 21.08.2010 19:52

Ответ: Varptr в Blitz3D
 
maxturbo
Когда обьявляешь в деклсе аргумент со звездочкой, это значит что туда надо передавать либо экземпляр типа (Type) либо банк (CreateBank и т.д)
Код:

; создаем банки и записываем в них значения
sampledist = CreateBank(4)
PokeFloat(sampledist, ...)
strength = CreateBank(4)
PokeFloat(strength, ...)
multiplier = CreateBank(4)
PokeFloat(multiplier, ...)

; передаем банки в функцию
CreateDOF(512, 512, sampledist, strength, multiplier)

; удаляем банки
FreeBank(sampledist)
FreeBank(strength)
FreeBank(multiplier)

ЗЫ
Только на кой хер там указатели нужно передавать, обычно так делают чтобы вернуть какие-то значения из функции через эти указатели, так что будь внимательнее, перед удаление банков если нужно будет забери значения с помощью PeekFloat, тогда наверное записывать в банки не нужно, если они для возвращения нужны, читай справку по движку.

wolfhound512 21.08.2010 20:06

Ответ: Varptr в Blitz3D
 
Передавать банки вместо указателей не получится, т.к. блиц в этом случае передает указатель на структуру типа
Код:

struct bank {
    int size;
    void* data;
}


Venom2 21.08.2010 20:27

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от wolfhound512 (Сообщение 159277)
Передавать банки вместо указателей не получится, т.к. блиц в этом случае передает указатель на структуру типа
Код:

struct bank {
    int size;
    void* data;
}


Цитата:

Когда обьявляешь в деклсе аргумент со звездочкой, это значит что туда надо передавать либо экземпляр типа (Type) либо банк (CreateBank и т.д)
Без звездочки блиц передает обычный int, т.е. адрес банка, по которому и будет та структура, со зведочкой блиц передает адрес данных.

maxturbo 21.08.2010 21:55

Ответ: Varptr в Blitz3D
 
А вот к примеру потом при нажатие клавиши переменная значение меняет, и как это должно выглядеть?
Вот код!
Код:

        If NF_KeyDown(KEY_1) Then sampledist = sampledist+ 0.0001
        If NF_KeyDown(KEY_2) Then sampledist = sampledist- 0.0001

        If NF_KeyDown(KEY_3) Then strength= strength + 0.001
        If NF_KeyDown(KEY_4) Then strength= strength - 0.001

        If NF_KeyDown(KEY_5) Then multiplier = multiplier+ 0.001
        If NF_KeyDown(KEY_6) Then multiplier = multiplier - 0.001


Venom2 21.08.2010 22:26

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от maxturbo (Сообщение 159289)
А вот к примеру потом при нажатие клавиши переменная значение меняет, и как это должно выглядеть?
Вот код!
Код:

        If NF_KeyDown(KEY_1) Then sampledist = sampledist+ 0.0001
        If NF_KeyDown(KEY_2) Then sampledist = sampledist- 0.0001

        If NF_KeyDown(KEY_3) Then strength= strength + 0.001
        If NF_KeyDown(KEY_4) Then strength= strength - 0.001

        If NF_KeyDown(KEY_5) Then multiplier = multiplier+ 0.001
        If NF_KeyDown(KEY_6) Then multiplier = multiplier - 0.001


Эти переменные после еще куда-то передаются? Если нет, то тогда понятно зачем адреса нужно передавать
Банки тогда не удаляй и в них перезаписывай
Код:

If NF_KeyDown(KEY_1) Then PokeFloat(sampledist, 0, PeekFloat(sampledist, 0) + 0.0001)
If NF_KeyDown(KEY_2) Then PokeFloat(sampledist, 0, PeekFloat(sampledist, 0) - 0.0001)
......


maxturbo 21.08.2010 22:39

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от Venom2 (Сообщение 159291)
Эти переменные после еще куда-то передаются? Если нет, то тогда понятно зачем адреса нужно передавать
Банки тогда не удаляй и в них перезаписывай

Не после ни куда не передаются !!

maxturbo 21.08.2010 22:53

Ответ: Varptr в Blitz3D
 
Делаю все как ты описываешь, все равно ноль эфекта, только что запускаться стало и все!!!
Собственно вот
в decls у меня записано так
Код:

NF_CreateDOF%(w%,h%,param0*,param1*,param2*):"CreateDOF"
Далее код делаю как ты говоришь!

Код:

Include "ninfa3d.bb"
NF_EnableVsync()

NF_InitEngine(640,480,32,0)
        NF_BackGroundColor(128,128,128);Background Color
        NF_AmbientLight(64,64,64);Ambient Color

main1 = CreateBank(4)
PokeFloat(main1,1,0.0015)
main2 = CreateBank(4)
PokeFloat(main2, 2,4.6)
main3 = CreateBank(4)
PokeFloat(main3, 3,0.22)


        NF_CreateDOF(512,512,main1,main2,main3)

Include "SampleFunctions.bb"

camera = NF_CreateCameraFPS(200,0.25)
        NF_PositionEntity(camera,0,64,-100)

light01 = NF_CreateLight(LGT_POINT)
        NF_PositionEntity(light01,0,128,-128); Position
        NF_LightRadius(light01,175); Radius of the light

CreateGround()

goku = NF_LoadMesh("media\goku.b3d",VT_TCOORS)
        ;AnimateMesh(goku,1,30,1,235,1);Animate the mesh
        NF_PositionEntity(goku,0,25,25);Move the mesh
        NF_RotateEntity(goku,0,0,0)
        NF_ScaleMesh(goku,2.5,2.5,2.5)

vegeta = NF_LoadMesh("media\vegeta.b3d",VT_TCOORS)
        ;AnimateMesh(vegeta,1,30,1,235,1);Animate the mesh
        NF_PositionEntity(vegeta,50,25,0);Move the mesh
        NF_RotateEntity(vegeta,0,0,0)
        NF_ScaleMesh(vegeta,2.5,2.5,2.5)
       
piccolo = NF_LoadMesh("media\piccolo.b3d",VT_TCOORS)
        ;AnimateMesh(piccolo,1,30,1,235,1);Animate the mesh
        NF_PositionEntity(piccolo,-50,25,0);Move the mesh
        NF_RotateEntity(piccolo,0,0,0)
        NF_ScaleMesh(piccolo,2.5,2.5,2.5)
While(NF_EngineRun())

        NF_BeginScene()
        If NF_KeyHit(KEY_ESCAPE) Then NF_CloseEngine()
        NF_UpdateEngine(0,UP_ALL)

        If NF_KeyDown(KEY_1) Then PokeFloat(main1, 1, PeekFloat(main1, 1) +10.0001)
        If NF_KeyDown(KEY_2) Then PokeFloat(main1, 1, PeekFloat(main1,1) -10.0001)


NF_EndScene()
       
Wend
NF_EndEngine()
End

Может где ошибка есть!!!

Randomize 21.08.2010 23:02

Ответ: Varptr в Blitz3D
 
Зачем так извращатся? Пиши на BlitzMax`е.

maxturbo 21.08.2010 23:32

Ответ: Varptr в Blitz3D
 
И походу дела я так понимаю нужно чтобы вновь измененные параметры переменной с помощью клавиши 1 или 2 передались NF_CreateDOF или как хрен его знает!!!

Venom2 22.08.2010 00:27

Ответ: Varptr в Blitz3D
 
maxturbo
Во-первых зачем ты здесь единицу ставишь?
Цитата:

PokeFloat(main1, 1, PeekFloat(main1, 1) +10.0001)
это байтовое смещение в памяти банка, там 0 должен быть.
Во-вторых нужно знать как работает эта NF_CreateDOF, точная декларация нужна. Как я уже говорил читай документацию к движку, возможно ты ее неверно используешь. Или лучше забей на эту хрень, это очередная говнообертка иррлихта, да еще из блица юзать действительно извращение.

maxturbo 22.08.2010 00:46

Ответ: Varptr в Blitz3D
 
Все заработало )) СПС тебе большущее )
А по поводу того что юзать из блитза, мне кажется проще в Blitz3D чем в BlitzMax и работает ни чуть не хуже :)

Venom2 22.08.2010 09:08

Ответ: Varptr в Blitz3D
 
Цитата:

Сообщение от maxturbo (Сообщение 159326)
А по поводу того что юзать из блитза, мне кажется проще в Blitz3D чем в BlitzMax и работает ни чуть не хуже :)

Почему проще? Блицмакс тот же блицбейсик только с дополнительными плюшками, синтаксис практически не отличается. Вдобавок получаешь нормальную среду разработки с полноценным языком. Понимаю если бы можно было отключать движок Blitz3D и юзать только язык, а так ты тащишь с приложением безполезные полтора метра, да еще и пишешь на убогом языке :)

maxturbo 22.08.2010 09:54

Ответ: Varptr в Blitz3D
 
Так я пробовал его еще на BlitzPlus юзать там он на много лучше работает и без глюков но вот только действительно тормозной, загружаю свою машину туда и он пол часа включается, так что я думаю хорошего на нем не сделаешь :)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot