added digit display

This commit is contained in:
Alexandre 2025-02-05 18:03:14 +01:00
parent 58a9a8cbf9
commit 9585169fec
6 changed files with 87 additions and 8 deletions

BIN
bin/back

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -138,7 +138,7 @@ int main_alt() {
// glfw window creation // glfw window creation
// -------------------- // --------------------
GLFWwindow* window = glfwCreateWindow(1500, 1000, "LearnOpenGL", NULL, NULL); GLFWwindow* window = glfwCreateWindow(1500, 1000, "yahoo", NULL, NULL);
if (window == NULL) if (window == NULL)
{ {
fprintf(stderr, "ERROR : cannot initialize GL window"); fprintf(stderr, "ERROR : cannot initialize GL window");
@ -312,16 +312,16 @@ int main_alt() {
glUseProgram(shaderProgramR); glUseProgram(shaderProgramR);
glBindVertexArray(RVAO); glBindVertexArray(RVAO);
gl_drawRect(shaderProgramR, RVAO, RVBO, -0.5f, -0.5f, 0.5f, 0.5f, 255, 43, 255); finish = clock();
gl_drawInteger(shaderProgramR, (int)(1.0f/(((float)finish - (float)origin)/CLOCKS_PER_SEC)), -0.5f, 0.85f, 0.05, 32, 255, 32, 0.005, 1);
// glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.) // glfw: swap buffers and poll IO events (keys pressed/released, mouse moved etc.)
// ------------------------------------------------------------------------------- // -------------------------------------------------------------------------------
finish = clock();
processInput(window, ((float)finish - (float)origin)/CLOCKS_PER_SEC); processInput(window, ((float)finish - (float)origin)/CLOCKS_PER_SEC);
teleport_on_edge(); teleport_on_edge();
update_entities(((float)finish - (float)origin)/CLOCKS_PER_SEC); update_entities(((float)finish - (float)origin)/CLOCKS_PER_SEC);
updateProj(((float)finish - (float)origin)/CLOCKS_PER_SEC); updateProj(((float)finish - (float)origin)/CLOCKS_PER_SEC);
printf("%f\n", 1.0f/(((float)finish - (float)origin)/CLOCKS_PER_SEC)); //printf("%f\n", 1.0f/(((float)finish - (float)origin)/CLOCKS_PER_SEC));
//printf("%lf, %lf, %lf\n", camx, camy, camz); //printf("%lf, %lf, %lf\n", camx, camy, camz);
usleep(interval); usleep(interval);

View File

@ -32,19 +32,95 @@ void initMenus() {
rectDefault[15] = 0.5f; rectDefault[16] = -0.5f; rectDefault[17] = -1.0f; rectDefault[15] = 0.5f; rectDefault[16] = -0.5f; rectDefault[17] = -1.0f;
} }
void gl_drawRect(unsigned int fragShader, unsigned int VAO, unsigned int VBO, float x, float y, float w, float h, int r, int g, int b) { void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b) {
glm_mat4_identity(scale); glm_mat4_identity(scale);
glm_mat4_identity(slide); glm_mat4_identity(slide);
scale[0][0] = 0.5f; scale[0][0] = w;
scale[1][1] = h;
scale[2][2] = 0.5f;
glm_translate(slide, (vec3){x+w/2, y+h/2, 0.0f});
glUniformMatrix4fv(glGetUniformLocation(fragShader, "scale"), 1, GL_FALSE, (float*)scale); glUniformMatrix4fv(glGetUniformLocation(fragShader, "scale"), 1, GL_FALSE, (float*)scale);
glUniformMatrix4fv(glGetUniformLocation(fragShader, "slide"), 1, GL_FALSE, (float*)slide); glUniformMatrix4fv(glGetUniformLocation(fragShader, "slide"), 1, GL_FALSE, (float*)slide);
glUniform4f(glGetUniformLocation(fragShader, "u_color2"), 0.9f, 0.4f, 0.6f, 0.5f); glUniform4f(glGetUniformLocation(fragShader, "u_color2"), r/255.0f, g/255.0f, b/255.0f, 0.5f);
glDrawArrays(GL_TRIANGLES, 0, 6); glDrawArrays(GL_TRIANGLES, 0, 6);
} }
void gl_drawDigit(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width) {
assert(n >= 0 && n < 10);
if(n == 0) {
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(n == 1) {
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(n == 2) {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(n == 3) {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(n == 4) {
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(n == 5) {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(n == 6) {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else if(n == 7) {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
} else if(n == 8) {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
} else {
gl_drawRect(fragShader, x-size/2-width, y+size-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, 2*width, size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-width, size+2*width, 2*width, r, g, b);
gl_drawRect(fragShader, x+size/2-width, y-size-width, 2*width, 2*size+2*width, r, g, b);
gl_drawRect(fragShader, x-size/2-width, y-size-width, size+2*width, 2*width, r, g, b);
}
}
// 7-segment display
// side can be -1 (aligned right) or 1 (aligned left)
void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side) {
int left = n;
float curx = x;
if(side == 1) {
curx += ((ln_baseN(n, 10)-1)*(size+4*width));
}
while(left > 0) {
gl_drawDigit(fragShader, left%10, curx, y, size, r, g, b, width);
curx -= (size+4*width);
left = left/10;
}
}
void gl_initDrawRect(unsigned int shaderProgram) { void gl_initDrawRect(unsigned int shaderProgram) {
glUseProgram(shaderProgram); glUseProgram(shaderProgram);
} }

View File

@ -3,7 +3,10 @@
void initMenus(); void initMenus();
void gl_drawRect(unsigned int fragShader, unsigned int VAO, unsigned int VBO, float x, float y, float w, float h, int r, int g, int b); void gl_drawRect(unsigned int fragShader, float x, float y, float w, float h, int r, int g, int b);
void gl_initDrawRect(unsigned int shaderProgram); void gl_initDrawRect(unsigned int shaderProgram);
void gl_drawDigit(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width);
void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side);
#endif #endif