Screwing around with texture coordinate generation ... still needs work.
This commit is contained in:
parent
31588527e0
commit
78268051c9
1 changed files with 81 additions and 18 deletions
|
@ -238,17 +238,32 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
if ( use_per_vertex_norms ) {
|
if ( use_per_vertex_norms ) {
|
||||||
MAT3_SCALE_VEC(normal, normals[n1], scale);
|
MAT3_SCALE_VEC(normal, normals[n1], scale);
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
xglTexCoord2f(calc_lon(nodes[n1][0], nodes[n1][1], nodes[n1][2]), calc_lat(nodes[n1][0], nodes[n1][1], nodes[n1][2]));
|
xglTexCoord2f(calc_lon(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z),
|
||||||
|
calc_lat(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z));
|
||||||
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
||||||
|
|
||||||
MAT3_SCALE_VEC(normal, normals[n2], scale);
|
MAT3_SCALE_VEC(normal, normals[n2], scale);
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
xglTexCoord2f(calc_lon(nodes[n2][0], nodes[n2][1], nodes[n2][2]), calc_lat(nodes[n2][0], nodes[n2][1], nodes[n2][2]));
|
xglTexCoord2f(calc_lon(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z),
|
||||||
|
calc_lat(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z));
|
||||||
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
||||||
|
|
||||||
MAT3_SCALE_VEC(normal, normals[n3], scale);
|
MAT3_SCALE_VEC(normal, normals[n3], scale);
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
xglTexCoord2f(calc_lon(nodes[n3][0], nodes[n3][1], nodes[n3][2]), calc_lat(nodes[n3][0], nodes[n3][1], nodes[n3][2]));
|
xglTexCoord2f(calc_lon(nodes[n3][0] + ref->x,
|
||||||
|
nodes[n3][1] + ref->y,
|
||||||
|
nodes[n3][2] + ref->z),
|
||||||
|
calc_lat(nodes[n3][0] + ref->x,
|
||||||
|
nodes[n3][1] + ref->y,
|
||||||
|
nodes[n3][2] + ref->z));
|
||||||
xglVertex3d(nodes[n3][0], nodes[n3][1], nodes[n3][2]);
|
xglVertex3d(nodes[n3][0], nodes[n3][1], nodes[n3][2]);
|
||||||
} else {
|
} else {
|
||||||
if ( odd ) {
|
if ( odd ) {
|
||||||
|
@ -259,11 +274,26 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
MAT3_SCALE_VEC(normal, approx_normal, scale);
|
MAT3_SCALE_VEC(normal, approx_normal, scale);
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
|
|
||||||
xglTexCoord2f(calc_lon(nodes[n1][0], nodes[n1][1], nodes[n1][2]), calc_lat(nodes[n1][0], nodes[n1][1], nodes[n1][2]));
|
xglTexCoord2f(calc_lon(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z),
|
||||||
|
calc_lat(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z));
|
||||||
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
||||||
xglTexCoord2f(calc_lon(nodes[n2][0], nodes[n2][1], nodes[n2][2]), calc_lat(nodes[n2][0], nodes[n2][1], nodes[n2][2]));
|
xglTexCoord2f(calc_lon(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z),
|
||||||
|
calc_lat(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z));
|
||||||
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
||||||
xglTexCoord2f(calc_lon(nodes[n3][0], nodes[n3][1], nodes[n3][2]), calc_lat(nodes[n3][0], nodes[n3][1], nodes[n3][2]));
|
xglTexCoord2f(calc_lon(nodes[n3][0] + ref->x,
|
||||||
|
nodes[n3][1] + ref->y,
|
||||||
|
nodes[n3][2] + ref->z),
|
||||||
|
calc_lat(nodes[n3][0] + ref->x,
|
||||||
|
nodes[n3][1] + ref->y,
|
||||||
|
nodes[n3][2] + ref->z));
|
||||||
xglVertex3d(nodes[n3][0], nodes[n3][1], nodes[n3][2]);
|
xglVertex3d(nodes[n3][0], nodes[n3][1], nodes[n3][2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,7 +309,12 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
MAT3_SCALE_VEC(normal, approx_normal, scale);
|
MAT3_SCALE_VEC(normal, approx_normal, scale);
|
||||||
}
|
}
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
xglTexCoord2f(calc_lon(nodes[n4][0], nodes[n4][1], nodes[n4][2]), calc_lat(nodes[n4][0], nodes[n4][1], nodes[n4][2]));
|
xglTexCoord2f(calc_lon(nodes[n4][0] + ref->x,
|
||||||
|
nodes[n4][1] + ref->y,
|
||||||
|
nodes[n4][2] + ref->z),
|
||||||
|
calc_lat(nodes[n4][0] + ref->x,
|
||||||
|
nodes[n4][1] + ref->y,
|
||||||
|
nodes[n4][2] + ref->z));
|
||||||
xglVertex3d(nodes[n4][0], nodes[n4][1], nodes[n4][2]);
|
xglVertex3d(nodes[n4][0], nodes[n4][1], nodes[n4][2]);
|
||||||
|
|
||||||
odd = 1 - odd;
|
odd = 1 - odd;
|
||||||
|
@ -302,15 +337,30 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
sscanf(line, "f %d %d %d\n", &n1, &n2, &n3);
|
sscanf(line, "f %d %d %d\n", &n1, &n2, &n3);
|
||||||
|
|
||||||
xglNormal3d(normals[n1][0], normals[n1][1], normals[n1][2]);
|
xglNormal3d(normals[n1][0], normals[n1][1], normals[n1][2]);
|
||||||
xglTexCoord2f(calc_lon(nodes[n1][0], nodes[n1][1], nodes[n1][2]), calc_lat(nodes[n1][0], nodes[n1][1], nodes[n1][2]));
|
xglTexCoord2f(calc_lon(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z),
|
||||||
|
calc_lat(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z));
|
||||||
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
||||||
|
|
||||||
xglNormal3d(normals[n2][0], normals[n2][1], normals[n2][2]);
|
xglNormal3d(normals[n2][0], normals[n2][1], normals[n2][2]);
|
||||||
xglTexCoord2f(calc_lon(nodes[n2][0], nodes[n2][1], nodes[n2][2]), calc_lat(nodes[n2][0], nodes[n2][1], nodes[n2][2]));
|
xglTexCoord2f(calc_lon(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z),
|
||||||
|
calc_lat(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z));
|
||||||
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
||||||
|
|
||||||
xglNormal3d(normals[n3][0], normals[n3][1], normals[n3][2]);
|
xglNormal3d(normals[n3][0], normals[n3][1], normals[n3][2]);
|
||||||
xglTexCoord2f(calc_lon(nodes[n3][0], nodes[n3][1], nodes[n3][2]), calc_lat(nodes[n3][0], nodes[n3][1], nodes[n3][2]));
|
xglTexCoord2f(calc_lon(nodes[n3][0] + ref->x,
|
||||||
|
nodes[n3][1] + ref->y,
|
||||||
|
nodes[n3][2] + ref->z),
|
||||||
|
calc_lat(nodes[n3][0] + ref->x,
|
||||||
|
nodes[n3][1] + ref->y,
|
||||||
|
nodes[n3][2] + ref->z));
|
||||||
xglVertex3d(nodes[n3][0], nodes[n3][1], nodes[n3][2]);
|
xglVertex3d(nodes[n3][0], nodes[n3][1], nodes[n3][2]);
|
||||||
} else if ( line[0] == 'q' ) {
|
} else if ( line[0] == 'q' ) {
|
||||||
/* continue a triangle strip */
|
/* continue a triangle strip */
|
||||||
|
@ -336,7 +386,12 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
xglTexCoord2f(calc_lon(nodes[n1][0], nodes[n1][1], nodes[n1][2]), calc_lat(nodes[n1][0], nodes[n1][1], nodes[n1][2]));
|
xglTexCoord2f(calc_lon(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z),
|
||||||
|
calc_lat(nodes[n1][0] + ref->x,
|
||||||
|
nodes[n1][1] + ref->y,
|
||||||
|
nodes[n1][2] + ref->z));
|
||||||
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
xglVertex3d(nodes[n1][0], nodes[n1][1], nodes[n1][2]);
|
||||||
|
|
||||||
odd = 1 - odd;
|
odd = 1 - odd;
|
||||||
|
@ -361,7 +416,12 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
xglNormal3dv(normal);
|
xglNormal3dv(normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
xglTexCoord2f(calc_lon(nodes[n2][0], nodes[n2][1], nodes[n2][2]), calc_lat(nodes[n2][0], nodes[n2][1], nodes[n2][2]));
|
xglTexCoord2f(calc_lon(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z),
|
||||||
|
calc_lat(nodes[n2][0] + ref->x,
|
||||||
|
nodes[n2][1] + ref->y,
|
||||||
|
nodes[n2][2] + ref->z));
|
||||||
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
xglVertex3d(nodes[n2][0], nodes[n2][1], nodes[n2][2]);
|
||||||
|
|
||||||
odd = 1 -odd;
|
odd = 1 -odd;
|
||||||
|
@ -412,13 +472,16 @@ GLint fgObjLoad(char *path, struct fgCartesianPoint *ref, double *radius) {
|
||||||
|
|
||||||
|
|
||||||
/* $Log$
|
/* $Log$
|
||||||
/* Revision 1.32 1998/04/27 03:30:13 curt
|
/* Revision 1.33 1998/04/27 15:58:15 curt
|
||||||
/* Minor transformation adjustments to try to keep scenery tiles closer to
|
/* Screwing around with texture coordinate generation ... still needs work.
|
||||||
/* (0, 0, 0) GLfloats run out of precision at the distances we need to model
|
|
||||||
/* the earth, but we can do a bunch of pre-transformations using double math
|
|
||||||
/* and then cast to GLfloat once everything is close in where we have less
|
|
||||||
/* precision problems.
|
|
||||||
/*
|
/*
|
||||||
|
* Revision 1.32 1998/04/27 03:30:13 curt
|
||||||
|
* Minor transformation adjustments to try to keep scenery tiles closer to
|
||||||
|
* (0, 0, 0) GLfloats run out of precision at the distances we need to model
|
||||||
|
* the earth, but we can do a bunch of pre-transformations using double math
|
||||||
|
* and then cast to GLfloat once everything is close in where we have less
|
||||||
|
* precision problems.
|
||||||
|
*
|
||||||
* Revision 1.31 1998/04/25 15:09:57 curt
|
* Revision 1.31 1998/04/25 15:09:57 curt
|
||||||
* Changed "r" to "rb" in gzopen() options. This fixes bad behavior in win32.
|
* Changed "r" to "rb" in gzopen() options. This fixes bad behavior in win32.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue