[ create a new paste ] login | about

Project: ec
Link: http://ec.codepad.org/l3rUCvUR    [ raw code | fork ]

C++, pasted on Feb 8:
RenderStatusEnum Renderer::DisplayHeightMap(int id)
{
	float heights[2][2];
	float scale, yscale;
	float xx, zz;
	Vector* normals;
	unsigned char* hm_data;
	
	normals = hm_value->GetNormals();
	hm_data = hm_value->GetData();
	int hm_size = hm_value->GetSize();
	
	//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
	glEnable(GL_DEPTH_TEST);
	glDisable(GL_TEXTURE_2D);
	glEnable(GL_CULL_FACE);
	glCullFace(GL_FRONT);
	
	scale = 1;
	yscale = 0.1;
	
	glDisable(GL_LIGHTING);
	// Draw debug guide
	if(1) {
		// First draw X Y Z
		glColor4f(1, 0, 0,1);
		glBegin(GL_LINES);
			glVertex3f(0,0,0);
			glVertex3f(hm_size * scale,0,0);
		glEnd();

		glColor4f(0, 1, 0,1);
		glBegin(GL_LINES);
			glVertex3f(0,0,0);
			glVertex3f(0,hm_size * scale,0);
		glEnd();

		glColor4f(0, 0, 1, 1);
		glBegin(GL_LINES);
			glVertex3f(0,0,0);
			glVertex3f(0,0,hm_size * scale);
		glEnd();
		
		glColor4f(0, 0, 0.4, 1);
		for(int i=0; i< hm_size+1; i++) {
			glBegin(GL_LINES);
			glVertex3f(i*scale, 0, 0);
			glVertex3f(i*scale, 0, hm_size * scale);
			glVertex3f(0, 0, i*scale);
			glVertex3f(hm_size * scale, 0, i*scale);
			glEnd();
		}

		for(int i=0; i< hm_size+1; i++) {
			glBegin(GL_LINES);
			glVertex3f(0, i*scale, 0);
			glVertex3f(hm_size * scale, i*scale, 0);
			glVertex3f(i*scale, 0, 0);
			glVertex3f(i*scale, hm_size * scale, 0);
			glEnd();
		}

		for(int i=0; i< hm_size+1; i++) {
			glBegin(GL_LINES);
			glVertex3f(0, i*scale, 0);
			glVertex3f(0, i*scale, hm_size * scale);
			
			glVertex3f(0, 0, i*scale);
			glVertex3f(0, hm_size * scale, i*scale);
			glEnd();
		}
		
	}
	
	float specref[] = {1, 1, 1, 1};
	glEnable(GL_LIGHTING);
	glEnable(GL_COLOR_MATERIAL);
	
	glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
	
	for(int x=0; x < hm_size-1; x++) {
		for(int z=0; z < hm_size-1; z++) {
			Vector n1;
			Vector n2;
			heights[0][0] = (float)hm_data[ x + ((z) * hm_size)];
			heights[1][0] = (float)hm_data[ x+1 + ((z) * hm_size)];
			heights[0][1] = (float)hm_data[ x + ((z+1) * hm_size)];
			heights[1][1] = (float)hm_data[ x+1 + ((z+1) * hm_size)];

			n1 = normals[(x + (z * hm_size)) * 2 + 0];
			n2 = normals[(x + (z * hm_size)) * 2 + 1];
			
			/*if(n1.y != -1)
				m_console->printf("Normal: %f    %f      %f", n1.x, n1.y, n1.z);*/
			
			xx = x * scale;
			zz = z * scale;
			glColor4f(0, 1, 0, 1);
			glBegin(GL_TRIANGLES);
				glNormal3f(n1.x, n1.y, n1.z);
				glVertex3f(xx, 			heights[0][0] * yscale, 		zz);
				glVertex3f(xx+ scale, 	heights[1][0] * yscale, 		zz);
				glVertex3f(xx, 			heights[0][1] * yscale, 		zz + scale);
			glEnd();

			// Draw the normal ticks
			/*glPushMatrix();			
			glColor4f(1, 1, 0, 1);
			glDisable(GL_LIGHTING);
			glBegin(GL_LINES);
				glVertex3f(xx, 			heights[0][0] * yscale, 		zz);
				glVertex3f(xx - n1.x, 			heights[0][0] * yscale - n1.y, 		zz  - n1.z);
			glEnd();
			glEnable(GL_LIGHTING);
			glPopMatrix();
			glColor4f(0, 1, 0, 1*/
			
			
			glColor4f(0, 1, 0, 1);
			// Draw the second triangle
			glBegin(GL_TRIANGLES);
				glNormal3f(n2.x, n2.y, n2.z);
				glVertex3f(xx + scale,	heights[1][0] * yscale, 		zz);
				glVertex3f(xx + scale, 	heights[1][1] * yscale, 		zz + scale);
				glVertex3f(xx, 			heights[0][1] * yscale, 		zz + scale);
			glEnd();
			
			// Draw the lines overtop of the shit
			/*glPushMatrix();
			glTranslatef(0, 0.01, 0);
			glColor4f(0, 0, 0, 1);
			glBegin(GL_LINES);
			glColor4f(0, 0, 0, 1);
				glVertex3f(xx, 			heights[0][0] * yscale, 		zz);
				glVertex3f(xx+ scale, 	heights[1][0] * yscale, 		zz);
				
				glVertex3f(xx, 			heights[0][1] * yscale, 		zz + scale);
				glVertex3f(xx, 			heights[0][0] * yscale, 		zz);
				
				glVertex3f(xx + scale,	heights[1][0] * yscale, 		zz);
				glVertex3f(xx + scale, 	heights[1][1] * yscale, 		zz + scale);
				
				glColor4f(1, 0, 0, 1);
				glVertex3f(xx, 			heights[0][1] * yscale, 		zz + scale);
				glVertex3f(xx + scale,	heights[1][0] * yscale, 		zz);
			glEnd();
			glPopMatrix();*/
		}
	}
	
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	return Load_Success;
}


Create a new paste based on this one


Comments: