Тема: Asm
Показать сообщение отдельно
Старый 06.05.2023, 13:41   #9
Evgen
Разработчик
 
Аватар для Evgen
 
Регистрация: 12.01.2011
Адрес: Moscow
Сообщений: 419
Написано 68 полезных сообщений
(для 100 пользователей)
Ответ: Asm

Что-то я эту тему как-то пропустил. 2009 год... Blitz3D + Ассемблер под Windows вот это франкенштейн...)

Сообщение от Артем Валерьевич Посмотреть сообщение
Есть, заработало, только теперь ругается на Parent Entity.
Если методы типа invoke bbCreateLight , invoke bbCreateCamera и подобные
в ассемблерном коде не содержат параметров то это по какой-то причине
приводит к возникновению ошибки "Parent entity does not exist"

Исправляется просто добавлением ,0 в конце
Хотя в документации четко написано что параметр parent опициональный.
Возможно это как-то связанно с самим механизмом invoke,
может какая-то неразбериха в стеке возникает, не знаю.

invoke bbCreateCube, 0
Вообще, то что касается необязательных параметров для функций 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'
Миниатюры
Нажмите на изображение для увеличения
Название: B3DFASM.gif
Просмотров: 410
Размер:	341.2 Кб
ID:	23395  
(Offline)
 
Ответить с цитированием