commit
						233dceb002
					
				@ -0,0 +1 @@ | 
				
			||||
[Bb]in/ | 
				
			||||
@ -0,0 +1,25 @@ | 
				
			||||
#Set the project name | 
				
			||||
project(LorenzAttractor) | 
				
			||||
 | 
				
			||||
#Set the CMake version | 
				
			||||
cmake_minimum_required(VERSION 3.0) | 
				
			||||
 | 
				
			||||
#Use Conan | 
				
			||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) | 
				
			||||
conan_basic_setup() | 
				
			||||
 | 
				
			||||
#Import all source files | 
				
			||||
file(GLOB src_files "src/*.c" "src/*.cpp" ) | 
				
			||||
 | 
				
			||||
#Make a project, link in libraries from conan | 
				
			||||
ADD_EXECUTABLE(LorenzAttractor ${src_files}) | 
				
			||||
TARGET_LINK_LIBRARIES(LorenzAttractor ${CONAN_LIBS}) | 
				
			||||
 | 
				
			||||
#Set the C++ version | 
				
			||||
set (CMAKE_CXX_STANDARD 11) | 
				
			||||
 | 
				
			||||
#Set the project for VS to use. | 
				
			||||
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT "LorenzAttractor") | 
				
			||||
 | 
				
			||||
#Perform prebuild | 
				
			||||
add_custom_command(TARGET LorenzAttractor  PRE_BUILD COMMAND "pre_build_Script.bat") | 
				
			||||
@ -0,0 +1,30 @@ | 
				
			||||
@echo off | 
				
			||||
 | 
				
			||||
:start | 
				
			||||
if exist src goto changetobin | 
				
			||||
if exist .\CMakeLists.txt xcopy /q /i /e /y .\CMakeLists.txt .\bin\CMakeLists.txt | 
				
			||||
if exist .\conanfile.txt xcopy /q /i /e /y .\conanfile.txt .\bin\conanfile.txt | 
				
			||||
 | 
				
			||||
:conan | 
				
			||||
conan install --build missing | 
				
			||||
goto cmake | 
				
			||||
 | 
				
			||||
:cmake | 
				
			||||
cmake .. -G "Visual Studio 14 2015 Win64" | 
				
			||||
goto end | 
				
			||||
 | 
				
			||||
:changetobin | 
				
			||||
cd bin | 
				
			||||
goto start | 
				
			||||
 | 
				
			||||
:end | 
				
			||||
if exist bin goto quit | 
				
			||||
cd .. | 
				
			||||
goto quit | 
				
			||||
 | 
				
			||||
:quit | 
				
			||||
echo. | 
				
			||||
echo. | 
				
			||||
echo INFO: Conan and CMake ran successfully. Open up your solution file (listed below) to open your project. | 
				
			||||
echo. | 
				
			||||
dir /b *.sln | 
				
			||||
@ -0,0 +1,30 @@ | 
				
			||||
@echo off | 
				
			||||
 | 
				
			||||
:start | 
				
			||||
if exist src goto changetobin | 
				
			||||
if exist .\CMakeLists.txt xcopy /q /i /e /y .\CMakeLists.txt .\bin\CMakeLists.txt | 
				
			||||
if exist .\conanfile.txt xcopy /q /i /e /y .\conanfile.txt .\bin\conanfile.txt | 
				
			||||
 | 
				
			||||
:conan | 
				
			||||
conan install --build missing | 
				
			||||
goto cmake | 
				
			||||
 | 
				
			||||
:cmake | 
				
			||||
cmake .. -G "Visual Studio 15 2017 Win64" | 
				
			||||
goto end | 
				
			||||
 | 
				
			||||
:changetobin | 
				
			||||
cd bin | 
				
			||||
goto start | 
				
			||||
 | 
				
			||||
:end | 
				
			||||
if exist bin goto quit | 
				
			||||
cd .. | 
				
			||||
goto quit | 
				
			||||
 | 
				
			||||
:quit | 
				
			||||
echo. | 
				
			||||
echo. | 
				
			||||
echo INFO: Conan and CMake ran successfully. Open up your solution file (listed below) to open your project. | 
				
			||||
echo. | 
				
			||||
dir /b *.sln | 
				
			||||
@ -0,0 +1,15 @@ | 
				
			||||
[requires] | 
				
			||||
SDL2/2.0.5@dotfloat/stable | 
				
			||||
glew/2.0.0@coding3d/stable | 
				
			||||
glm/0.9.7.6@dlarudgus20/stable | 
				
			||||
 | 
				
			||||
[options] | 
				
			||||
SDL2:shared=True | 
				
			||||
glew:shared=False | 
				
			||||
 | 
				
			||||
[generators] | 
				
			||||
cmake | 
				
			||||
 | 
				
			||||
[imports] | 
				
			||||
bin, *.dll -> ./bin # Copies all dll files from packages bin folder to my "bin" folder | 
				
			||||
lib, *.dylib* -> ./bin # Copies all dylib files from packages lib folder to my "bin" folder | 
				
			||||
@ -0,0 +1,179 @@ | 
				
			||||
#pragma once | 
				
			||||
 | 
				
			||||
#include <cstdio> | 
				
			||||
#include <cstdlib> | 
				
			||||
#include <iostream> | 
				
			||||
#include <algorithm> | 
				
			||||
#include <fstream> | 
				
			||||
#include <ctime> | 
				
			||||
#include <vector> | 
				
			||||
#include <string> | 
				
			||||
#include <sstream> | 
				
			||||
#include <iomanip> | 
				
			||||
#include <stdexcept> | 
				
			||||
#include <map> | 
				
			||||
 | 
				
			||||
//GLEW
 | 
				
			||||
#include <GL/glew.h> | 
				
			||||
#include "windows.h" | 
				
			||||
 | 
				
			||||
//OGL Maths
 | 
				
			||||
#define GLM_FORCE_RADIANS // use radians
 | 
				
			||||
#include <glm/glm.hpp> | 
				
			||||
#include <glm/gtc/matrix_transform.hpp> | 
				
			||||
#include <glm/gtc/type_ptr.hpp> | 
				
			||||
 | 
				
			||||
#include "SDL.h" | 
				
			||||
 | 
				
			||||
#undef main | 
				
			||||
 | 
				
			||||
SDL_Window* win; | 
				
			||||
SDL_GLContext context; | 
				
			||||
GLenum glew; | 
				
			||||
std::vector<glm::vec3> points; | 
				
			||||
std::vector<glm::vec4> colors; | 
				
			||||
//constants
 | 
				
			||||
const float sigma = 10; | 
				
			||||
const float beta = 8.0 / 3.0; | 
				
			||||
const float rho = 28; | 
				
			||||
const float dt = 0.02; | 
				
			||||
bool run = true; | 
				
			||||
SDL_DisplayMode DM; | 
				
			||||
float x, y, z; | 
				
			||||
float r = 0, g = 0, b = 0; | 
				
			||||
bool rotate = false; | 
				
			||||
 | 
				
			||||
int init() | 
				
			||||
{ | 
				
			||||
	if (SDL_Init(SDL_INIT_EVERYTHING) != 0) | 
				
			||||
	{ | 
				
			||||
		printf("%s\n", SDL_GetError()); | 
				
			||||
		system("pause"); | 
				
			||||
		return 1; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	SDL_GetDesktopDisplayMode(0, &DM); | 
				
			||||
 | 
				
			||||
	win = SDL_CreateWindow("Lorenz Attractor", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, DM.w/2, DM.h/2, SDL_WINDOW_OPENGL); | 
				
			||||
	if (win == nullptr) | 
				
			||||
	{ | 
				
			||||
		printf("%s\n", SDL_GetError()); | 
				
			||||
		system("pause"); | 
				
			||||
		return 1; | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	glew = glewInit(); | 
				
			||||
	
 | 
				
			||||
	context = SDL_GL_CreateContext(win); | 
				
			||||
 | 
				
			||||
	points.push_back({ 1.0, 1.0, 1.0 }); | 
				
			||||
 | 
				
			||||
	float scalesize = 0.015; | 
				
			||||
 | 
				
			||||
	glScalef(scalesize,scalesize,scalesize); | 
				
			||||
 | 
				
			||||
	//glPointSize(2.5);
 | 
				
			||||
	
 | 
				
			||||
	return 0; | 
				
			||||
} | 
				
			||||
float amount = 0.01; | 
				
			||||
glm::vec3 getCol() | 
				
			||||
{ | 
				
			||||
	r += amount; | 
				
			||||
	if (r > 1) | 
				
			||||
	{ | 
				
			||||
		r = 1; | 
				
			||||
		g += amount; | 
				
			||||
		if (g > 1) | 
				
			||||
		{ | 
				
			||||
			g = 0; | 
				
			||||
			b += amount; | 
				
			||||
			if (b > 1) | 
				
			||||
			{ | 
				
			||||
				r = 0; | 
				
			||||
				g = 0; | 
				
			||||
				b = 0; | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
	return { r, g, b }; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
void process() | 
				
			||||
{ | 
				
			||||
	SDL_Event evnt; | 
				
			||||
	if (SDL_PollEvent(&evnt)) | 
				
			||||
	{ | 
				
			||||
		if (evnt.type == SDL_QUIT) | 
				
			||||
		{ | 
				
			||||
			run = false; | 
				
			||||
		} | 
				
			||||
		if (evnt.type == SDL_KEYDOWN) | 
				
			||||
		{ | 
				
			||||
			if (evnt.key.keysym.sym == SDLK_SPACE) | 
				
			||||
			{ | 
				
			||||
				if (rotate) | 
				
			||||
					rotate = false; | 
				
			||||
				else | 
				
			||||
					rotate = true; | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
	} | 
				
			||||
} | 
				
			||||
 | 
				
			||||
void update() | 
				
			||||
{ | 
				
			||||
	glm::vec3 point = points.back(); | 
				
			||||
 | 
				
			||||
	float dx = (sigma * (point.y - point.x)) * dt; | 
				
			||||
	float dy = (point.x * (rho - point.z) - point.y) * dt; | 
				
			||||
	float dz = (point.x * point.y - beta * point.z) * dt;	
 | 
				
			||||
 | 
				
			||||
	x = x + dx; | 
				
			||||
	y = y + dy; | 
				
			||||
	z = z + dz; | 
				
			||||
 | 
				
			||||
	glm::vec3 col = getCol(); | 
				
			||||
	points.push_back(glm::vec3(x,y,z)); | 
				
			||||
	colors.push_back(glm::vec4(col, 1)); | 
				
			||||
 | 
				
			||||
	printf("x: %f , y: %f, z: %f , r: %f , g: %f , b: %f", x, y, z, col.x, col.y, col.z); | 
				
			||||
	printf("\n"); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
void draw() | 
				
			||||
{ | 
				
			||||
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 
				
			||||
			
 | 
				
			||||
	glEnableClientState(GL_VERTEX_ARRAY); | 
				
			||||
	glEnableClientState(GL_COLOR_ARRAY); | 
				
			||||
	glVertexPointer(3, GL_FLOAT, 0, &points[0]); | 
				
			||||
	glColorPointer(4, GL_FLOAT, 0, &colors[0]); | 
				
			||||
	glDrawArrays(GL_LINE_LOOP, 0, points.capacity()); | 
				
			||||
	glDisableClientState(GL_VERTEX_ARRAY); | 
				
			||||
	glDisableClientState(GL_COLOR_ARRAY); | 
				
			||||
 | 
				
			||||
	if(rotate) | 
				
			||||
		glRotatef(1, 0, 1, 0); | 
				
			||||
 | 
				
			||||
	SDL_GL_SwapWindow(win); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
int main() | 
				
			||||
{ | 
				
			||||
	if (init() != 0) | 
				
			||||
		return 1; | 
				
			||||
 | 
				
			||||
	while (run) | 
				
			||||
	{ | 
				
			||||
		process(); | 
				
			||||
		update(); | 
				
			||||
		draw(); | 
				
			||||
	} | 
				
			||||
 | 
				
			||||
	SDL_GL_DeleteContext(context); | 
				
			||||
 | 
				
			||||
	SDL_Quit(); | 
				
			||||
 | 
				
			||||
	return 0; | 
				
			||||
} | 
				
			||||
					Loading…
					
					
				
		Reference in new issue