Ejemplo n.º 1
0
int terrainCreateDL(int lighting,int faceType) {

	GLuint terrainDL;
	int startW,startL;
	float factor;
	int i,j;

	startW = terrainGridWidth / 2 - terrainGridWidth;
	startL = - terrainGridLength / 2 + terrainGridLength;

	terrainDL = glGenLists(1);

	if (lighting)
		terrainSimLight = 0;


	glNewList(terrainDL,GL_COMPILE);
	for (i = 0 ; i < terrainGridLength-1; i++) {
		glBegin(faceType);
		for(j=0; j < terrainGridWidth; j++) {
			if (terrainSimLight  && terrainColors != NULL) {
				factor = terrainComputeLightFactor(i+1,j,startL,startW);
				glColor3f(terrainColors[3*((i+1)*terrainGridWidth + j)] * factor + terrainAmbientCol[0],
						  terrainColors[3*((i+1)*terrainGridWidth + j)+1] * factor + terrainAmbientCol[1],
						  terrainColors[3*((i+1)*terrainGridWidth + j)+2] * factor + terrainAmbientCol[2]);
			}
			else if (terrainSimLight  && terrainColors == NULL) {
				factor = terrainComputeLightFactor(i+1,j,startL,startW);
				glColor3f(terrainDiffuseCol[0] * factor + terrainAmbientCol[0],
							terrainDiffuseCol[1] * factor + terrainAmbientCol[1],
							terrainDiffuseCol[2] * factor + terrainAmbientCol[2]);
			}
			else if (terrainColors != NULL) 
				glColor3f(terrainColors[3*((i+1)*terrainGridWidth + j)],
						  terrainColors[3*((i+1)*terrainGridWidth + j)+1],
						  terrainColors[3*((i+1)*terrainGridWidth + j)+2]);
	
			if (terrainNormals != NULL && lighting)
				glNormal3f(terrainNormals[3*((i+1)*terrainGridWidth + j)],
						  terrainNormals[3*((i+1)*terrainGridWidth + j)+1],
						  terrainNormals[3*((i+1)*terrainGridWidth + j)+2]);	
			glVertex3f(
				((startW + j) + transX) * scaleX,// * stepW,
				terrainHeights[(i+1)*terrainGridWidth + (j)] + transY,
				((startL - (i+1)) + transZ) * scaleZ);// * stepL);					
			
			if (terrainSimLight && terrainColors != NULL) {
				factor = terrainComputeLightFactor(i,j,startL,startW);
				glColor3f(terrainColors[3*(i*terrainGridWidth + j)] * factor + terrainAmbientCol[0],
						  terrainColors[3*(i*terrainGridWidth + j)+1] * factor + terrainAmbientCol[1],
						  terrainColors[3*(i*terrainGridWidth + j)+2] * factor + terrainAmbientCol[2]);
			}
			else if (terrainSimLight && terrainColors == NULL) {
				factor = terrainComputeLightFactor(i,j,startL,startW);
				glColor3f(terrainDiffuseCol[0] * factor + terrainAmbientCol[0],
							terrainDiffuseCol[1] * factor + terrainAmbientCol[1],
							terrainDiffuseCol[2] * factor + terrainAmbientCol[2]);
			}
			else if (terrainColors != NULL) 
				glColor3f(terrainColors[3*(i*terrainGridWidth + j)],
						  terrainColors[3*(i*terrainGridWidth + j)+1],
						  terrainColors[3*(i*terrainGridWidth + j)+2]);

			if (terrainNormals != NULL && lighting)
				glNormal3f(terrainNormals[3*(i*terrainGridWidth + j)],
						   terrainNormals[3*(i*terrainGridWidth + j)+1],
						   terrainNormals[3*(i*terrainGridWidth + j)+2]);
			glVertex3f(
				((startW + j) + transX) * scaleX,// * stepW,
				terrainHeights[i*terrainGridWidth + j] + transY,
				((startL - i) + transZ) * scaleZ);// * stepL);
		}
		glEnd();
	}
	glEndList();

	return(terrainDL);
}
Ejemplo n.º 2
0
int terrainCreateDL(float xOffset, float yOffset, float zOffset, int lighting) {

    GLuint terrainDL;
    float startW,startL,factor;
    int i,j;

    startW = terrainGridWidth / 2.0 - terrainGridWidth;
    startL = - terrainGridLength / 2.0 + terrainGridLength;

    terrainDL = glGenLists(1);

    if (lighting)
        terrainSimLight = 0;


    glNewList(terrainDL,GL_COMPILE);
    for (i = 0 ; i < terrainGridLength-1; i++) {
        glBegin(GL_TRIANGLE_STRIP);
        for(j=0; j < terrainGridWidth; j++) {
            if (terrainSimLight  && terrainColors != NULL) {
                factor = terrainComputeLightFactor(i+1,j,startL,startW);
                glColor3f(terrainColors[3*((i+1)*terrainGridWidth + j)] * factor + terrainAmbientCol[0],
                          terrainColors[3*((i+1)*terrainGridWidth + j)+1] * factor + terrainAmbientCol[1],
                          terrainColors[3*((i+1)*terrainGridWidth + j)+2] * factor + terrainAmbientCol[2]);
            }
            else if (terrainSimLight  && terrainColors == NULL) {
                factor = terrainComputeLightFactor(i+1,j,startL,startW);
                glColor3f(terrainDiffuseCol[0] * factor + terrainAmbientCol[0],
                          terrainDiffuseCol[1] * factor + terrainAmbientCol[1],
                          terrainDiffuseCol[2] * factor + terrainAmbientCol[2]);
            }
            else if (terrainColors != NULL)
                glColor3f(terrainColors[3*((i+1)*terrainGridWidth + j)],
                          terrainColors[3*((i+1)*terrainGridWidth + j)+1],
                          terrainColors[3*((i+1)*terrainGridWidth + j)+2]);

            if (terrainNormals != NULL && lighting)
                glNormal3f(terrainNormals[3*((i+1)*terrainGridWidth + j)],
                           terrainNormals[3*((i+1)*terrainGridWidth + j)+1],
                           terrainNormals[3*((i+1)*terrainGridWidth + j)+2]);
            glVertex3f(
                (startW + j)*terrainStepWidth,// * stepW,
                terrainHeights[(i+1)*terrainGridWidth + (j)],
                (startL - (i+1))*terrainStepLength);// * stepL);

            if (terrainSimLight && !lighting && terrainColors != NULL) {
                factor = terrainComputeLightFactor(i,j,startL,startW);
                glColor3f(terrainColors[3*(i*terrainGridWidth + j)] * factor + terrainAmbientCol[0],
                          terrainColors[3*(i*terrainGridWidth + j)+1] * factor + terrainAmbientCol[1],
                          terrainColors[3*(i*terrainGridWidth + j)+2] * factor + terrainAmbientCol[2]);
            }
            else if (terrainSimLight && !lighting && terrainColors == NULL) {
                factor = terrainComputeLightFactor(i,j,startL,startW);
                glColor3f(terrainDiffuseCol[0] * factor + terrainAmbientCol[0],
                          terrainDiffuseCol[1] * factor + terrainAmbientCol[1],
                          terrainDiffuseCol[2] * factor + terrainAmbientCol[2]);
            }
            else if (terrainColors != NULL)
                glColor3f(terrainColors[3*(i*terrainGridWidth + j)],
                          terrainColors[3*(i*terrainGridWidth + j)+1],
                          terrainColors[3*(i*terrainGridWidth + j)+2]);
            if (terrainNormals != NULL && lighting)
                glNormal3f(terrainNormals[3*(i*terrainGridWidth + j)],
                           terrainNormals[3*(i*terrainGridWidth + j)+1],
                           terrainNormals[3*(i*terrainGridWidth + j)+2]);
            glVertex3f(
                (startW + j)*terrainStepWidth,// * stepW,
                terrainHeights[i*terrainGridWidth + j],
                (startL - i)*terrainStepLength);// * stepL);
        }
        glEnd();
    }
    glEndList();

    return(terrainDL);
}