Skip to content
This repository has been archived by the owner on Feb 12, 2022. It is now read-only.

Commit

Permalink
Adição de projecto de exemplo da biblioteca CGGL. Este exemplo mostra…
Browse files Browse the repository at this point in the history
… uma bola a saltar em cima de um plano (com atenuação de altura de acordo com efeito da gravidade).
  • Loading branch information
cguedes committed Dec 16, 2011
1 parent ec78477 commit 50ae7a9
Show file tree
Hide file tree
Showing 9 changed files with 400 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,4 +62,5 @@ OpenGL/Demos/_ReSharper.Demos


OpenGL/Demos/Demos.opensdf
OpenGL/Demos/CGGL/CGGL_Engine/Debug
OpenGL/Demos/CGGL/CGGL_Engine/Debug
OpenGL/Demos/CGGL/BouncingBall/Debug
60 changes: 60 additions & 0 deletions OpenGL/Demos/CGGL/BouncingBall/Ball.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#include "ball.h"

using namespace cggl;

Ball::Ball(Vector3 pos, float rad): position(pos), radius(rad){

velocity = Vector3(0,20,0);
}

//void Ball::Update(int deltaTimeMilis){
// Object::Update(deltaTimeMilis);
// double t = deltaTimeMilis/(float)1000;
//
//}

void Ball::Draw(){
Object::Draw();
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glPushMatrix();
float diffuseColor[3] = { 0.8, 0, 0 };
glColor3f(diffuseColor[0], diffuseColor[1], diffuseColor[2]);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuseColor);

glTranslated(position.x, position.y, position.z);
glutSolidSphere(radius, 30, 30);
glPopMatrix();
glDisable(GL_LIGHTING);
}


void Ball::Update(int deltaTimeMilis){
Object::Update(deltaTimeMilis);

double t = deltaTimeMilis/(float)1000;

double mass = 0.5;
// a = F / m
double fg = mass * -9.8; // fg = m*g
double fdy = -6*3.14*radius*0.00001827*velocity.y;
double fdx = -6*3.14*radius*0.00001827*velocity.x;

double ax = (fdx) / mass;
double ay = (fg + fdy) / mass;

// v = v0 + a*t
velocity.y += ay * t;
velocity.x += ax * t; // air resistance

// x = x0+ vo*t + 0.5*a*t*t
position.y = position.y + velocity.y*t + 0.5 * ay * t * t;
position.x = position.x + velocity.x*t;

if(position.y <= radius){
position.y = radius;
velocity.y = -velocity.y * .8; // COR - coeficiente de restituicao (simulacao)
velocity.x = velocity.x * .8; // atrito (simulacao)
}

}
33 changes: 33 additions & 0 deletions OpenGL/Demos/CGGL/BouncingBall/Ball.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**********************************************************************************
* Definição do objecto Ball.
*
*
* --------------------------------------------------------------------------------
* Instituto Superior de Engenharia de Lisboa
* Departamento de Engenharia de Electrónica e Telecomunicações e de Computadores
* Licenciatura em Engenharia Informática e de Computadores
* Computação Gráfica
*
* (c) Carlos Guedes e José Branco - Novembro de 2007
**********************************************************************************/
#ifndef _BALL_H_
#define _BALL_H_

#include <GL/glut.h>
#include <cggl/App.h>


class Ball : public cggl::Object {

cggl::Vector3 position; // posição inicial
float radius;
cggl::Vector3 velocity;

public:
Ball(cggl::Vector3 pos, float rad);

void Update(int deltaTimeMilis);
void Draw();
};

#endif //_BALL_H_
104 changes: 104 additions & 0 deletions OpenGL/Demos/CGGL/BouncingBall/BouncingBall.vcxproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{94AB1AE8-D1DB-4122-A6B3-C520BED0F44C}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>BouncingBall</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(SolutionDir)dependencies\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>../../Dependencies/lib/cggl_engine.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\Dependencies\include\cggl\App.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\Camera.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\FPSCounter.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\glm.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\Globals.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\GLTexture.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\Input.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\MathUtils.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\Model3DS.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\Object.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\ObjModel.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\SkyBox.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\TextureLoader.h" />
<ClInclude Include="..\..\Dependencies\include\cggl\TextWriter.h" />
<ClInclude Include="Ball.h" />
<ClInclude Include="BouncingBallApp.h" />
<ClInclude Include="SimplePlane.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Ball.cpp" />
<ClCompile Include="BouncingBallApp.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
78 changes: 78 additions & 0 deletions OpenGL/Demos/CGGL/BouncingBall/BouncingBall.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\Dependencies\include\cggl\Input.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\MathUtils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\Model3DS.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\Object.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\ObjModel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\SkyBox.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\TextureLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\TextWriter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\App.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\Camera.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\FPSCounter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\glm.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\Globals.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\Dependencies\include\cggl\GLTexture.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Ball.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="SimplePlane.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="BouncingBallApp.h">
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Ball.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BouncingBallApp.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
36 changes: 36 additions & 0 deletions OpenGL/Demos/CGGL/BouncingBall/BouncingBallApp.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include <GL/glut.h>
#include <cggl/App.h>
#include <cggl/FPSCounter.h>

#include "BouncingBallApp.h"
#include "Ball.h"
#include "SimplePlane.h"

using namespace cggl;

void BouncingBallApp::CreateScene() {
App::Camera->LookAt(Vector3(0, 20, 50), Vector3(0,20,0), Vector3(0,1,0));

RegisterObject( new Ball(Vector3(-10, 2, 0), 2) );

RegisterObject( new SimplePlane(0, 100) );
RegisterObject( new FPSCounter() );
}

void BouncingBallApp::Draw(){
App::Draw();
}

void BouncingBallApp::Update(int deltaTimeMilis) {
App::Update(deltaTimeMilis);
}




// ------------------------------------------------------------------------------------
void main(int argc, char **argv) {
BouncingBallApp app;
app.Run(argc, argv);
}
// ------------------------------------------------------------------------------------
27 changes: 27 additions & 0 deletions OpenGL/Demos/CGGL/BouncingBall/BouncingBallApp.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**********************************************************************************
* Aplicação específica a implementar: AP3.
* Serve como exemplo de utilização de fisica em objectos.
*
* A aplicação representa uma cena que contém uma bola
* a saltar na vertical, em cima de um plano segundo as leis da fisica.
*
*
* --------------------------------------------------------------------------------
* Instituto Superior de Engenharia de Lisboa
* Departamento de Engenharia de Electrónica e Telecomunicações e de Computadores
* Licenciatura em Engenharia Informática e de Computadores
* Computação Gráfica
*
* (c) Carlos Guedes e José Branco - Novembro de 2007
**********************************************************************************/

#include <GL/glut.h>
#include <cggl/App.h>

class BouncingBallApp : public cggl::App {

public:
void CreateScene();
void Draw();
void Update(int deltaTimeMilis);
};
Loading

0 comments on commit 50ae7a9

Please sign in to comment.