forked from KolibriOS/kolibrios
switch build system to Tup
git-svn-id: svn://kolibrios.org@5098 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
29
programs/develop/libraries/TinyGL/examples/Makefile
Normal file
29
programs/develop/libraries/TinyGL/examples/Makefile
Normal file
@@ -0,0 +1,29 @@
|
||||
include ../config.mk
|
||||
|
||||
PROGS = mech texobj gears spin
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
clean:
|
||||
rm -f core *.o *~ $(PROGS)
|
||||
|
||||
mech: mech.o glu.o $(UI_OBJS) $(GL_DEPS)
|
||||
$(CC) $(LFLAGS) $^ -o $@ $(GL_LIBS) $(UI_LIBS) -lm
|
||||
|
||||
texobj: texobj.o $(UI_OBJS) $(GL_DEPS)
|
||||
$(CC) $(LFLAGS) $^ -o $@ $(GL_LIBS) $(UI_LIBS) -lm
|
||||
|
||||
gears: gears.o $(UI_OBJS) $(GL_DEPS)
|
||||
$(CC) $(LFLAGS) $^ -o $@ $(GL_LIBS) $(UI_LIBS) -lm
|
||||
|
||||
spin: spin.o $(UI_OBJS) $(GL_DEPS)
|
||||
$(CC) $(LFLAGS) $^ -o $@ $(GL_LIBS) $(UI_LIBS) -lm
|
||||
|
||||
.c.o:
|
||||
$(CC) $(CFLAGS) $(GL_INCLUDES) $(UI_INCLUDES) -c $*.c
|
||||
|
||||
mech.o: glu.h
|
||||
|
||||
glu.o: glu.h
|
||||
|
||||
ui.o: ui.h
|
300
programs/develop/libraries/TinyGL/examples/gears.c
Normal file
300
programs/develop/libraries/TinyGL/examples/gears.c
Normal file
@@ -0,0 +1,300 @@
|
||||
/* gears.c */
|
||||
|
||||
/*
|
||||
* 3-D gear wheels. This program is in the public domain.
|
||||
*
|
||||
* Brian Paul
|
||||
*/
|
||||
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <GL/glx.h>
|
||||
#include <GL/gl.h>
|
||||
#include "ui.h"
|
||||
|
||||
#ifndef M_PI
|
||||
# define M_PI 3.14159265
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Draw a gear wheel. You'll probably want to call this function when
|
||||
* building a display list since we do a lot of trig here.
|
||||
*
|
||||
* Input: inner_radius - radius of hole at center
|
||||
* outer_radius - radius at center of teeth
|
||||
* width - width of gear
|
||||
* teeth - number of teeth
|
||||
* tooth_depth - depth of tooth
|
||||
*/
|
||||
static void gear( GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
|
||||
GLint teeth, GLfloat tooth_depth )
|
||||
{
|
||||
GLint i;
|
||||
GLfloat r0, r1, r2;
|
||||
GLfloat angle, da;
|
||||
GLfloat u, v, len;
|
||||
|
||||
r0 = inner_radius;
|
||||
r1 = outer_radius - tooth_depth/2.0;
|
||||
r2 = outer_radius + tooth_depth/2.0;
|
||||
|
||||
da = 2.0*M_PI / teeth / 4.0;
|
||||
|
||||
glShadeModel( GL_FLAT );
|
||||
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
|
||||
/* draw front face */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<=teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw front sides of teeth */
|
||||
glBegin( GL_QUADS );
|
||||
da = 2.0*M_PI / teeth / 4.0;
|
||||
for (i=0;i<teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
|
||||
glNormal3f( 0.0, 0.0, -1.0 );
|
||||
|
||||
/* draw back face */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<=teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
/* draw back sides of teeth */
|
||||
glBegin( GL_QUADS );
|
||||
da = 2.0*M_PI / teeth / 4.0;
|
||||
for (i=0;i<teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), -width*0.5 );
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
|
||||
/* draw outward faces of teeth */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 );
|
||||
glVertex3f( r1*cos(angle), r1*sin(angle), -width*0.5 );
|
||||
u = r2*cos(angle+da) - r1*cos(angle);
|
||||
v = r2*sin(angle+da) - r1*sin(angle);
|
||||
len = sqrt( u*u + v*v );
|
||||
u /= len;
|
||||
v /= len;
|
||||
glNormal3f( v, -u, 0.0 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+da), r2*sin(angle+da), -width*0.5 );
|
||||
glNormal3f( cos(angle), sin(angle), 0.0 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), width*0.5 );
|
||||
glVertex3f( r2*cos(angle+2*da), r2*sin(angle+2*da), -width*0.5 );
|
||||
u = r1*cos(angle+3*da) - r2*cos(angle+2*da);
|
||||
v = r1*sin(angle+3*da) - r2*sin(angle+2*da);
|
||||
glNormal3f( v, -u, 0.0 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 );
|
||||
glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), -width*0.5 );
|
||||
glNormal3f( cos(angle), sin(angle), 0.0 );
|
||||
}
|
||||
|
||||
glVertex3f( r1*cos(0), r1*sin(0), width*0.5 );
|
||||
glVertex3f( r1*cos(0), r1*sin(0), -width*0.5 );
|
||||
|
||||
glEnd();
|
||||
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
|
||||
/* draw inside radius cylinder */
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (i=0;i<=teeth;i++) {
|
||||
angle = i * 2.0*M_PI / teeth;
|
||||
glNormal3f( -cos(angle), -sin(angle), 0.0 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), -width*0.5 );
|
||||
glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
}
|
||||
|
||||
|
||||
static GLfloat view_rotx=20.0, view_roty=30.0, view_rotz=0.0;
|
||||
static GLint gear1, gear2, gear3;
|
||||
static GLfloat angle = 0.0;
|
||||
|
||||
static GLuint limit;
|
||||
static GLuint count = 1;
|
||||
|
||||
|
||||
void draw( void )
|
||||
{
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef( view_rotx, 1.0, 0.0, 0.0 );
|
||||
glRotatef( view_roty, 0.0, 1.0, 0.0 );
|
||||
glRotatef( view_rotz, 0.0, 0.0, 1.0 );
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( -3.0, -2.0, 0.0 );
|
||||
glRotatef( angle, 0.0, 0.0, 1.0 );
|
||||
glCallList(gear1);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( 3.1, -2.0, 0.0 );
|
||||
glRotatef( -2.0*angle-9.0, 0.0, 0.0, 1.0 );
|
||||
glCallList(gear2);
|
||||
glPopMatrix();
|
||||
|
||||
glPushMatrix();
|
||||
glTranslatef( -3.1, 4.2, 0.0 );
|
||||
glRotatef( -2.0*angle-25.0, 0.0, 0.0, 1.0 );
|
||||
glCallList(gear3);
|
||||
glPopMatrix();
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
tkSwapBuffers();
|
||||
|
||||
count++;
|
||||
if (count==limit) {
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void idle( void )
|
||||
{
|
||||
angle += 2.0;
|
||||
draw();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* change view angle, exit upon ESC */
|
||||
GLenum key(int k, GLenum mask)
|
||||
{
|
||||
switch (k) {
|
||||
case KEY_UP:
|
||||
view_rotx += 5.0;
|
||||
return GL_TRUE;
|
||||
case KEY_DOWN:
|
||||
view_rotx -= 5.0;
|
||||
return GL_TRUE;
|
||||
case KEY_LEFT:
|
||||
view_roty += 5.0;
|
||||
return GL_TRUE;
|
||||
case KEY_RIGHT:
|
||||
view_roty -= 5.0;
|
||||
return GL_TRUE;
|
||||
case 'z':
|
||||
view_rotz += 5.0;
|
||||
return GL_TRUE;
|
||||
case 'Z':
|
||||
view_rotz -= 5.0;
|
||||
return GL_TRUE;
|
||||
case KEY_ESCAPE:
|
||||
exit(0);
|
||||
}
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* new window size or exposure */
|
||||
void reshape( int width, int height )
|
||||
{
|
||||
GLfloat h = (GLfloat) height / (GLfloat) width;
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum( -1.0, 1.0, -h, h, 5.0, 60.0 );
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef( 0.0, 0.0, -40.0 );
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
}
|
||||
|
||||
|
||||
void init( void )
|
||||
{
|
||||
static GLfloat pos[4] = {5.0, 5.0, 10.0, 0.0 };
|
||||
static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0 };
|
||||
static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0 };
|
||||
static GLfloat blue[4] = {0.2, 0.2, 1.0, 1.0 };
|
||||
|
||||
glLightfv( GL_LIGHT0, GL_POSITION, pos );
|
||||
glEnable( GL_CULL_FACE );
|
||||
glEnable( GL_LIGHTING );
|
||||
glEnable( GL_LIGHT0 );
|
||||
glEnable( GL_DEPTH_TEST );
|
||||
|
||||
/* make the gears */
|
||||
gear1 = glGenLists(1);
|
||||
glNewList(gear1, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red );
|
||||
gear( 1.0, 4.0, 1.0, 20, 0.7 );
|
||||
glEndList();
|
||||
|
||||
gear2 = glGenLists(1);
|
||||
glNewList(gear2, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green );
|
||||
gear( 0.5, 2.0, 2.0, 10, 0.7 );
|
||||
glEndList();
|
||||
|
||||
gear3 = glGenLists(1);
|
||||
glNewList(gear3, GL_COMPILE);
|
||||
glMaterialfv( GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue );
|
||||
gear( 1.3, 2.0, 0.5, 10, 0.7 );
|
||||
glEndList();
|
||||
|
||||
glEnable( GL_NORMALIZE );
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc>1) {
|
||||
/* do 'n' frames then exit */
|
||||
limit = atoi( argv[1] ) + 1;
|
||||
}
|
||||
else {
|
||||
limit = 0;
|
||||
}
|
||||
|
||||
return ui_loop(argc, argv, "gears");
|
||||
}
|
||||
|
||||
|
261
programs/develop/libraries/TinyGL/examples/glu.c
Normal file
261
programs/develop/libraries/TinyGL/examples/glu.c
Normal file
@@ -0,0 +1,261 @@
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include "glu.h"
|
||||
|
||||
|
||||
void drawTorus(float rc, int numc, float rt, int numt)
|
||||
{
|
||||
int i, j, k;
|
||||
double s, t;
|
||||
double x, y, z;
|
||||
double pi, twopi;
|
||||
|
||||
pi = 3.14159265358979323846;
|
||||
twopi = 2 * pi;
|
||||
|
||||
for (i = 0; i < numc; i++) {
|
||||
glBegin(GL_QUAD_STRIP);
|
||||
for (j = 0; j <= numt; j++) {
|
||||
for (k = 1; k >= 0; k--) {
|
||||
s = (i + k) % numc + 0.5;
|
||||
t = j % numt;
|
||||
|
||||
x = cos(t*twopi/numt) * cos(s*twopi/numc);
|
||||
y = sin(t*twopi/numt) * cos(s*twopi/numc);
|
||||
z = sin(s*twopi/numc);
|
||||
glNormal3f(x, y, z);
|
||||
|
||||
x = (rt + rc * cos(s*twopi/numc)) * cos(t*twopi/numt);
|
||||
y = (rt + rc * cos(s*twopi/numc)) * sin(t*twopi/numt);
|
||||
z = rc * sin(s*twopi/numc);
|
||||
glVertex3f(x, y, z);
|
||||
}
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
static void normal3f( GLfloat x, GLfloat y, GLfloat z )
|
||||
{
|
||||
GLdouble mag;
|
||||
|
||||
mag = sqrt( x*x + y*y + z*z );
|
||||
if (mag>0.00001F) {
|
||||
x /= mag;
|
||||
y /= mag;
|
||||
z /= mag;
|
||||
}
|
||||
glNormal3f( x, y, z );
|
||||
}
|
||||
|
||||
void gluPerspective( GLdouble fovy, GLdouble aspect,
|
||||
GLdouble zNear, GLdouble zFar )
|
||||
{
|
||||
GLdouble xmin, xmax, ymin, ymax;
|
||||
|
||||
ymax = zNear * tan( fovy * M_PI / 360.0 );
|
||||
ymin = -ymax;
|
||||
|
||||
xmin = ymin * aspect;
|
||||
xmax = ymax * aspect;
|
||||
|
||||
glFrustum( xmin, xmax, ymin, ymax, zNear, zFar );
|
||||
}
|
||||
|
||||
GLUquadricObj *gluNewQuadric(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void gluQuadricDrawStyle(GLUquadricObj *obj, int style)
|
||||
{
|
||||
}
|
||||
|
||||
void gluCylinder( GLUquadricObj *qobj,
|
||||
GLdouble baseRadius, GLdouble topRadius, GLdouble height,
|
||||
GLint slices, GLint stacks )
|
||||
{
|
||||
GLdouble da, r, dr, dz;
|
||||
GLfloat z, nz, nsign;
|
||||
GLint i, j;
|
||||
GLfloat du = 1.0 / slices;
|
||||
GLfloat dv = 1.0 / stacks;
|
||||
GLfloat tcx = 0.0, tcy = 0.0;
|
||||
|
||||
nsign = 1.0;
|
||||
|
||||
da = 2.0*M_PI / slices;
|
||||
dr = (topRadius-baseRadius) / stacks;
|
||||
dz = height / stacks;
|
||||
nz = (baseRadius-topRadius) / height; /* Z component of normal vectors */
|
||||
|
||||
for (i=0;i<slices;i++) {
|
||||
GLfloat x1 = -sin(i*da);
|
||||
GLfloat y1 = cos(i*da);
|
||||
GLfloat x2 = -sin((i+1)*da);
|
||||
GLfloat y2 = cos((i+1)*da);
|
||||
z = 0.0;
|
||||
r = baseRadius;
|
||||
tcy = 0.0;
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (j=0;j<=stacks;j++) {
|
||||
if (nsign==1.0) {
|
||||
normal3f( x1*nsign, y1*nsign, nz*nsign );
|
||||
glTexCoord2f(tcx, tcy);
|
||||
glVertex3f( x1*r, y1*r, z );
|
||||
normal3f( x2*nsign, y2*nsign, nz*nsign );
|
||||
glTexCoord2f(tcx+du, tcy);
|
||||
glVertex3f( x2*r, y2*r, z );
|
||||
}
|
||||
else {
|
||||
normal3f( x2*nsign, y2*nsign, nz*nsign );
|
||||
glTexCoord2f(tcx, tcy);
|
||||
glVertex3f( x2*r, y2*r, z );
|
||||
normal3f( x1*nsign, y1*nsign, nz*nsign );
|
||||
glTexCoord2f(tcx+du, tcy);
|
||||
glVertex3f( x1*r, y1*r, z );
|
||||
}
|
||||
z += dz;
|
||||
r += dr;
|
||||
tcy += dv;
|
||||
}
|
||||
glEnd();
|
||||
tcx += du;
|
||||
}
|
||||
}
|
||||
|
||||
/* Disk (adapted from Mesa) */
|
||||
|
||||
void gluDisk( GLUquadricObj *qobj,
|
||||
GLdouble innerRadius, GLdouble outerRadius,
|
||||
GLint slices, GLint loops )
|
||||
{
|
||||
GLdouble a, da;
|
||||
GLfloat dr;
|
||||
GLfloat r1, r2, dtc;
|
||||
GLint s, l;
|
||||
GLfloat sa,ca;
|
||||
|
||||
/* Normal vectors */
|
||||
glNormal3f( 0.0, 0.0, +1.0 );
|
||||
|
||||
da = 2.0*M_PI / slices;
|
||||
dr = (outerRadius-innerRadius) / (GLfloat) loops;
|
||||
|
||||
/* texture of a gluDisk is a cut out of the texture unit square */
|
||||
/* x, y in [-outerRadius, +outerRadius]; s, t in [0, 1] (linear mapping) */
|
||||
dtc = 2.0f * outerRadius;
|
||||
|
||||
r1 = innerRadius;
|
||||
for (l=0;l<loops;l++) {
|
||||
r2 = r1 + dr;
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
for (s=0;s<=slices;s++) {
|
||||
if (s==slices) a = 0.0;
|
||||
else a = s * da;
|
||||
sa = sin(a); ca = cos(a);
|
||||
glTexCoord2f(0.5+sa*r2/dtc,0.5+ca*r2/dtc);
|
||||
glVertex2f( r2*sa, r2*ca );
|
||||
glTexCoord2f(0.5+sa*r1/dtc,0.5+ca*r1/dtc);
|
||||
glVertex2f( r1*sa, r1*ca );
|
||||
}
|
||||
glEnd();
|
||||
r1 = r2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Sph<70>re (adapted from Mesa)
|
||||
*/
|
||||
|
||||
void gluSphere(GLUquadricObj *qobj,
|
||||
float radius,int slices,int stacks)
|
||||
{
|
||||
float rho, drho, theta, dtheta;
|
||||
float x, y, z;
|
||||
float s, t, ds, dt;
|
||||
int i, j, imin, imax;
|
||||
int normals;
|
||||
float nsign;
|
||||
|
||||
normals=1;
|
||||
nsign=1;
|
||||
|
||||
drho = M_PI / (float) stacks;
|
||||
dtheta = 2.0 * M_PI / (float) slices;
|
||||
|
||||
/* draw +Z end as a triangle fan */
|
||||
glBegin( GL_TRIANGLE_FAN );
|
||||
glNormal3f( 0.0, 0.0, 1.0 );
|
||||
glTexCoord2f(0.5,0.0);
|
||||
glVertex3f( 0.0, 0.0, nsign * radius );
|
||||
for (j=0;j<=slices;j++) {
|
||||
theta = (j==slices) ? 0.0 : j * dtheta;
|
||||
x = -sin(theta) * sin(drho);
|
||||
y = cos(theta) * sin(drho);
|
||||
z = nsign * cos(drho);
|
||||
if (normals) glNormal3f( x*nsign, y*nsign, z*nsign );
|
||||
glVertex3f( x*radius, y*radius, z*radius );
|
||||
}
|
||||
glEnd();
|
||||
|
||||
|
||||
ds = 1.0 / slices;
|
||||
dt = 1.0 / stacks;
|
||||
t = 1.0; /* because loop now runs from 0 */
|
||||
if (1) {
|
||||
imin = 0;
|
||||
imax = stacks;
|
||||
}
|
||||
else {
|
||||
imin = 1;
|
||||
imax = stacks-1;
|
||||
}
|
||||
|
||||
/* draw intermediate stacks as quad strips */
|
||||
for (i=imin;i<imax;i++) {
|
||||
rho = i * drho;
|
||||
glBegin( GL_QUAD_STRIP );
|
||||
s = 0.0;
|
||||
for (j=0;j<=slices;j++) {
|
||||
theta = (j==slices) ? 0.0 : j * dtheta;
|
||||
x = -sin(theta) * sin(rho);
|
||||
y = cos(theta) * sin(rho);
|
||||
z = nsign * cos(rho);
|
||||
if (normals) glNormal3f( x*nsign, y*nsign, z*nsign );
|
||||
glTexCoord2f(s,1-t);
|
||||
glVertex3f( x*radius, y*radius, z*radius );
|
||||
x = -sin(theta) * sin(rho+drho);
|
||||
y = cos(theta) * sin(rho+drho);
|
||||
z = nsign * cos(rho+drho);
|
||||
if (normals) glNormal3f( x*nsign, y*nsign, z*nsign );
|
||||
glTexCoord2f(s,1-(t-dt));
|
||||
s += ds;
|
||||
glVertex3f( x*radius, y*radius, z*radius );
|
||||
}
|
||||
glEnd();
|
||||
t -= dt;
|
||||
}
|
||||
|
||||
/* draw -Z end as a triangle fan */
|
||||
glBegin( GL_TRIANGLE_FAN );
|
||||
glNormal3f( 0.0, 0.0, -1.0 );
|
||||
glTexCoord2f(0.5,1.0);
|
||||
glVertex3f( 0.0, 0.0, -radius*nsign );
|
||||
rho = M_PI - drho;
|
||||
s = 1.0;
|
||||
t = dt;
|
||||
for (j=slices;j>=0;j--) {
|
||||
theta = (j==slices) ? 0.0 : j * dtheta;
|
||||
x = -sin(theta) * sin(rho);
|
||||
y = cos(theta) * sin(rho);
|
||||
z = nsign * cos(rho);
|
||||
if (normals) glNormal3f( x*nsign, y*nsign, z*nsign );
|
||||
glTexCoord2f(s,1-t);
|
||||
s -= ds;
|
||||
glVertex3f( x*radius, y*radius, z*radius );
|
||||
}
|
||||
glEnd();
|
||||
}
|
23
programs/develop/libraries/TinyGL/examples/glu.h
Normal file
23
programs/develop/libraries/TinyGL/examples/glu.h
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
void gluPerspective( GLdouble fovy, GLdouble aspect,
|
||||
GLdouble zNear, GLdouble zFar );
|
||||
|
||||
typedef struct {
|
||||
int draw_style;
|
||||
} GLUquadricObj;
|
||||
|
||||
#define GLU_LINE 0
|
||||
|
||||
GLUquadricObj *gluNewQuadric(void);
|
||||
void gluQuadricDrawStyle(GLUquadricObj *obj, int style);
|
||||
|
||||
void gluSphere(GLUquadricObj *qobj,
|
||||
float radius,int slices,int stacks);
|
||||
void gluCylinder( GLUquadricObj *qobj,
|
||||
GLdouble baseRadius, GLdouble topRadius, GLdouble height,
|
||||
GLint slices, GLint stacks );
|
||||
void gluDisk( GLUquadricObj *qobj,
|
||||
GLdouble innerRadius, GLdouble outerRadius,
|
||||
GLint slices, GLint loops );
|
||||
|
||||
void drawTorus(float rc, int numc, float rt, int numt);
|
1753
programs/develop/libraries/TinyGL/examples/mech.c
Normal file
1753
programs/develop/libraries/TinyGL/examples/mech.c
Normal file
File diff suppressed because it is too large
Load Diff
113
programs/develop/libraries/TinyGL/examples/nanox.c
Normal file
113
programs/develop/libraries/TinyGL/examples/nanox.c
Normal file
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Demonstration program for Nano-X graphics.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#define MWINCLUDECOLORS
|
||||
#include <microwin/nano-X.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/nglx.h>
|
||||
#include "ui.h"
|
||||
|
||||
static GR_WINDOW_ID w1; /* id for large window */
|
||||
static GR_GC_ID gc1; /* graphics context for text */
|
||||
|
||||
void errorcatcher(); /* routine to handle errors */
|
||||
|
||||
void tkSwapBuffers(void)
|
||||
{
|
||||
nglXSwapBuffers(w1);
|
||||
}
|
||||
|
||||
int
|
||||
ui_loop(int argc,char **argv, const char *name)
|
||||
{
|
||||
GR_EVENT event; /* current event */
|
||||
GR_IMAGE_ID id = 0;
|
||||
NGLXContext cx;
|
||||
int width, height, k;
|
||||
|
||||
if (GrOpen() < 0) {
|
||||
fprintf(stderr, "cannot open graphics\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
width = 400;
|
||||
height = 300;
|
||||
|
||||
GrSetErrorHandler(errorcatcher);
|
||||
|
||||
w1 = GrNewWindow(GR_ROOT_WINDOW_ID, 10, 10, width, height, 4, BLACK, WHITE);
|
||||
|
||||
GrSelectEvents(w1, GR_EVENT_MASK_CLOSE_REQ|GR_EVENT_MASK_EXPOSURE|GR_EVENT_MASK_KEY_DOWN);
|
||||
|
||||
GrMapWindow(w1);
|
||||
|
||||
gc1 = GrNewGC();
|
||||
|
||||
GrSetGCForeground(gc1, WHITE);
|
||||
|
||||
cx = nglXCreateContext(NULL, 0);
|
||||
nglXMakeCurrent(w1, cx);
|
||||
|
||||
init();
|
||||
reshape(width, height);
|
||||
|
||||
while (1) {
|
||||
GrCheckNextEvent(&event);
|
||||
switch(event.type) {
|
||||
case GR_EVENT_TYPE_CLOSE_REQ:
|
||||
GrFreeImage(id);
|
||||
GrClose();
|
||||
exit(0);
|
||||
case GR_EVENT_TYPE_EXPOSURE:
|
||||
break;
|
||||
case GR_EVENT_TYPE_KEY_DOWN:
|
||||
{
|
||||
GR_EVENT_KEYSTROKE *kp = &event.keystroke;
|
||||
/* XXX: nanoX special keys are totally bugged ! */
|
||||
switch(kp->ch) {
|
||||
case 81:
|
||||
k = KEY_LEFT;
|
||||
break;
|
||||
case 83:
|
||||
k = KEY_RIGHT;
|
||||
break;
|
||||
case 82:
|
||||
k = KEY_UP;
|
||||
break;
|
||||
case 84:
|
||||
k = KEY_DOWN;
|
||||
break;
|
||||
default:
|
||||
k = kp->ch;
|
||||
break;
|
||||
}
|
||||
key(k, 0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
idle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Here on an unrecoverable error.
|
||||
*/
|
||||
void
|
||||
errorcatcher(code, name, id)
|
||||
GR_ERROR code; /* error code */
|
||||
GR_FUNC_NAME name; /* function name which failed */
|
||||
GR_ID id; /* resource id */
|
||||
{
|
||||
GrClose();
|
||||
fprintf(stderr, "DEMO ERROR: code %d, function %s, resource id %d\n",
|
||||
code, name, id);
|
||||
exit(1);
|
||||
}
|
160
programs/develop/libraries/TinyGL/examples/spin.c
Normal file
160
programs/develop/libraries/TinyGL/examples/spin.c
Normal file
@@ -0,0 +1,160 @@
|
||||
/* spin.c */
|
||||
|
||||
|
||||
/*
|
||||
* Spinning box. This program is in the public domain.
|
||||
*
|
||||
* Brian Paul
|
||||
*/
|
||||
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <GL/glx.h>
|
||||
#include <GL/gl.h>
|
||||
#include "ui.h"
|
||||
|
||||
|
||||
|
||||
|
||||
static GLfloat Xrot, Xstep;
|
||||
static GLfloat Yrot, Ystep;
|
||||
static GLfloat Zrot, Zstep;
|
||||
static GLfloat Step = 5.0;
|
||||
static GLfloat Scale = 1.0;
|
||||
static GLuint Object;
|
||||
|
||||
|
||||
|
||||
|
||||
static GLuint make_object( void )
|
||||
{
|
||||
GLuint list;
|
||||
|
||||
list = glGenLists( 1 );
|
||||
|
||||
glNewList( list, GL_COMPILE );
|
||||
|
||||
glBegin( GL_LINE_LOOP );
|
||||
glColor3f( 1.0, 1.0, 1.0 );
|
||||
glVertex3f( 1.0, 0.5, -0.4 );
|
||||
glColor3f( 1.0, 0.0, 0.0 );
|
||||
glVertex3f( 1.0, -0.5, -0.4 );
|
||||
glColor3f( 0.0, 1.0, 0.0 );
|
||||
glVertex3f( -1.0, -0.5, -0.4 );
|
||||
glColor3f( 0.0, 0.0, 1.0 );
|
||||
glVertex3f( -1.0, 0.5, -0.4 );
|
||||
glEnd();
|
||||
|
||||
glColor3f( 1.0, 1.0, 1.0 );
|
||||
|
||||
glBegin( GL_LINE_LOOP );
|
||||
glVertex3f( 1.0, 0.5, 0.4 );
|
||||
glVertex3f( 1.0, -0.5, 0.4 );
|
||||
glVertex3f( -1.0, -0.5, 0.4 );
|
||||
glVertex3f( -1.0, 0.5, 0.4 );
|
||||
glEnd();
|
||||
|
||||
glBegin( GL_LINES );
|
||||
glVertex3f( 1.0, 0.5, -0.4 ); glVertex3f( 1.0, 0.5, 0.4 );
|
||||
glVertex3f( 1.0, -0.5, -0.4 ); glVertex3f( 1.0, -0.5, 0.4 );
|
||||
glVertex3f( -1.0, -0.5, -0.4 ); glVertex3f( -1.0, -0.5, 0.4 );
|
||||
glVertex3f( -1.0, 0.5, -0.4 ); glVertex3f( -1.0, 0.5, 0.4 );
|
||||
glEnd();
|
||||
|
||||
|
||||
glEndList();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void reshape( int width, int height )
|
||||
{
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
|
||||
GLenum key(int k, GLenum mask)
|
||||
{
|
||||
switch (k) {
|
||||
case KEY_ESCAPE:
|
||||
exit(0);
|
||||
}
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
|
||||
void draw( void )
|
||||
{
|
||||
glClear( GL_COLOR_BUFFER_BIT );
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
glTranslatef( 0.0, 0.0, -10.0 );
|
||||
glScalef( Scale, Scale, Scale );
|
||||
if (Xstep) {
|
||||
glRotatef( Xrot, 1.0, 0.0, 0.0 );
|
||||
}
|
||||
else if (Ystep) {
|
||||
glRotatef( Yrot, 0.0, 1.0, 0.0 );
|
||||
}
|
||||
else {
|
||||
glRotatef( Zrot, 0.0, 0.0, 1.0 );
|
||||
}
|
||||
|
||||
glCallList( Object );
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
glFlush();
|
||||
tkSwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
void idle( void )
|
||||
{
|
||||
Xrot += Xstep;
|
||||
Yrot += Ystep;
|
||||
Zrot += Zstep;
|
||||
|
||||
if (Xrot>=360.0) {
|
||||
Xrot = Xstep = 0.0;
|
||||
Ystep = Step;
|
||||
}
|
||||
else if (Yrot>=360.0) {
|
||||
Yrot = Ystep = 0.0;
|
||||
Zstep = Step;
|
||||
}
|
||||
else if (Zrot>=360.0) {
|
||||
Zrot = Zstep = 0.0;
|
||||
Xstep = Step;
|
||||
}
|
||||
draw();
|
||||
}
|
||||
|
||||
void init(void)
|
||||
{
|
||||
Object = make_object();
|
||||
glCullFace( GL_BACK );
|
||||
/* glEnable( GL_CULL_FACE );*/
|
||||
glDisable( GL_DITHER );
|
||||
glShadeModel( GL_FLAT );
|
||||
/* glEnable( GL_DEPTH_TEST ); */
|
||||
|
||||
Xrot = Yrot = Zrot = 0.0;
|
||||
Xstep = Step;
|
||||
Ystep = Zstep = 0.0;
|
||||
}
|
||||
|
||||
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
return ui_loop(argc, argv, "spin");
|
||||
}
|
193
programs/develop/libraries/TinyGL/examples/texobj.c
Normal file
193
programs/develop/libraries/TinyGL/examples/texobj.c
Normal file
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* Example of using the 1.1 texture object functions.
|
||||
* Also, this demo utilizes Mesa's fast texture map path.
|
||||
*
|
||||
* Brian Paul June 1996
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <GL/glx.h>
|
||||
#include <GL/gl.h>
|
||||
#include "ui.h"
|
||||
|
||||
static GLuint TexObj[2];
|
||||
static GLfloat Angle = 0.0f;
|
||||
|
||||
static int cnt=0,v=0;
|
||||
|
||||
void
|
||||
draw(void)
|
||||
{
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
glColor3f(1.0, 1.0, 1.0);
|
||||
|
||||
/* draw first polygon */
|
||||
glPushMatrix();
|
||||
glTranslatef(-1.0, 0.0, 0.0);
|
||||
glRotatef(Angle, 0.0, 0.0, 1.0);
|
||||
glBindTexture(GL_TEXTURE_2D, TexObj[v]);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(0.0, 0.0);
|
||||
glVertex2f(-1.0, -1.0);
|
||||
glTexCoord2f(1.0, 0.0);
|
||||
glVertex2f(1.0, -1.0);
|
||||
glTexCoord2f(1.0, 1.0);
|
||||
glVertex2f(1.0, 1.0);
|
||||
glTexCoord2f(0.0, 1.0);
|
||||
glVertex2f(-1.0, 1.0);
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glPopMatrix();
|
||||
|
||||
/* draw second polygon */
|
||||
glPushMatrix();
|
||||
glTranslatef(1.0, 0.0, 0.0);
|
||||
glRotatef(Angle - 90.0, 0.0, 1.0, 0.0);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, TexObj[1-v]);
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(0.0, 0.0);
|
||||
glVertex2f(-1.0, -1.0);
|
||||
glTexCoord2f(1.0, 0.0);
|
||||
glVertex2f(1.0, -1.0);
|
||||
glTexCoord2f(1.0, 1.0);
|
||||
glVertex2f(1.0, 1.0);
|
||||
glTexCoord2f(0.0, 1.0);
|
||||
glVertex2f(-1.0, 1.0);
|
||||
glEnd();
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
tkSwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
/* new window size or exposure */
|
||||
void
|
||||
reshape(int width, int height)
|
||||
{
|
||||
glViewport(0, 0, (GLint) width, (GLint) height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
/* glOrtho( -3.0, 3.0, -3.0, 3.0, -10.0, 10.0 ); */
|
||||
glFrustum(-2.0, 2.0, -2.0, 2.0, 6.0, 20.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
glTranslatef(0.0, 0.0, -8.0);
|
||||
}
|
||||
|
||||
|
||||
void bind_texture(int texobj,int image)
|
||||
{
|
||||
static int width = 8, height = 8;
|
||||
static int color[2][3]={
|
||||
{255,0,0},
|
||||
{0,255,0},
|
||||
};
|
||||
GLubyte tex[64][3];
|
||||
static GLubyte texchar[2][8*8] = {
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 1, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 0, 1, 0, 0, 0,
|
||||
0, 0, 0, 1, 1, 1, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0},
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 2, 2, 0, 0, 0,
|
||||
0, 0, 2, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 2, 0, 0,
|
||||
0, 0, 0, 0, 2, 0, 0, 0,
|
||||
0, 0, 0, 2, 0, 0, 0, 0,
|
||||
0, 0, 2, 2, 2, 2, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0}};
|
||||
|
||||
int i,j;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texobj);
|
||||
|
||||
/* red on white */
|
||||
for (i = 0; i < height; i++) {
|
||||
for (j = 0; j < width; j++) {
|
||||
int p = i * width + j;
|
||||
if (texchar[image][(height - i - 1) * width + j]) {
|
||||
tex[p][0] = color[image][0];
|
||||
tex[p][1] = color[image][1];
|
||||
tex[p][2] = color[image][2];
|
||||
} else {
|
||||
tex[p][0] = 255;
|
||||
tex[p][1] = 255;
|
||||
tex[p][2] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, 3, width, height, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, tex);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
/* end of texture object */
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
init(void)
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
/* Setup texturing */
|
||||
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
||||
|
||||
/* generate texture object IDs */
|
||||
glGenTextures(2, TexObj);
|
||||
bind_texture(TexObj[0],0);
|
||||
bind_texture(TexObj[1],1);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
idle(void)
|
||||
{
|
||||
|
||||
Angle += 2.0;
|
||||
|
||||
if (++cnt==5) {
|
||||
cnt=0;
|
||||
v=!v;
|
||||
}
|
||||
draw();
|
||||
}
|
||||
|
||||
/* change view angle, exit upon ESC */
|
||||
GLenum key(int k, GLenum mask)
|
||||
{
|
||||
switch (k) {
|
||||
case 'q':
|
||||
case KEY_ESCAPE:
|
||||
exit(0);
|
||||
}
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
return ui_loop(argc, argv, "texobj");
|
||||
}
|
||||
|
||||
|
17
programs/develop/libraries/TinyGL/examples/ui.h
Normal file
17
programs/develop/libraries/TinyGL/examples/ui.h
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* tk like ui
|
||||
*/
|
||||
void draw( void );
|
||||
void idle( void );
|
||||
GLenum key(int k, GLenum mask);
|
||||
void reshape( int width, int height );
|
||||
void init( void );
|
||||
int ui_loop(int argc, char **argv, const char *name);
|
||||
void tkSwapBuffers(void);
|
||||
|
||||
#define KEY_UP 0xe000
|
||||
#define KEY_DOWN 0xe001
|
||||
#define KEY_LEFT 0xe002
|
||||
#define KEY_RIGHT 0xe003
|
||||
#define KEY_ESCAPE 0xe004
|
||||
|
Reference in New Issue
Block a user