Пример #1
0
void TerrainRenderer::drawNode(GLdouble offsetX, GLdouble offsetY, GLdouble size, QuadTreeNode *node){
    size = size/2;
    for(int i=0; i<2; i++){
        for(int j=0; j<2; j++){
            QuadTreeNode *child;
            if(i==0 && j==0) child = node->tlNode;
            if(i==1 && j==0) child = node->trNode;
            if(i==0 && j==1) child = node->blNode;
            if(i==1 && j==1) child = node->brNode;
            GLfloat tile_x = size*i+offsetX;
            GLfloat tile_y = size*i+offsetY;
            
            GLfloat d = getTileDistance(tile_x, tile_y, transformHeight(child->min), transformHeight(child->max), size);

            if(tile_x == 0.0 && tile_y == 0.0 && size == 0.5)
                printf("Distance from %i, %i: %f\n", i, j, d);
            if(d < size*2 && !child->isLeaf()){
                drawNode(size*i+offsetX, size*j+offsetY, size, child);
            }else{
                drawHeightmap(size*i+offsetX, size*j+offsetY, size, child);
            }
        }
    }
}
Пример #2
0
void display()
{
	displayPrev = displayCurrent;
	displayCurrent = clock();

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


	if (drawHeightmapFlag){

		drawHeightmap();
		glutSwapBuffers();
		return;
	}


	if (drawFogFlag){
		glEnable(GL_FOG);
		glFogf(GL_FOG_MODE, GL_EXP);
		glFogf(GL_FOG_DENSITY, 0.008);
		GLfloat fogColor[4] = { 0.3f, 0.3f, 0.3f, 1.0f };      // Fog Color
		glFogfv(GL_FOG_COLOR, fogColor);
	}
	else{
		glDisable(GL_FOG);
	}




	//Vale tin kamera
	glLoadIdentity();
	gluLookAt(cameraPosition[0], cameraPosition[1], cameraPosition[2],
		0, 0, 0,
		0, 1, 0);


	

	//Draw Skybox
	if (drawSkyboxFlag){
		drawSkybox();
	}

	// Draw Terrain
	drawTerrain();

	//Draw Sea
	if (drawSeaFlag){
		drawSea();
	}

	drawSun();





	//Add Light
	glEnable(GL_NORMALIZE);
	glEnable(GL_LINEAR_ATTENUATION);
	glShadeModel(GL_SMOOTH);
	float zeros[3] = { 0, 0, 0 };

	glMaterialfv(GL_FRONT, GL_EMISSION, zeros);
	GLfloat lightPos[] = { lightPosition[0], lightPosition[1], lightPosition[2], 1 };
	glLightfv(GL_LIGHT0, GL_POSITION, lightPos);


	glutSwapBuffers();
}