Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 19

Computao Grfica

Leonardo Bravo Estcio - leonardo.bravo.estacio@gmail.com


Centro Universitrio da Grande Dourados UNIGRAN
Curso - Engenharia de Software
04/08/2016
+

Tpicos

Aula de hoje:
Introduo OpenGL.

Introduo OpenGL
Comeando por baixo.

Instalando o FreeGlut no Codeblocks


Baixem o Codeblocks com o MinGW

Instalando o FreeGlut no Codeblocks


http://www.transmissionzero.co.uk/software/freeglut-devel/

Instalando o FreeGlut no Codeblocks


Abra o arquivo do freeglut baixado e copie todos os arquivos para:
C:\Program Files (x86)\CodeBlocks\MinGW

Instalando o FreeGlut no Codeblocks


Abra o arquivo do freeglut baixado. Dentro da pasta bin h o
arquivo freeglut.dll, copie ele para pasta System32 do Windows.

8
////////////////////////////////////////////////////////////////////////////////
//
// GLUT project wizard
//
////////////////////////////////////////////////////////////////////////////////
// globals
GlutPathDefault <- _T("$(#glut)");
GlutPathDefaultInc <- _T("$(#glut.include)");
GlutPathDefaultLib <- _T("$(#glut.lib)");
GlutPath <- _T("");
function BeginWizard()
{
local intro_msg = _T("Welcome to the new GLUT project wizard!\n\n" +
"This wizard will guide you to create a new project\n" +
"using the GLUT OpenGL extensions.\n\n" +
"When you 're ready to proceed, please click \"Next\"...");

Arrumando o arquivo wizard.script


Abra o bloco de notas como administrador.

local glutpath_descr = _T("Please select the location of GLUT on your computer.\n" +


"This is the top-level folder where GLUT was installed (unpacked).\n" +
"To help you, this folder must contain the subfolders\n" +
"\"include\" and \"lib\".");
Wizard.AddInfoPage(_T("GlutIntro"), intro_msg);
Wizard.AddProjectPathPage();
if (PLATFORM == PLATFORM_MAC)
{
GlutPathDefault="/System/Library/Frameworks/GLUT.framework";
}
else
Wizard.AddGenericSelectPathPage(_T("GlutPath"), glutpath_descr, _T("Please select GLUT's location:"), GlutPathDefault);
Wizard.AddCompilerPage(_T(""), _T("*"), true, true);
}
////////////////////////////////////////////////////////////////////////////////
// GLUT's path page
////////////////////////////////////////////////////////////////////////////////
function OnLeave_GlutPath(fwd)
{
if (fwd)
{
local dir
= Wizard.GetTextControlValue(_T("txtFolder")); // txtFolder is the text control in GenericSelectPathPage
local dir_nomacro = VerifyDirectory(dir);
if (dir_nomacro.IsEmpty())
return false;
// verify include dependencies
local dir_nomacro_inc = GetCompilerIncludeDir(dir, GlutPathDefault, GlutPathDefaultInc);
if (dir_nomacro_inc.IsEmpty())
return false;
if (!VerifyFile(dir_nomacro_inc + wxFILE_SEP_PATH + _T("GL"), _T("glut.h"), _T("GLUT's include"))) return false;
// verify library dependencies
local dir_nomacro_lib = GetCompilerLibDir(dir, GlutPathDefault, GlutPathDefaultLib);
if (dir_nomacro_lib.IsEmpty())
return false;
if (PLATFORM == PLATFORM_MSW)
{
if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return false;
}
else
{
if (!VerifyLibFile(dir_nomacro_lib, _T("glut"), _T("GLUT's"))) return false;
}

Abra o arquivo:
C:\Program Files
(x86)\CodeBlocks\share\CodeBlocks\templates\wizard\glut\wizard.
script

GlutPath = dir; // Remember the original selection.


local is_macro = _T("");
// try to resolve the include directory as macro
is_macro = GetCompilerIncludeMacro(dir, GlutPathDefault, GlutPathDefaultInc);
if (is_macro.IsEmpty())
{
// not possible -> use the real inc path we had computed instead
GlutPathDefaultInc = dir_nomacro_inc;
}
// try to resolve the library directory as macro
is_macro = GetCompilerLibMacro(dir, GlutPathDefault, GlutPathDefaultLib);
if (is_macro.IsEmpty())
{
// not possible -> use the real lib path we had computed instead
GlutPathDefaultLib = dir_nomacro_lib;
}
}
return true;
}
// return the files this project contains
function GetFilesDir()
{
return _T("glut/files");
}
// setup the already created project
function SetupProject(project)
{
// set project options
if (PLATFORM != PLATFORM_MAC)
{
project.AddIncludeDir(GlutPathDefaultInc);
project.AddLibDir(GlutPathDefaultLib);
}
// add link libraries
if (PLATFORM == PLATFORM_MSW)
{
project.AddLinkLib(_T("freeglut"));
project.AddLinkLib(_T("opengl32"));
project.AddLinkLib(_T("glu32"));
project.AddLinkLib(_T("winmm"));
project.AddLinkLib(_T("gdi32"));
}
else if (PLATFORM == PLATFORM_MAC)
{
project.AddLinkerOption(_T("-framework GLUT"));
project.AddLinkerOption(_T("-framework OpenGL"));

Substitua o texto do arquivo pelo texto da caixa ao lado.

project.AddLinkerOption(_T("-framework Cocoa")); // GLUT dependency


}
else
{
project.AddLinkLib(_T("glut"));
project.AddLinkLib(_T("GL"));
project.AddLinkLib(_T("GLU"));
project.AddLinkLib(_T("Xxf86vm"));
}

O texto tambm pode ser encontrado aqui:

// enable compiler warnings (project-wide)


WarningsOn(project, Wizard.GetCompilerID());
// Debug
local target = project.GetBuildTarget(Wizard.GetDebugName());
if (!IsNull(target))
{
target.SetTargetType(ttConsoleOnly); // ttConsoleOnly: console for debugging
target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
target.SetWorkingDir(GlutPath + _T("/bin"));
// enable generation of debugging symbols for target
DebugSymbolsOn(target, Wizard.GetCompilerID());
}

http://wiki.codeblocks.org/index.php/Using_FreeGlut_with_Code::
Blocks

// Release
target = project.GetBuildTarget(Wizard.GetReleaseName());
if (!IsNull(target))
{
target.SetTargetType(ttExecutable); // ttExecutable: no console
target.SetOutputFilename(Wizard.GetReleaseOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
target.SetWorkingDir(GlutPath + _T("/bin"));
// enable optimizations for target
OptimizationsOn(target, Wizard.GetCompilerID());
}
return true;
}

Arrumando o arquivo glut.cbp


Abra o bloco de notas como administrador;
Abra o arquivo:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>


<CodeBlocks_project_file>
<FileVersion major="1" minor="4" />
<Project>
<Option title="glut" />
<Option pch_mode="0" />
<Option compiler="gcc" />
<Build>
<Target title="default">
<Option output="glut.exe" />
<Option type="0" />
<Option compiler="gcc" />
<Option includeInTargetAll="1" />
</Target>
</Build>
<Compiler>
<Add directory="$(#glut.include)" />
</Compiler>
<Linker>
<Add library="freeglut" />
<Add library="glu32" />
<Add library="opengl32" />
<Add library="winmm" />
<Add library="gdi32" />
<Add library="user32" />
<Add library="kernel32" />
<Add directory="$(#glut.lib)" />
</Linker>
<Unit filename="main.cpp">
<Option compilerVar="CPP" />
<Option target="default" />
</Unit>
</Project>
</CodeBlocks_project_file>

C:\Program Files
(x86)\CodeBlocks\share\CodeBlocks\templates\glut.cbp

Substitua o texto do arquivo pelo texto da caixa ao lado.


O texto tambm pode ser encontrado aqui:
http://wiki.codeblocks.org/index.php/
Using_FreeGlut_with_Code::Blocks

10

OpenGL

11

OpenGL
OpenGL comumente chamado de API (application programming
interface): uma interface uma coleo de rotinas que o
programador pode chamar, em conjunto com um modelo de como
essa rotina trabalha em conjunto para produzir determinado grfico.
O programador apenas enxerga a interface, e desta forma
blindado de ter que lidar com hardwares especficos ou
peculiaridades de software que implicam no sistema grfico.

12

OpenGL
OpenGL mais poderoso quando estamos desenhando imagens
de complexas cenas em 3D, como veremos no futuro. Mas,
funciona bem para desenhos em 2D.
Comearemos utilizando as construes mais simples do OpenGL
visando a simplicidade. Depois, quando escrevermos programas
para produzir grficos 3D elaborados veremos os recursos mais
poderosos do OpenGL.

13

Registrando evento de aes


int main()
{
// inicializar outras coisas
// criar a janela
glutDisplayFunc(myDisplay); // registra o evento de redesenhar
glutReshapeFunc(myReshape); // registra o evento de redimensionar janela
glutMouseFunc(myMouse); // registra o evento de aes de mouse
glutKeyboardFunc(myKeyboard); // registra o evento de aes de teclado
glutMainLoop(); // Iniciar o loop do programa
return 0;
}

14

Abrindo uma janela para desenho


A primeira tarefa abrir uma janela para desenho. Essa tarefa
totalmente dependente do sistema operacional para ser realizada.
Mas o prprio OpenGL j faz todo tratamento necessrio para
deixar o cdigo portvel para diferentes sistemas.

15

Abrindo uma janela para desenho


int main(int argc, char** argv)
{
glutInit(&argc, argv); // inicializa o OpenGL
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // Seta o modo de visualizao
glutInitWindowSize(640, 480); // Seta o tamanho da janela (desenhar para explicar)
glutInitWindowPosition(100, 150); // Seta a posio inicial da janela
glutCreateWindow("Exemplo 1"); // Cria a janela com o ttulo passado por argumento
glutDisplayFunc(myDisplay); // registra o evento de redesenhar
glutMainLoop(); // Iniciar o loop do programa
return 0;
}

16

Exemplo 1

17

Exemplo 2

18

Exemplo 3

At mais galera!
Computao Grfica

Leonardo Bravo Estcio - leonardo.bravo.estacio@gmail.com


Centro Universitrio da Grande Dourados UNIGRAN
Curso - Engenharia de Software
04/08/2016
+

You might also like