[ASM]Mały problem z kamerą w OpenGL

0

Postanowiłem się zająć OpenGLem w Asmie i próbuję napisać( kożystając z tutka) ćwiczeniowy program i natknąłem się na kłopot, mianowicie , jeśli obracam kamerę( na razie tylko taki ruch mam) to po pewnym czasie zaczyna się obracać w drugą stronę... Oto kod:

.386
.model flat,STDCALL
.data
INCLUDE OGL.INC
;-------------------------------------------------
CGLW_height	equ	600
CGLW_width	equ	800
CGLW_bits	equ	32
Deg             dd      0.0174

x               dd      0.0
y               dd      0.0
z               dd      0.0

px              dd      0.0
py              dd      0.0
pz              dd      0.0

ox              dd      0.0
oy              dd      1.0
oz              dd      0.0

var             dd      0.0
l               dd      90.0
ang             dd      0.0
rs              dd      1.0
V               dd      0.1
Vr              dd      0.4
;-------------------------------------------------
.code
START:
INCLUDE WIN.ASM
;-------------------------------------------------
DrawGLScene:
  call	glLoadIdentity
  push	GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT
  call	glClear

  mov     eax,  x
  mov     var, eax
  addfl   var,  l
  mov     eax,  ang
  mov     px,   eax
  mulfl   px,   Deg
  sinfl   px
  mulfl   px,   var

  mov     eax,  z
  mov     var,  eax
  addfl   var,  l
  mov     pz,   0
  addfl   pz,   ang
  mulfl   pz,   Deg
  cosfl   pz
  addfl   pz,   var

  pushdf  oz 
  pushdf  oy
  pushdf  ox
  pushdf  pz
  pushdf  py
  pushdf  px
  pushdf  z
  pushdf  y
  pushdf  x

  call    gluLookAt

call glBegin,GL_QUADS

  Color3f   0.0    0.0    1.0
  Vertex3f -2.0    0.0    10.0
  Color3f   11.0   0.0    0.0
  Vertex3f -2.0    2.0    10.0
  Color3f   0.0    1.0    0.0
  Vertex3f  2.0    2.0    10.0
  Color3f   0.0    1.0    1.0
  Vertex3f  2.0    0.0    10.0

call glEnd

;--------------------------------------------------
keyboard:
  cmp byte ptr KEY[VK_ESCAPE],TRUE
  jne nie_esc
   call theend
  nie_esc:

  cmp byte ptr KEY[VK_Q], TRUE
  je  onQ

  cmp byte ptr KEY[VK_E], TRUE
  je  onE

ret

onQ:
  addfl  ang,  Vr  
ret

onE:
  subfl  ang,  Vr
ret

theend:
  mov done,TRUE
ret
;---------------------------------------------------
END START

Czy ktoś wie jak rozwiązać ten problem? Nie znam w ogóle trygonometrii, więc potrzebuję waszej pomocy( najprawdopodobniej w sinusach i cosinusach pies pogrzebany)

0

programowanie w opengl w asmie jest bardzo karkolomnym zadaniem. lepiej sie przesiadz na c++ . przy wiekszych projektach w asmie bys sobie nie poradzil z objeciem tego w calosci. no jak ci sie uda jakis wiekszy dzialajacy projetk napisac w asmie to ci zloze gratulacje - szczegolnie teraz jak widze jak to robisz-.

ps. kurde shift mi nie dziala

0

Napisac mozna, ale nie w tej formie, jak do tego podchodzi autor pytania.
Asm umozliwia pisanie niestrukturalne, strukturalne, obiektowe i kto wie jeszcze jakie.
Ty najwyrazniej wybrales najgorsze z mozliwych, dla niewprawionych programistow - niestrukturalne.
Skaczesz do obslugi klawisza przez je, a wracasz przez ret (czyli gdzies jeszcze wczesniej. Lepiej by bylo, abys to przynajmniej strukturalnie rozpisal. Byloby znacznie czytelniejsze. Optymalizacje wykonuj juz pozniej, aby nie zmniejszac czytelnosci obrazu.
Podziel sobie na procedurki caly program i potem wklej tutaj (o ile wczesniej sam nie zobaczysz jakiegos glupiego bledu :) ).

Rusek: nie zniechecaj go. Jezeli pocwiczy pisanie troszke czytelniejszych i przemyslanych programow oraz odrobinke zabawe z FPU, moze uzyskac ciekawe wyniki. Jezeli rozdzieli sobie program na male czesci, tak, jakby to robil piszac np. w C, to pozniej zapisanie poszczegolnych fragmentow to bajka :)

0

więc sugerujesz, aby taką błachostką zająć się na końcu? Można i tak... Dzięki za radę... Być może się zastosuje :P

0

więc sugerujesz, aby taką błachostką zająć się na końcu?

Optymalizacja nie jest blahostka, ale zbyt wczesna zaciemnia obraz calosci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1