Что-то я эту тему как-то пропустил. 2009 год... Blitz3D + Ассемблер под Windows вот это франкенштейн...)
Сообщение от Артем Валерьевич
Есть, заработало, только теперь ругается на Parent Entity.
|
Если методы типа invoke bbCreateLight , invoke bbCreateCamera и подобные
в ассемблерном коде не содержат параметров то это по какой-то причине
приводит к возникновению ошибки "Parent entity does not exist"
Исправляется просто добавлением ,0 в конце
Хотя в документации четко написано что параметр parent опициональный.
Возможно это как-то связанно с самим механизмом invoke,
может какая-то неразбериха в стеке возникает, не знаю.
Вообще, то что касается необязательных параметров для функций Blitz3D в FASM с этим проблема.
Так же согласно документации в функцию TurnEntity entity,pitch#,yaw#,roll#,[,global]
мы передаем float значения (такие параметры помечены символом # на конце):
invoke bbTurnEntity, [cube], 1, 2, 3
Поэтому в числа нужно добавить "разделитель":
invoke bbPositionEntity, [cube], 0.0, 0.0, 5.0
Или можно просто добавить и f на конце (как в Си и Java)
invoke bbPositionEntity, [cube], 0f, 0f, 5f
Тоже самое касается других команд вроде:
invoke bbTurnEntity, [cube], 1f, 2f, 3f
В общем я немного подправил и дополнил код и получилось вот это:
Исходный код:
;******************************************************
;* Blitz3D on FASM *
;******************************************************
format PE GUI 4.0
entry start
include 'win32a.inc'
include 'Blitz3D.inc'
; ------------ константы и переменные -----------------
section '.data' data readable writeable
camera BBCamera 0
light BBLight 0
cone BBModel 0
cube BBModel 0
sphere BBModel 0
; ------------------------- код ------------------------
section '.code' code readable executable
start:
invoke bbBeginBlitz3D
invoke bbGraphics3D, 640, 480, 16, 3
invoke bbCreateCamera, 0 ; paerent 0
mov [camera], eax
invoke bbCreateLight, 1, 0 ; 1 - direct light, parent null
mov [light], eax
invoke bbCreateCone, 32, BBTrue, 0 ; 32 segments, solid, parent null
mov [cone], eax
invoke bbPositionEntity, [cone], -3f, 0f, 5f
invoke bbEntityColor, [cone], 255f, 32f, 32f
invoke bbCreateCube, 0 ; parent null
mov [cube], eax
invoke bbPositionEntity, [cube], 0f, 0f, 6.5f
invoke bbEntityColor, [cube], 70f, 155f, 30f
invoke bbCreateSphere, 7, 0 ; detail level - 7, parent null
mov [sphere], eax
invoke bbPositionEntity, [sphere], 3f, 0f, 5f
invoke bbEntityColor, [sphere], 0f, 128f, 255f
main_loop:
invoke bbKeyHit, KEY_ESCAPE ; Wait Esc
or eax, eax
jnz exit_from_main_loop
invoke bbTurnEntity, [cube], 0.5f, 2f, 1f
invoke bbTurnEntity, [cone], 0f, 1f, 0.5f
invoke bbTurnEntity, [sphere], 2f, 1f, 0.5f
invoke bbRenderWorld ; Render world to buffer
invoke bbFlip ; Flip buffers
jmp main_loop;
exit_from_main_loop:
invoke bbEndBlitz3D
invoke ExitProcess,0
section '.idata' import data readable writeable
include 'imp.inc'
section '.rsrc' resource data readable
include 'res.inc'