/* 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; }
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); }