Exemplo n.º 1
0
/* Function: render_scene
	Scene should be assembled here. TODO: rework

	Parameters:
		counter - pointer to snapshot's point counter
*/
void render_scene(float y, float p, Snapshot *snap, uint32_t *counter) 
{
	uint32_t i;
	uint32_t cnt = *counter;
	clear_zbuffer(); 
	clear_img(CLEAR_COLOR); 
	yaw = y; 
	pitch = p;
	compute_yp(); 
	
	/* render here */
	render_cloud(&cloud,0,0,0,1); 
	
	/* end */
		
	for (i=0; i<WIDTH*HEIGHT; i++) { 
		if (img[i] != CLEAR_COLOR) {
		snap->x[cnt] = shrink(Xbuf[i], shrink_val); 
		snap->y[cnt] = shrink(Ybuf[i], shrink_val); 
		snap->z[cnt] = shrink(Zbuf[i], shrink_val); 
		snap->nx[cnt] = NXbuf[i];
		snap->ny[cnt] = NYbuf[i]; 
		snap->nz[cnt] = NZbuf[i];
		snap->sh[cnt] = SHbuf[i];
		snap->c[cnt] = true2high(img[i]); 
		cnt++; }
	}
	*counter = cnt;
}
Exemplo n.º 2
0
void render_clouds(CloudAttrib *attrib, int width, int height, float x, float y, float z, float rx, float ry, float fov, int ortho, int radius) {
    int i;
    if(!(ry > -0.444 || y > CLOUD_Y_HEIGHT)){
        return;
    }

    float matrix[16];
    set_matrix_3d(matrix, width, height, x, y, z, rx, ry, fov, ortho, radius);
    glUseProgram(attrib->program);
    glUniformMatrix4fv(attrib->matrix, 1, GL_FALSE, matrix);
    glUniform3f(attrib->camera, x, y, z);
    glUniform1i(attrib->sampler, 0);
    glUniform1f(attrib->timer, attrib->time);

    glUniform1i(attrib->skysampler, 2);

    glBindBuffer(GL_ARRAY_BUFFER, weather->cloud_vertex_buffer);
    glEnableVertexAttribArray(attrib->position);
    glEnableVertexAttribArray(attrib->normal);

    glEnableVertexAttribArray(attrib->colour);
    glVertexAttribPointer(attrib->position, 3, GL_FLOAT, GL_FALSE,
                          sizeof(GLfloat) * 9, 0);
    glVertexAttribPointer(attrib->normal, 3, GL_FLOAT, GL_FALSE,
                          sizeof(GLfloat) * 9, (GLvoid *)(sizeof(GLfloat) * 3));
    glVertexAttribPointer(attrib->colour, 3, GL_FLOAT, GL_FALSE,
                          sizeof(GLfloat) * 9, (GLvoid *)(sizeof(GLfloat) * 6));

    for(i=0; i<weather->cloud_count; i++){
        if ((weather->clouds)[i]->render) {
            render_cloud((weather->clouds)[i], attrib);
        }
    }

    glDisableVertexAttribArray(attrib->position);
    glDisableVertexAttribArray(attrib->normal);
    glDisableVertexAttribArray(attrib->colour);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}