Графика в OpenGL

 

Введение


OpenGL (Open Graphics Library - открытая графическая библиотека, графическое API) - спецификация, определяющая независимый от языка программирования <#"justify">1. Технические характеристики


.1 Цель работы

директива программа архитектура оpengl

Курсовая работа заключается в получении практических навыков по работе с графикой Windows и OpenGL, самостоятельном изучении 32-битного программирования на ассемблере под Windows и в конечном итоге написание программы, демонстрирующей усвоение полученных знаний.


1.2 Описание используемых функций и директивы INVOKE


.2.1 GetModuleHandle

Функция GetModuleHandle [2] извлекает дескриптор указанного модуля, если файл был отображен в адресном пространстве вызывающего процесса.

Синтаксис

HMODULE GetModuleHandle

LPCTSTR lpModuleName);

Параметры

Указатель на символьную строку с нулем в конце, которая содержит имя модули (или.dll или.exe файл). Если расширение имени файла опускается, в конец добавляется заданное по умолчанию библиотечное расширение.dll. Символьная строка имени файла может включать в себя конечный символ точки (.), который указывает, что имя модуля не имеет расширения. Строка не должна определять путь. Когда определяется путь, убедитесь, что используются обратные слэши (\), а не прямые слэши (/). Имя сравнивается (независимо от ситуации) с именами модулей в текущий момент отображаемыми в адресном пространстве вызывающего процесса.

Если этот параметр - NULL, GetModuleHandle возвращает дескриптор файла, используемый, чтобы создать вызывающий процесс (.exe файл).

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение - дескриптор указанного модули.

Если функция завершается ошибкой, возвращаемое значение - NULL.


1.2.2 GetCommandLine

GetCommandLine [3] Возвращает командную строку для текущего процесса.

Собственная функция GetCommandLine возвращает указатель на буфер, выделенный операционной системой, которая является его владельцем. При маршалинге строк, как возвращаемых типов, упаковщик взаимодействия, что он должен с помощью функции освободить память, на которую указывал исходный тип LPTSTR. Чтобы предотвратить автоматическую очистку памяти упаковщиком, управляемый прототип GetCommandLine возвращает вместо строки тип IntPtr <#"justify">1.2.5 LoadMenu

Функция LoadMenu [6] загружает заданный ресурс меню из исполняемого (.exe) файла программы, связанного с экземпляром приложения.

СинтаксисLoadMenu(hInstance,lpMenuName

);

Параметры

Дескриптор модуля, содержащего ресурс меню, который будет загружен.

Указатель на символьную строку с нулем в конце, которая содержит имя ресурса меню. Или же, этот параметр может состоять из идентификатора ресурса в младшем слове и нулей в старшем слове. Чтобы создать это значение, используйте макрокоманду MAKEINTRESOURCE.

Возвращаемые значения

Если функция завершается успешно, возвращаемое значение - дескриптор ресурса меню.

Если функция завершается ошибкой, возвращаемое значение - ПУСТО (NULL).


1.2.6 SetMenu

Функция SetMenu [7] назначает новое меню для заданного окна.

СинтаксисSetMenu(hWnd,hMenu);

Параметры

Дескриптор окна, к которому назначается меню.

Дескриптор нового меню. Если этот параметр имеет значение ПУСТО (NULL), текущее меню окна удаляется.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - не нуль.

Если функция завершается ошибкой, величина возвращаемого значения - нуль. Чтобы получить дополнительные данные об ошибке, вызовите GetLastError <#"justify">void PostQuitMessage(nExitCode

);

Параметры

Определяет код завершения прикладной программы. Это значение используется как параметр wParam сообщения WM_QUIT <#"justify">LRESULT DefWindowProchWnd, UINT Msg, WPARAM wParam, LPARAM lParam;

Параметры

Дескриптор оконной процедуры, которая получает сообщение.

Определяет сообщение.

Определяет дополнительную информацию о сообщении. Содержание этого параметра зависит от значения параметра Msg.

Определяет дополнительную информацию о сообщении. Содержание этого параметра зависит от значения параметра Msg.

Возвращаемые значения

Величина возвращаемого значения определяет результат обработки сообщения и зависит от сообщения.


1.2.17 WglCreateContext

WglCreateContext [18] функция создает новый контекст рендеринга OpenGL, которая подходит для нанесения на устройство ссылается HDC. Оказание контексте имеет тот же формат пикселов, что и контекст устройства.

СинтаксисWINAPI wglCreateContext (HDC

);

Параметрына контекст устройства, для которых функция создает подходящую оказания OpenGL контекст.

Возвращаемое значение

Если функция завершается успешно, возвращаемое значение является правильным дескриптором контекста рендеринга OpenGL.

Если функция завершается ошибкой, возвращаемое значение NULL. Чтобы получить расширенную информацию об ошибке, вызовите GetLastError <#"justify">2. Текст программы


.1 Описание


Оpengl.asm - содержит процедуры WinMain - она создает окно, WndProc - обрабатывает поступающие сообщения, RegisterWinClass - регистрация класса окна и TopXY - необходима для позиционирования окна на экране.inc - содержит список подключаемых библиотек, необходимый минимальный набор макросов, секцию.data, где инициализируются необходимы переменные, список подключаемых файлов - здесь он один - это opngl.asm и прототипы функций..asm Именно он подключает и инициализирует OpenGL. В секции данных определяются три идентификатора - окна программы, связки с OpenGL и формата экранных пикселей. Затем - прототипы функций DrawScene - именно она отвечает за события на экране и Init, которая инициализирует OpenGL. Функция Init вызывается при создании окна.


2.2 opengl.inc


include c:\os\masm32\include\windows.incc:\os\masm32\include\user32.incc:\os\masm32\include\kernel32.incc:\os\masm32\include\gdi32.incc:\os\masm32\include\opengl32.incc:\os\masm32\include\glu32.incc:\os\masm32\include\masm32.incc:\os\masm32\lib\user32.libc:\os\masm32\lib\kernel32.libc:\os\masm32\lib\gdi32.libc:\os\masm32\lib\opengl32.libc:\os\masm32\lib\glu32.libc:\os\masm32\lib\masm32.lib

; Объявление локальных макросов

szText MACRO Name,Text:VARARG; Дает возможность определить последовательность байт (символов) - содержимое параметра Text, закачивающуюся 0х0 (С-строка) с именем, определяемым параметром Name. (Макрокоманда или макрос - программный <#"justify">2.4 opengl.asm


.386;тип процессора

.model flat,stdcall; модель памяти и вызова подпрограмм; объявление включаемых (заголовочных) файлов, макросов, макроопределений,; также внешних определенийcasemap:none; CaseMap: NONE (эквивалентно / Cx) сохраняет случае идентификаторы в общественных местах, COMM, EXTERNDEF, EXTERN, PROTO и PROC деклараций.

include opengl.inc

; ###########################################################

.code:GetModuleHandle, NULL hInstance, eax; hInstance - уникальный идентификатор текущего экземпляра приложения

invoke GetCommandLineCommandLine, eaxWinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULTExitProcess,eax

; ############################################################proc hInst:DWORD,:DWORD,:DWORD,:DWORDmsg:MSGWwd:DWORDWht:DWORDWtx:DWORDWty:DWORDLoadIcon,hInst,500hIcon, eaxLoadCursor,NULL,IDC_ARROWhCursor, eaxRegisterWinClass,ADDR WndProc,ADDR szClassName,,hCursor,COLOR_BTNFACE+1Wwd,500Wht,500GetSystemMetrics,SM_CXSCREENTopXY,Wwd,eaxWtx, eaxGetSystemMetrics,SM_CYSCREENTopXY,Wht,eaxWty, eaxCreateWindowEx,WS_EX_LEFT,szClassName,szDisplayName,_OVERLAPPEDWINDOW,,Wty,Wwd,Wht,,NULL,,NULLhWnd,eaxLoadMenu,hInst,600SetMenu,hWnd,eaxShowWindow,hWnd,SW_SHOWNORMALUpdateWindow,hWnd:GetMessage,ADDR msg,NULL,0,0eax, 0ExitLoopDrawSceneTranslateMessage, ADDR msgDispatchMessage, ADDR msgStartLoop:msg.wParamendp

; ############################################################PROC hWin: DWORD,uMsg: DWORD,wParam:DWORD, lParam: DWORDrc:RECT

.if uMsg == WM_COMMAND

.if wParam == 1000SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL

.endif

.elseif uMsg == WM_CREATEInit,hWin


.elseif uMsg == WM_SIZEGetClientRect,hWin,ADDR rcResizeObject,rc.right,rc.bottom0

.elseif uMsg == WM_CLOSEeax,OpenDCeax,0outDCwglDeleteContext,OpenDC

;Обращаться в контексте OpenGL рендеринг, что функция для удаления.

;Возвращаемое значение

;Если функция завершается успешно, возвращаемое значение TRUE.

;Если функция завершается ошибкой, возвращаемое значение FALSE.

outDC:

invoke ReleaseDC,hWin,MainHDCDestroyWindow,hWin0

.elseif uMsg == WM_DESTROYPostQuitMessage,NULL0

.endifDefWindowProc,hWin,uMsg,wParam,lParamENDP

; ############################################################proc wDim:DWORD, sDim:DWORDsDim, 1; divide screen dimension by 2 (Разрыва размеров для экрана на 2)wDim, 1; divide window dimension by 2eax, wDim; copy window dimension into eaxsDim, eax; sub half win dimension from half screen dimensionsDimendp

; ############################################################proc lpWndProc:DWORD, lpClassName:DWORD,:DWORD, Cursor:DWORD, bColor:DWORDwc:WNDCLASSEXwc.cbSize, sizeof WNDCLASSEXwc.style, CS_VREDRAW or \_HREDRAWm wc.lpfnWndProc, lpWndProcwc.cbClsExtra, NULLwc.cbWndExtra, NULLm wc.hInstance, hInstancem wc.hbrBackground, bColorwc.lpszMenuName, NULLm wc.lpszClassName, lpClassNamem wc.hIcon, Iconm wc.hCursor, Cursorm wc.hIconSm, IconRegisterClassEx, ADDR wcendp

; ############################################################start


2.5 Результаты выполнения программы


Рис. 3.1


Выводы


В ходе выполнения курсовой работы были изучены основы работы с OpenGL, была написана программа на MASM.



Введение OpenGL (Open Graphics Library - открытая графическая библиотека, графическое API) - спецификация, определяющая независимый от языка программиров

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2019 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ