トップページgamedev
1001コメント227KB

ソースを上げるスレッド

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。01/11/06 18:18ID:TUTRHoJP
特に特定のスレに当てはまるわけじゃないけど
何となくソースを上げたくなったときに公開するためのスレッド。

# 一種の隔離スレです。
0008名無しさん@お腹いっぱい。01/11/06 21:22ID:???
#include <windows.h>
#pragma warning(disable : 4244)


#include <GL/glut.h> /* glaux を glut にする */

#include <stdlib.h>
#include <math.h>

void axis(GLfloat d, GLfloat s);
void subaxis(GLfloat d, GLfloat s);

char TitleString[] = "双曲放物面";
GLfloat eye[]={ 40.0, 10.0, 20.0 };

GLfloat v[40][40][3], n[40][40][3];

GLfloat light_ambient[] = { 0.2, 0.2, 0.2, 1.0};
GLfloat light_diffuse[] = { 0.5, 0.5, 0.5, 1.0};
GLfloat light_specular[] = { 0.5, 0.5, 0.5, 1.0};

GLfloat mat_ambient1[] = { 0.7, 0.7, 0.7, 1.0 },
mat_diffuse1[] = { 1.0, 1.0, 1.0, 1.0 },
mat_specular1[] = { 1.0, 1.0, 1.0, 1.0 },
mat_shininess1[] = { 100.0 };

GLfloat mat_ambient[] = { 0.5, 0.5, 0.7, 0.85 },
mat_diffuse[] = { 0.1, 0.5, 0.8, 0.85 },
mat_specular[] = { 1.0, 1.0, 1.0, 0.85 },
mat_shininess[] = { 100.0 };

void compute(void)
{
float x,y,z,r;
int i,j;

for(i=0; i<40; i++){
for(j=0; j<40; j++){
z = (float)i/10.0 - 2.0;
x = (float)j/10.0 - 2.0;
y = z*z - x*x;
r = sqrt((2.0*x)*(2.0*x) + 1.0 + (2.0*z)*(2.0*z));
v[i][j][0] = (GLfloat)x;
v[i][j][1] = (GLfloat)y;
v[i][j][2] = (GLfloat)z;
n[i][j][0] = (GLfloat)((2.0*x)/r);
n[i][j][1] = (GLfloat)(1.0/r);
n[i][j][2] = (GLfloat)(-(2.0*z)/r);
}
}
}
0009名無しさん@お腹いっぱい。01/11/06 21:23ID:???
void myinit(void)
{
GLfloat light0[] = { 100.0, 0.0, 0.0, 1.0 },
light1[] = { 0.0, 100.0, 0.0, 1.0 };

glLightfv(GL_LIGHT0, GL_POSITION, light0);
glLightfv(GL_LIGHT1, GL_POSITION, light1);

glEnable(GL_LIGHT0);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
}

void display(void) /* CALLBACK を消す */
{
GLfloat d = 0.05, s = 2.0;
int i,j;

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(eye[0], eye[1], eye[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR,light_specular);

glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR,light_specular);

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ZERO);

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient1);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse1);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular1);
glMaterialfv(GL_FRONT, GL_SHININESS,mat_shininess1);

axis(d,s);

glDepthMask(FALSE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS,mat_shininess);
0010名無しさん@お腹いっぱい。01/11/06 21:24ID:???

for(i=0; i<39; i++){
glBegin(GL_TRIANGLE_STRIP);
for(j=0; j<40; j++){
glNormal3f(n[i][j][0], n[i][j][1], n[i][j][2]);
glVertex3f(v[i][j][0], v[i][j][1], v[i][j][2]);
glNormal3f(n[i+1][j][0],n[i+1][j][1],n[i+1][j][2]);
glVertex3f(v[i+1][j][0],v[i+1][j][1],v[i+1][j][2]);
}
glEnd();
}
glDepthMask(TRUE);
glDisable(GL_BLEND);

glFlush ();
}
0011名無しさん@お腹いっぱい。01/11/06 21:25ID:???
void axis(GLfloat d, GLfloat s)
{

glPushMatrix();
subaxis(d, s);
glPopMatrix();

glPushMatrix();
glRotatef(90.0, 1.0, 0.0, 0.0);
subaxis(d, s);
glPopMatrix();

glPushMatrix();
glRotatef(-90.0, 0.0, 0.0, 1.0);
subaxis(d, s);
glPopMatrix();

}

void subaxis(GLfloat d, GLfloat s)
{
int i;
double pi = 3.14, t;
glBegin(GL_QUAD_STRIP);
for(i = 0; i<=6; i++){
t = i*2*pi/6;
glNormal3f( (GLfloat)cos(t), 0.0, (GLfloat)sin(t));
glVertex3f( (GLfloat) (d * cos(t)), -s, (GLfloat)(d * sin(t)));
glVertex3f( (GLfloat) (d * cos(t)), s, (GLfloat)(d * sin(t)));
}
glEnd();
glTranslatef(0.0, s, 0.0);
glRotatef(-90.0, 1.0, 0.0, 0.0);
glutSolidCone(2.0*d, 4.0*d, 5, 5);
}
0012おしまい。01/11/06 21:26ID:???
void myReshape(int w, int h) /* CALLBACK を消す。 w, h は int */
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(10.0, (GLfloat)w/(GLfloat)h, 1.0, 100.0);

glMatrixMode(GL_MODELVIEW);
}

void main(void)
{
compute();

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); /* 変更 */
glutInitWindowPosition(0,0); /* 窓の左上の座標 (ドット) */
glutInitWindowSize(500, 500); /* 窓のサイズ */
glutCreateWindow(TitleString);
myinit();
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutMainLoop( );
}
■ このスレッドは過去ログ倉庫に格納されています