Skip to content

Instantly share code, notes, and snippets.

@croepha
Created December 26, 2016 06:57
Show Gist options
  • Save croepha/82bffca9498ed9fa87f6aa7309c0ca69 to your computer and use it in GitHub Desktop.
Save croepha/82bffca9498ed9fa87f6aa7309c0ca69 to your computer and use it in GitHub Desktop.
#if 0 /* (sh-mode)
set -e
LPATH=/Users/cro/Documents/PersonalProjects/Graphics/
tu_name=cube_rotate_thing
# -Ofast
[ ! ]&& time clang++ -g --std=c++11 -fPIC -Wall \
-D "RELOADABLE_CODE=\"$LPATH${tu_name}_reloadable.cpp.so\"" \
$LPATH/${tu_name}.cpp \
-Wno-writable-strings \
-Wno-unused-function \
-Wno-deprecated-declarations \
-framework Cocoa -framework AppKit -framework OpenGL \
-F /Library/Frameworks/ -framework SDL2 \
-o $LPATH/${tu_name}.cpp.elf
[ ! ]&&{
cd $RPATH
ulimit -c unlimited
rm -fv core
pwd
time $LPATH/${tu_name}.cpp.elf
}
true
exit # (c++-mode) */
#endif
// inspiration http://3.bp.blogspot.com/-aehqua-FgkQ/VmeNFzYXkuI/AAAAAAABQcU/Mi4OSTi-DUs/s640/doze_studio_151207.gif
// result https://www.dropbox.com/s/vspgm61jn1hcatr/cube_rotate_thing.mov?dl=0
#if defined __APPLE__
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
#else
#include <SDL.h>
#include <SDL_opengl.h>
#endif
struct Memory {
float rotate_amount;
} m;
void render_frame(int window_width, int window_height) {
glEnable (GL_DEPTH_TEST);
glClearColor(0, 0,0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glClear(GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, window_width, window_height, 0, 1000, -1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glColor4f(1, 1, 1, 1);
glLineWidth(5);
glPopMatrix();
int size = 100;
float oyh = 166;
for (int x=-2; x<10; x++) {
for (int y=-2; y<20; y++) {
float this_rot_amount = 0;
if (x == 1 && y == 2) this_rot_amount = m.rotate_amount;
glPushMatrix();
glTranslatef(100 + 144.9*x, oyh*y - (oyh * this_rot_amount / 90) , 0);
// glRotatef(10, 0, 0, 1);
glRotatef(35, 1, 0, 0);
glTranslatef(size/2, size/2, size/2);
glRotatef(45 + this_rot_amount, 0, 1, 0);
glTranslatef(-size/2, -size/2, -size/2);
#define _v glVertex3f
#define _s size
glColor4f(0, 0, 0, 1);
glBegin(GL_QUADS);
_v( 0, _s, 0); _v(_s, _s, 0); _v(_s, 0, 0 ); _v( 0, 0, 0);
_v( 0, _s, _s); _v(_s, _s, _s); _v(_s, 0, _s); _v( 0, 0, _s);
// // _v( 0, _s, 0); _v( 0, _s, _s); _v( 0, 0, _s); _v( 0, 0, 0);
_v(_s, _s, 0); _v(_s, _s, _s); _v(_s, 0, _s); _v(_s, 0, 0);
_v( 0, 0, 0); _v( 0, 0, _s); _v(_s, 0, _s); _v(_s, 0, 0);
glEnd();
#undef _v
#undef _s
glColor4f(1, 1, 1, 1);
glBegin(GL_LINES);
glVertex3f(0, size, 0); glVertex3f(size, size, 0);
glVertex3f(size, size, 0); glVertex3f(size, 0, 0);
glVertex3f(size, 0, 0); glVertex3f(0, 0, 0);
glVertex3f(0, 0, 0); glVertex3f(0, size, 0);
glVertex3f(0, size, size); glVertex3f(size, size, size);
glVertex3f(size, size, size); glVertex3f(size, 0, size);
glVertex3f(size, 0, size); glVertex3f(0, 0, size);
glVertex3f(0, 0, size); glVertex3f(0, size, size);
glVertex3f(0, size, 0); glVertex3f(0, size, size);
glVertex3f(size, size, 0); glVertex3f(size, size, size);
glVertex3f(size, 0, 0); glVertex3f(size, 0, size);
glVertex3f(0, 0, 0); glVertex3f(0, 0, size);
glEnd();
glPopMatrix();
}
}
if (m.rotate_amount++ > 90) m.rotate_amount = 0;
glEnable (GL_BLEND);
}
int main() {
int render_width = 100;
int render_height = 100;
//Create window
SDL_Window * window = SDL_CreateWindow(
"Untitled Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
render_width, render_height,
SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_OPENGL);
if(!window) {
SDL_LogCritical(SDL_LOG_CATEGORY_SYSTEM, "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
return -1;
}
SDL_GLContext context = SDL_GL_CreateContext( window );
if( context == NULL ) {
SDL_LogCritical(SDL_LOG_CATEGORY_SYSTEM, "OpenGL context could not be created! SDL Error: %s\n", SDL_GetError() );
return -3;
}
if( SDL_GL_SetSwapInterval( 1 ) < 0 ) {
SDL_LogCritical(SDL_LOG_CATEGORY_SYSTEM, "Warning: Unable to set VSync! SDL Error: %s\n", SDL_GetError() );
}
glEnable (GL_BLEND); glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
bool running = true;
while(running) {
int window_width, window_height;
SDL_GetWindowSize(window, &window_width, &window_height);
SDL_Event e;
while(SDL_PollEvent( &e )) {
switch (e.type) {
case SDL_QUIT:
running = false;
break;
default:
break;
}
}
glViewport(0, 0, window_width, window_height);
render_frame(window_width, window_height);
SDL_GL_SwapWindow(window);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment