OpenGL gluLookAt crash - вопрос новичка - PullRequest
1 голос
/ 01 марта 2011

Мне нужна помощь с функцией gluLookAt на ассемблере. Я очень новичок в asm, и это только модифицированный пример из FASM, но когда программа переходит к моей функции, она падает без причины.

Весь код: http://pastebin.com/6UpkutWV

Мой код: строки 86 - 90 (не так много, но достаточно, чтобы вызвать проблемы: P)

Первый вызов вызывает сбой. Я собираю с FASM.

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Не будучи экспертом FASM, ваши двойники объявляются как числа с плавающей точкой в ​​строках 166–169, поэтому, по-видимому, для каждого аргумента вы пытаетесь прочитать и передать 64 бита из области, в которой соответствующие числа хранятся всего в 32?

В противном случае ваши параметры для gluLookAt кажутся правильными.Вы указываете на (2, 0, 1), смотрите на (0, 0, 0), когда (0, 1, 0) вверх.Итак, вы встретили единственное ограничение, требуемое gluLookAt для его документированного поведения - чтобы вектор от глаза к предмету, на который он смотрит, и вектор вверх не были параллельными.

0 голосов
/ 02 марта 2011

Посмотрите на http://flatassembler.net/docs.php?article=win32#2

Кажется, ваша проблема в вызове gluLookAt, так как вы передаете указатели на удвоения, но функция фактически требует, чтобы вы вместо этого передавали фактические данные в стек.

Правильный вызов (после замены "include 'win32a.inc'" на "include" win32ax.inc '"(обратите внимание на" x "):

invoke gluLookAt, double [double2], double [double0], double [double0_5], double [double0], double [double0], double [double0], double [double0], double [double1], double [double0]

Также вам необходимоисправьте ваши данные, потому что вы объявили их с неправильным типом (как сказал Томми), но кроме того вы забыли использовать литералы с плавающей точкой (GLdouble определяется как «dq», поэтому ассемблер не может сделать вывод, что данные должны храниться как double)Правильный код для переменных таков:

  theta GLfloat 5.0
  double0_5 GLdouble 1.0
  double0 GLdouble 0.0
  double1 GLdouble 1.0
  double2 GLdouble 2.0

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...