Вот, в комплекте с фасм идет пример на ОпенГЛ... Но, когда пытаюсь изменить положение плоскости по оси Z, плоскость исчезает, а не удаляется(в делфи аналог этой проги работает как часы).... Подскажите где что? Код (ASM): ; OpenGL programming example format PE GUI 4.0 entry start include '..//include/win32a.inc' include 'opengl.inc' section '.text' code readable executable start: invoke GetModuleHandle,0 mov [wc.hInstance],eax invoke LoadIcon,0,IDI_APPLICATION mov [wc.hIcon],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax invoke RegisterClass,wc invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS,16,16,432,432,NULL,NULL,[wc.hInstance],NULL mov [hwnd],eax msg_loop: invoke GetMessage,msg,NULL,0,0 or eax,eax jz end_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop end_loop: invoke ExitProcess,[msg.wParam] proc WindowProc hwnd,wmsg,wparam,lparam push ebx esi edi cmp [wmsg],WM_CREATE je .wmcreate cmp [wmsg],WM_SIZE je .wmsize cmp [wmsg],WM_PAINT je .wmpaint cmp [wmsg],WM_KEYDOWN je .wmkeydown cmp [wmsg],WM_DESTROY je .wmdestroy .defwndproc: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp .finish .wmcreate: invoke GetDC,[hwnd] mov [hdc],eax mov edi,pfd mov ecx,sizeof.PIXELFORMATDESCRIPTOR shr 2 xor eax,eax rep stosd mov [pfd.nSize],sizeof.PIXELFORMATDESCRIPTOR mov [pfd.nVersion],1 mov [pfd.dwFlags],PFD_SUPPORT_OPENGL+PFD_DOUBLEBUFFER+PFD_DRAW_TO_WINDOW mov [pfd.iLayerType],PFD_MAIN_PLANE mov [pfd.iPixelType],PFD_TYPE_RGBA mov [pfd.cColorBits],16 mov [pfd.cDepthBits],16 mov [pfd.cAccumBits],0 mov [pfd.cStencilBits],0 invoke ChoosePixelFormat,[hdc],pfd invoke SetPixelFormat,[hdc],eax,pfd invoke wglCreateContext,[hdc] mov [hrc],eax invoke wglMakeCurrent,[hdc],[hrc] invoke GetClientRect,[hwnd],rc invoke glViewport,0,0,[rc.right],[rc.bottom] invoke GetTickCount mov [clock],eax xor eax,eax jmp .finish .wmsize: invoke GetClientRect,[hwnd],rc invoke glViewport,0,0,[rc.right],[rc.bottom] xor eax,eax jmp .finish .wmpaint: invoke GetTickCount sub eax,[clock] cmp eax,10 jb .animation_ok add [clock],eax invoke glRotatef,[theta],0.0,0.0,1.0 .animation_ok: invoke glClear,GL_COLOR_BUFFER_BIT invoke glBegin,GL_QUADS invoke glColor3f,1.0,0.1,0.1 invoke glVertex3f,-0.6,-0.6,0.0 invoke glColor3f,0.1,0.1,0.1 invoke glVertex3f,0.6,-0.6,0.0 invoke glColor3f,0.1,0.1,1.0 invoke glVertex3f,0.6,0.6,0.0 invoke glColor3f,1.0,0.1,1.0 invoke glVertex3f,-0.6,0.6,0.0 invoke glEnd invoke SwapBuffers,[hdc] xor eax,eax jmp .finish .wmkeydown: cmp [wparam],VK_ESCAPE jne .defwndproc .wmdestroy: invoke wglMakeCurrent,0,0 invoke wglDeleteContext,[hrc] invoke ReleaseDC,[hwnd],[hdc] invoke PostQuitMessage,0 xor eax,eax .finish: pop edi esi ebx ret endp section '.data' data readable writeable _title db 'OpenGL example',0 _class db 'FASMOPENGL32',0 theta GLfloat 0.6 wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,NULL,NULL,_class hwnd dd ? hdc dd ? hrc dd ? msg MSG rc RECT pfd PIXELFORMATDESCRIPTOR clock dd ?
Кароче, где функция glRotatef(), если ее заменить glTranslatef(), сразу лагает.... Ну че никто не знает???????????
ruextra Телепаты в отпуске. Приведи код с glTranslatef. Навскидку: у glRotate 4 аргумента, а у glTranslatef всего 3. Если просто заменить, то сразу слагает, не вопрос. Стек съедет. glTranslate изменяет масштаб. Если она стоит вместо glRotate, то вызывается каждые 10 мс. то есть 100 раз в секунду! И через секунду твой квадратик или сжимается, или расширяется так, что не видно ничего. Ну это если ты там коэфиценты масштабирования такие указал...