initial commit
BIN
gfx/abc.lz77
Normal file
BIN
gfx/abc.png
Normal file
|
After Width: | Height: | Size: 490 B |
BIN
gfx/abc.raw
Normal file
BIN
gfx/abc123.png
Normal file
|
After Width: | Height: | Size: 472 B |
BIN
gfx/abc4.lz77
Normal file
BIN
gfx/abc4.png
Normal file
|
After Width: | Height: | Size: 496 B |
BIN
gfx/abc4.raw
Normal file
64
gfx/cube.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
// Commands
|
||||
#define CBEGIN 0x40
|
||||
#define CCOLOR 0x20
|
||||
#define CVERTEX 0x24
|
||||
#define CNORMAL 0x21
|
||||
|
||||
// Parameters
|
||||
#define QUAD 0x1
|
||||
#define QUADSTRIP 0x3
|
||||
#define GRAY RGB15(15, 15, 15)
|
||||
#define NORMAL(x,y,z) () // (1bit sign + 9bit fractional part)
|
||||
#define VERTEX(x,y,z) () // (signed, with 6bit fractional part)
|
||||
|
||||
#define COMMAND(a,b,c,d) \
|
||||
((a)&0xFF|(((b)&0xFF)<<8)|(((c)&0xFF)<<16)|(((d)&0xFF)<<24))
|
||||
|
||||
u32 cubelist[] =
|
||||
{
|
||||
COMMAND(CBEGIN, CCOLOR, CNORMAL, CVERTEX),
|
||||
QUADSTRIP,
|
||||
GRAY,
|
||||
NORMAL( 0,-1, 0),
|
||||
VERTEX(-1,-1,-1),
|
||||
COMMAND(CVERTEX, CVERTEX, CVERTEX, CNORMAL),
|
||||
VERTEX( 1,-1,-1),
|
||||
VERTEX(-1,-1, 1),
|
||||
VERTEX( 1,-1, 1),
|
||||
NORMAL( 0, 0, 1),
|
||||
COMMAND(CVERTEX, CVERTEX, CNORMAL, CVERTEX),
|
||||
VERTEX(-1, 1, 1),
|
||||
VERTEX( 1, 1, 1),
|
||||
NORMAL( 0, 1, 0),
|
||||
VERTEX(-1, 1,-1),
|
||||
COMMAND(CVERTEX, CNORMAL, CVERTEX, CVERTEX),
|
||||
VERTEX( 1, 1,-1),
|
||||
NORMAL( 0, 0,-1),
|
||||
VERTEX(-1,-1,-1),
|
||||
VERTEX( 1,-1,-1),
|
||||
COMMAND(CBEGIN, CNORMAL, CVERTEX, CVERTEX),
|
||||
QUAD,
|
||||
NORMAL( 1, 0, 0),
|
||||
VERTEX( 1,-1,-1),
|
||||
VERTEX( 1,-1, 1),
|
||||
COMMAND(CVERTEX, CVERTEX, CNORMAL, CVERTEX),
|
||||
VERTEX( 1, 1, 1),
|
||||
VERTEX( 1, 1,-1),
|
||||
NORMAL(-1, 0, 0),
|
||||
VERTEX(-1,-1,-1),
|
||||
COMMAND(CVERTEX, CVERTEX, CVERTEX, 0),
|
||||
VERTEX(-1,-1, 1),
|
||||
VERTEX(-1, 1, 1),
|
||||
VERTEX(-1, 1,-1),
|
||||
};
|
||||
|
||||
inline void cube()
|
||||
{
|
||||
extern u32 cubelist[];
|
||||
|
||||
DMA_SRC(0) = cubelist;
|
||||
DMA_DEST(0) = 0x4000400;
|
||||
DMA_CR(0) = DMA_FIFO | (sizeof(cubelist)/sizeof(u32));
|
||||
while ( DMA_CR(0) & DMA_BUSY )
|
||||
;
|
||||
}
|
||||
BIN
gfx/end.png
Normal file
|
After Width: | Height: | Size: 231 B |
BIN
gfx/fin.png
Normal file
|
After Width: | Height: | Size: 226 B |
BIN
gfx/font.bin
Normal file
BIN
gfx/font.lz77
Normal file
BIN
gfx/font.png
Normal file
|
After Width: | Height: | Size: 311 B |
108
gfx/fs.cpp
Normal file
@@ -0,0 +1,108 @@
|
||||
// g++ -I /usr/include/SDL -o fs fs.cpp -lSDL -lGL -lGLU -lm
|
||||
|
||||
#include <SDL.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include <math.h>
|
||||
|
||||
void quad(float x0, float y0, float z0,
|
||||
float x1, float y1, float z1,
|
||||
float x2, float y2, float z2,
|
||||
float x3, float y3, float z3)
|
||||
{
|
||||
float vx1 = x1 - x0;
|
||||
float vx2 = x2 - x0;
|
||||
float vy1 = y1 - y0;
|
||||
float vy2 = y2 - y0;
|
||||
float vz1 = z1 - z0;
|
||||
float vz2 = z2 - z0;
|
||||
glNormal3f(vy1 * vz2 - vz1 * vy2, vz1 * vx2 - vx1 * vz2, vx1 * vy2 - vy1 * vx2);
|
||||
glVertex3f(x0, y0, z0);
|
||||
glVertex3f(x1, y1, z1);
|
||||
glVertex3f(x2, y2, z2);
|
||||
glVertex3f(x3, y3, z3);
|
||||
}
|
||||
|
||||
void drawFlyingSaucer(const float res = 12.0)
|
||||
{
|
||||
static const int nb = 9;
|
||||
static const float h[nb] = { 1.0, 0.9, 0.8, 0.5, 0.4, 0.3, 0.15, 0.01, 0.0 };
|
||||
static const float r[nb] = { 0.001, 0.2, 0.3, 0.4, 0.8, 1.0, 0.8, 0.5, 0.0 };
|
||||
|
||||
glBegin(GL_QUADS);
|
||||
glColor3f(0.5, 0.5, 0.5);
|
||||
for ( int i = 0 ; i < nb - 1 ; i++ ) {
|
||||
for ( float j = 0.0 ; j < 2.0 * M_PI ; j += 2.0 * M_PI / res ) {
|
||||
quad(cosf(j)*r[i], h[i], sinf(j)*r[i],
|
||||
cosf(j+2.0*M_PI/res)*r[i], h[i], sinf(j+2.0*M_PI/res)*r[i],
|
||||
cosf(j+2.0*M_PI/res)*r[i+1], h[i+1], sinf(j+2.0*M_PI/res)*r[i+1],
|
||||
cosf(j)*r[i+1], h[i+1], sinf(j)*r[i+1]);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv)
|
||||
{
|
||||
bool running = true;
|
||||
SDL_Event event;
|
||||
float ry = 0.0;
|
||||
float rz = 0.0;
|
||||
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
|
||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
|
||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
||||
SDL_Surface * screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL|SDL_HWSURFACE);
|
||||
SDL_WM_SetCaption("Flying Saucer !", "");
|
||||
|
||||
glShadeModel(GL_SMOOTH);
|
||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||
glClearDepth(1.0);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_NORMALIZE);
|
||||
glEnable(GL_LIGHT0);
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, (float[]) { 1.0, 1.0, 1.0 });
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, (float[]) { 1.0, 1.0, 1.0 });
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, (float[]) { 0.0, 20.0, 0.0 });
|
||||
|
||||
glViewport(0, 0, 640, 480);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45.0, 640.0 / 480.0, 0.5, 100.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
while ( running ) {
|
||||
while ( SDL_PollEvent(& event) ) {
|
||||
if ( event.type == SDL_QUIT || (event.type == SDL_KEYDOWN
|
||||
&& event.key.keysym.sym == SDLK_ESCAPE ) )
|
||||
running = false;
|
||||
}
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glLoadIdentity();
|
||||
|
||||
glTranslated(2.0*cosf(rz), 2.0*sinf(rz), -10.0);
|
||||
rz += 0.001;
|
||||
glRotatef(ry, 0.0, 1.0, 0.0);
|
||||
ry += 0.1;
|
||||
drawFlyingSaucer();
|
||||
glRotatef(ry/5.0, 0.0, 1.0, 0.5);
|
||||
glTranslatef(1.0, 2.0*cosf(ry/100.0), -3.0+cosf(rz/50.0));
|
||||
drawFlyingSaucer(70.0);
|
||||
|
||||
SDL_GL_SwapBuffers();
|
||||
}
|
||||
|
||||
SDL_FreeSurface(screen);
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
BIN
gfx/robot.blend
Normal file
264
gfx/robot.cpp
Normal file
@@ -0,0 +1,264 @@
|
||||
#include <SDL.h>
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#define _USE_MATH_DEFINES
|
||||
#include <math.h>
|
||||
|
||||
#define WIDTH 640
|
||||
#define HEIGHT 480
|
||||
|
||||
inline void glRotateX(float angle) { glRotatef(angle, 1.0f, 0.0f, 0.0f); }
|
||||
inline void glRotateY(float angle) { glRotatef(angle, 0.0f, 1.0f, 0.0f); }
|
||||
inline void glRotateZ(float angle) { glRotatef(angle, 0.0f, 0.0f, 1.0f); }
|
||||
|
||||
void cube()
|
||||
{
|
||||
glBegin(GL_QUADS);
|
||||
glNormal3f(0.0f, 0.0f, 1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||
|
||||
glNormal3f(0.0f, 0.0f, -1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, -1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, -1.0f);
|
||||
|
||||
glNormal3f(0.0f, -1.0f, 0.0f);
|
||||
glVertex3f(-1.0f, -1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||
|
||||
glNormal3f(0.0f, 1.0f, 0.0f);
|
||||
glVertex3f(-1.0f, 1.0f, -1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, -1.0f);
|
||||
|
||||
glNormal3f(-1.0f, 0.0f, 0.0f);
|
||||
glVertex3f(-1.0f, -1.0f, -1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, -1.0f);
|
||||
|
||||
glNormal3f(1.0f, 0.0f, 0.0f);
|
||||
glVertex3f( 1.0f, -1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, 1.0f);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
float param = 0.5f;
|
||||
float mod = 0.01f;
|
||||
|
||||
const float freq = 6.0f;
|
||||
|
||||
void legs(float t, float mul)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(0.19f*mul, 0.0f, -0.015f);
|
||||
glRotateX(cosf(t)*13.0f-2.5f);
|
||||
glTranslatef(0.0f, -0.7f, 0.0f);
|
||||
glPushMatrix();
|
||||
glScalef(0.1f, 0.25f, 0.1f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
float m = -min(0.0f, cosf(t+M_PI/2.0f));
|
||||
glTranslatef(0.0f, m*0.15f - 0.52f, m*0.015f - 0.06f);
|
||||
glRotateX(10.0f);
|
||||
glPushMatrix();
|
||||
glScalef(0.1f, 0.3f, 0.1f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
glTranslatef(0.0f, -0.3f, 0.1f);
|
||||
glPushMatrix();
|
||||
glScalef(0.1f, 0.03f, 0.2f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void arms(float t, float mul)
|
||||
{
|
||||
glPushMatrix();
|
||||
glTranslatef(0.24f*mul, 0.4f, 0.0f);
|
||||
glRotateZ(30.0f*mul);
|
||||
glRotateX(cosf(t)*20.0f+180.0f);
|
||||
glTranslatef(0.0f, 0.3f, 0.0f);
|
||||
glPushMatrix();
|
||||
glScalef(0.1f, 0.3f, 0.1f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
glTranslatef(0.0f, 0.22f, 0.0f);
|
||||
glRotateY(fabsf(cosf(t))*16.0f*mul); // mouvement sympa mais pas obligatoire du tout...
|
||||
glRotateX(100.0f);
|
||||
glRotateZ(165.0f*mul);
|
||||
glTranslatef(0.0f, 0.21f, 0.0f);
|
||||
glPushMatrix();
|
||||
glScalef(0.09f, 0.27f, 0.09f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void robot(float t)
|
||||
{
|
||||
// head
|
||||
glPushMatrix();
|
||||
glTranslatef(0.0f, 0.71f+0.05f*fabsf(sinf(t)), 0.04f);
|
||||
glRotateX(-5.0f+10.0f*fabsf(cosf(t)));
|
||||
glScalef(0.2f, 0.2f, 0.2f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
// body
|
||||
glPushMatrix();
|
||||
glTranslatef(0.0f, 0.05f*fabsf(sinf(t)), 0.0f);
|
||||
glRotateY(2.5f-5.0f*cosf(t)); // obligatoire...
|
||||
glScalef(0.3f, 0.5f, 0.17f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
// arms
|
||||
glPushMatrix();
|
||||
arms(t, -1.0f);
|
||||
arms(t+(M_PI/2.0f)*freq, 1.0f);
|
||||
glPopMatrix();
|
||||
|
||||
// legs
|
||||
glPushMatrix();
|
||||
legs(t, -1.0f);
|
||||
legs(t+(M_PI/2.0f)*freq, 1.0f);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void quad()
|
||||
{
|
||||
glVertex3f(-1, -1, 0);
|
||||
glVertex3f( 1, -1, 0);
|
||||
glVertex3f( 1, 1, 0);
|
||||
glVertex3f(-1, 1, 0);
|
||||
}
|
||||
|
||||
#define b(x) (x/255.0f)
|
||||
void sonic(float t)
|
||||
{
|
||||
bool c = false;
|
||||
for ( float y = -10.0f ; y < 11.0f ; y++ ) {
|
||||
for ( float x = -10.0f ; x < 11.0f ; x++ ) {
|
||||
if ( c )
|
||||
glColor3f(b(215), b(100), b(10));
|
||||
else
|
||||
glColor3f(b(10), b(70), b(200));
|
||||
c = !c;
|
||||
// glTranslate3f();
|
||||
// glRotatef(, 1, 0, 0);
|
||||
// glRotatef(, 0, 1, 0);
|
||||
quad();
|
||||
}
|
||||
c = !c;
|
||||
}
|
||||
}
|
||||
|
||||
#undef main
|
||||
int main()
|
||||
{
|
||||
#if 0
|
||||
bool running = true;
|
||||
SDL_Event event;
|
||||
SDL_Surface * screen;
|
||||
float time = 0.0f;
|
||||
float rotation = 0.0f;
|
||||
bool mousedown = false;
|
||||
|
||||
SDL_Init(SDL_INIT_EVERYTHING);
|
||||
|
||||
screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_OPENGL);
|
||||
SDL_WM_SetCaption("Robot !", "");
|
||||
|
||||
glViewport(0, 0, WIDTH, HEIGHT);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45.0f, (float)WIDTH/(float)HEIGHT, 0.01f, 100.0f);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthMask(GL_TRUE);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(GL_BACK);
|
||||
|
||||
glEnable(GL_POLYGON_SMOOTH);
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
static float ambient[] = { 0.1f, 0.1f, 0.1f, 1.0f };
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
|
||||
static float diffuse[] = { 0.1f, 0.1f, 0.1f, 1.0f };
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
|
||||
|
||||
static float position[] = { 2.0f, 4.0f, -2.0f };
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, position);
|
||||
|
||||
unsigned int tick = SDL_GetTicks();
|
||||
|
||||
while ( running ) {
|
||||
while ( SDL_PollEvent(& event) ) {
|
||||
if ( event.type == SDL_QUIT )
|
||||
running = false;
|
||||
else if ( event.type == SDL_KEYDOWN ) {
|
||||
if ( event.key.keysym.sym == SDLK_ESCAPE )
|
||||
running = false;
|
||||
} else if ( event.type == SDL_MOUSEBUTTONDOWN ) {
|
||||
if ( event.button.button == 1 )
|
||||
mousedown = true;
|
||||
else if ( event.button.button == 4 ) {
|
||||
param += mod;
|
||||
printf("param = %f\n", param);
|
||||
} else if ( event.button.button == 5 ) {
|
||||
param -= mod;
|
||||
printf("param = %f\n", param);
|
||||
}
|
||||
} else if ( event.type == SDL_MOUSEBUTTONUP ) {
|
||||
if ( event.button.button == 1 )
|
||||
mousedown = false;
|
||||
} else if ( event.type == SDL_MOUSEMOTION ) {
|
||||
if ( mousedown )
|
||||
rotation += event.motion.xrel;
|
||||
}
|
||||
}
|
||||
|
||||
glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);
|
||||
glLoadIdentity();
|
||||
|
||||
glTranslatef(0.0f, 0.0f, -5.0f);
|
||||
glRotatef(15.0f, 1.0f, 0.0f, 0.0f);
|
||||
glRotatef(rotation, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
robot(time * freq);
|
||||
|
||||
SDL_GL_SwapBuffers();
|
||||
|
||||
time = ((float) SDL_GetTicks() - (float) tick) / 1000.0f;
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
#endif
|
||||
|
||||
int a = 42;
|
||||
printf("%d\n", (a ^ -1)+1);
|
||||
system("pause");
|
||||
|
||||
return 0;
|
||||
}
|
||||
194
gfx/robot.simple.cpp
Normal file
@@ -0,0 +1,194 @@
|
||||
#include <SDL.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include <math.h>
|
||||
|
||||
#define WIDTH 1024
|
||||
#define HEIGHT 768
|
||||
|
||||
void color(float r, float g, float b)
|
||||
{
|
||||
glColor4fv(
|
||||
(float []){r, g, b, 1.0f});
|
||||
}
|
||||
|
||||
void cube()
|
||||
{
|
||||
glBegin(GL_QUADS);
|
||||
glNormal3f(0.0f, 0.0f, 1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||
|
||||
glNormal3f(0.0f, 0.0f, -1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, -1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, -1.0f);
|
||||
|
||||
glNormal3f(0.0f, -1.0f, 0.0f);
|
||||
glVertex3f(-1.0f, -1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||
|
||||
glNormal3f(0.0f, 1.0f, 0.0f);
|
||||
glVertex3f(-1.0f, 1.0f, -1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, -1.0f);
|
||||
|
||||
glNormal3f(-1.0f, 0.0f, 0.0f);
|
||||
glVertex3f(-1.0f, -1.0f, -1.0f);
|
||||
glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||
glVertex3f(-1.0f, 1.0f, -1.0f);
|
||||
|
||||
glNormal3f(1.0f, 0.0f, 0.0f);
|
||||
glVertex3f( 1.0f, -1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, -1.0f);
|
||||
glVertex3f( 1.0f, 1.0f, 1.0f);
|
||||
glVertex3f( 1.0f, -1.0f, 1.0f);
|
||||
glEnd();
|
||||
}
|
||||
|
||||
const float freq = 6.4f;
|
||||
|
||||
void legs(float t, bool i)
|
||||
{
|
||||
float x[2] = { 0.19f, -0.19f };
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(x[i], -0.1f, 0.0f);
|
||||
glRotatef(cosf(t)*10.0f, 1.0f, 0.0f, 0.0f);
|
||||
glTranslatef(0.0f, -0.7f, 0.0f);
|
||||
glScalef(0.1f, 0.4f, 0.1f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void arms(float t, bool i)
|
||||
{
|
||||
float x[2] = { 0.24f, -0.24f };
|
||||
float r[2] = { -40.0f, 40.0f };
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef(x[i], 0.4f, 0.0f);
|
||||
glRotatef(cosf(t)*15.0f+r[i], 0.0f, 0.0f, 1.0f);
|
||||
glTranslatef(0.0f, 0.3f, 0.0f);
|
||||
glScalef(0.1f, 0.3f, 0.1f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void robot(float t)
|
||||
{
|
||||
// head
|
||||
//color(1.0f, 1.0f, 1.0f);
|
||||
glPushMatrix();
|
||||
glTranslatef(0.0f, 0.71f+0.05f*fabsf(sinf(t)), 0.04f);
|
||||
glRotatef(-5.0f+10.0f*fabsf(cosf(t)), 1.0f, 0.0f, 0.0f);
|
||||
glScalef(0.2f, 0.2f, 0.2f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
// body
|
||||
//color(0.5f, 0.5f, 1.0f);
|
||||
glPushMatrix();
|
||||
glTranslatef(0.0f, 0.05f*fabsf(sinf(t)), 0.0f);
|
||||
glRotatef(-2.5f+5.0f*fabsf(cosf(t)), 0.0f, 1.0f, 0.0f);
|
||||
glScalef(0.3f, 0.5f, 0.17f);
|
||||
cube();
|
||||
glPopMatrix();
|
||||
|
||||
// arms
|
||||
//color(1.0f, 0.5f, 0.5f);
|
||||
glPushMatrix();
|
||||
arms(t, false);
|
||||
arms(t, true);
|
||||
glPopMatrix();
|
||||
|
||||
// legs
|
||||
//color(0.5f, 1.0f, 0.5f);
|
||||
glPushMatrix();
|
||||
legs(t, false);
|
||||
legs(t+(M_PI/2.0f)*freq, true);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
bool running = true;
|
||||
SDL_Event event;
|
||||
SDL_Surface * screen;
|
||||
float time;
|
||||
float rotation = 0.0f;
|
||||
bool mousedown = false;
|
||||
|
||||
SDL_Init(SDL_INIT_EVERYTHING);
|
||||
|
||||
screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_OPENGL);
|
||||
SDL_WM_SetCaption("Robot !", "");
|
||||
|
||||
glViewport(0, 0, WIDTH, HEIGHT);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(45.0f, (float)WIDTH/(float)HEIGHT, 0.01f, 100.0f);
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
||||
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
||||
glEnable(GL_COLOR_MATERIAL);
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthMask(GL_TRUE);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(GL_BACK);
|
||||
|
||||
glEnable(GL_POLYGON_SMOOTH);
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, (float []) { 0.1f, 0.1f, 0.1f, 1.0f } );
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, (float []) { 0.1f, 0.1f, 0.1f, 1.0f } );
|
||||
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, (float []) { 2.0f, 4.0f, -2.0f } );
|
||||
|
||||
unsigned int tick = SDL_GetTicks();
|
||||
|
||||
while ( running ) {
|
||||
while ( SDL_PollEvent(& event) ) {
|
||||
if ( event.type == SDL_QUIT )
|
||||
running = false;
|
||||
else if ( event.type == SDL_KEYDOWN ) {
|
||||
if ( event.key.keysym.sym == SDLK_ESCAPE )
|
||||
running = false;
|
||||
} else if ( event.type == SDL_MOUSEBUTTONDOWN ) {
|
||||
mousedown = true;
|
||||
} else if ( event.type == SDL_MOUSEBUTTONUP ) {
|
||||
mousedown = false;
|
||||
} else if ( event.type == SDL_MOUSEMOTION ) {
|
||||
if ( mousedown )
|
||||
rotation += event.motion.xrel;
|
||||
}
|
||||
}
|
||||
|
||||
glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);
|
||||
glLoadIdentity();
|
||||
|
||||
glTranslatef(0.0f, 0.0f, -4.0f);
|
||||
glRotatef(15.0f, 1.0f, 0.0f, 0.0f);
|
||||
glRotatef(rotation, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
robot(time * freq);
|
||||
|
||||
SDL_GL_SwapBuffers();
|
||||
|
||||
time = ((float) SDL_GetTicks() - (float) tick) / 1000.0f;
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
|
||||
return 0;
|
||||
}
|
||||
BIN
gfx/text.bin
Normal file
BIN
gfx/text.lz77
Normal file
BIN
gfx/text.png
Normal file
|
After Width: | Height: | Size: 330 B |