Enviado em 24/04/2021 - 19:33h
Boa noite a todos.// #include <stdio.h> #include <stdlib.h> #include <time.h> #include <GL/glut.h> #include <math.h> int n_stars; GLdouble theta, wTamPad = 10, wCentX, wCentY, Wh = 10; // GLdouble theta, wTamPad = 10, wCentX = 50, wCentY = 200, Wh = 10; struct Ponto { float x; float y; }; struct Ponto v[6]; static void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0, 400, 0, 400); } //Gera cor aleatoria para cada componente da função glColor3f float gerar_cores() { float cor_f; int gerado; srand(time(NULL)); gerado = rand() % 101; cor_f = (float)gerado/100; return cor_f; } void drawStars(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // for(int i = 0; i < n_stars; i++) { //glColor3f(1.0, 0.5, 0.8); glColor3f(0.5, gerar_cores(), 1.0); GLint k; theta = (6.2831853 / 6); for (k = 0; k < 6; k++) { v[k].x = wCentX + cos(theta * k) * wTamPad; v[k].y = wCentY + sin(theta * k) * wTamPad; }; float d = (v[1].x - v[2].x)/2; float dp = sqrt(pow(d,2)+pow(Wh,2)); glBegin(GL_POLYGON); glVertex2f(v[0].x,v[0].y); glVertex2f(v[1].x + dp, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(wCentX, v[1].y+Wh); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x - dp, v[2].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[2].x - dp, v[4].y); glVertex2f(v[4].x, v[4].y); //glVertex2f(v[4].x, v[4].y); //glVertex2f(wCentX, v[4].y - Wh); //glVertex2f(v[5].x, v[5].y); // glVertex2f(v[5].x, v[5].y); glVertex2f(v[5].x + dp, v[5].y); glVertex2f(v[0].x, v[0].y); glEnd(); glFlush(); // } } // void display() { // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // for (int i = 0; i < n_stars; i++) // { // drawStars(); // } // } // Programa Principal int main(int argc, char** argv) { printf( "n = " ); scanf( "%d", &n_stars ); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(0, 0); glutInitWindowSize(1280, 780); glutCreateWindow("Draw Stars"); init(); // --------------------------------------------------------------- for (int i = 0; i < n_stars; i++) { printf( "xc = " ); scanf( "%le", &wCentX ); printf( "yc = " ); scanf( "%le", &wCentY ); glutDisplayFunc(drawStars); } // --------------------------------------------------------------- // glutDisplayFunc(drawStars); glutMainLoop(); return 0; }
Enviado em 24/04/2021 - 20:15h
Troque o callback do glutDisplayFunc por esse código:// aproveitando seu código anterior que tava comentado void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { printf( "xc = " ); scanf( "%le", &wCentX ); printf( "yc = " ); scanf( "%le", &wCentY ); drawStars(); } } // no main coloque assim: glutDisplayFunc(display);
Enviado em 24/04/2021 - 22:05h
// aproveitando seu código anterior que tava comentado void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { printf( "xc = " ); scanf( "%le", &wCentX ); printf( "yc = " ); scanf( "%le", &wCentY ); drawStars(); } } // no main coloque assim: glutDisplayFunc(display);
Enviado em 24/04/2021 - 22:38h
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <GL/glut.h> #include <math.h> int n_stars; GLdouble theta, wTamPad = 10, wCentX, wCentY, Wh = 10; // GLdouble theta, wTamPad = 10, wCentX = 50, wCentY = 200, Wh = 10; struct Ponto { float x; float y; }; struct Ponto v[6]; static void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0, 400, 0, 400); } //Gera cor aleatoria para cada componente da função glColor3f float gerar_cores() { float cor_f; int gerado; srand(time(NULL)); gerado = rand() % 101; cor_f = (float)gerado/100; return cor_f; } void drawStars(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // for(int i = 0; i < n_stars; i++) { //glColor3f(1.0, 0.5, 0.8); glColor3f(0.5, gerar_cores(), 1.0); GLint k; theta = (6.2831853 / 6); for (k = 0; k < 6; k++) { v[k].x = wCentX + cos(theta * k) * wTamPad; v[k].y = wCentY + sin(theta * k) * wTamPad; }; float d = (v[1].x - v[2].x)/2; float dp = sqrt(pow(d,2)+pow(Wh,2)); glBegin(GL_POLYGON); glVertex2f(v[0].x,v[0].y); glVertex2f(v[1].x + dp, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(wCentX, v[1].y+Wh); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x - dp, v[2].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[2].x - dp, v[4].y); glVertex2f(v[4].x, v[4].y); //glVertex2f(v[4].x, v[4].y); //glVertex2f(wCentX, v[4].y - Wh); //glVertex2f(v[5].x, v[5].y); // glVertex2f(v[5].x, v[5].y); glVertex2f(v[5].x + dp, v[5].y); glVertex2f(v[0].x, v[0].y); glEnd(); glFlush(); // } } // aproveitando seu código anterior que tava comentado void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { printf( "xc = " ); scanf( "%le", &wCentX ); printf( "yc = " ); scanf( "%le", &wCentY ); drawStars(); } } // Programa Principal int main(int argc, char** argv) { printf( "n = " ); scanf( "%d", &n_stars ); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(0, 0); glutInitWindowSize(1280, 780); glutCreateWindow("Draw Stars"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; }
Enviado em 25/04/2021 - 09:23h
// aproveitando seu código anterior que tava comentado void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { printf( "xc = " ); scanf( "%le", &wCentX ); printf( "yc = " ); scanf( "%le", &wCentY ); drawStars(); } } // no main coloque assim: glutDisplayFunc(display);
Enviado em 25/04/2021 - 09:32h
// aproveitando seu código anterior que tava comentado void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { printf( "xc = " ); scanf( "%le", &wCentX ); printf( "yc = " ); scanf( "%le", &wCentY ); drawStars(); } } // no main coloque assim: glutDisplayFunc(display);
Enviado em 25/04/2021 - 16:10h
// aproveitando seu código anterior que tava comentado void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); drawStars(); }
Enviado em 25/04/2021 - 16:48h
Perae agora que vi, tu não tá armazenando os centros unm vetor. Precisa armazenar cada centro de cada estrela e depois desenhar conforme o centro atual.Enviado em 25/04/2021 - 18:27h
// #include <stdio.h> #include <stdlib.h> #include <time.h> #include <GL/glut.h> #include <math.h> int n_stars; GLdouble theta, wTamPad = 10, wCentX, wCentY, Wh = 10; // GLdouble theta, wTamPad = 10, wCentX = 50, wCentY = 200, Wh = 10; struct Ponto { float x; float y; }; struct Ponto v[6]; static void init() { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0, 400, 0, 400); // gluOrtho2D(-400, 400, -400, 400); } //Gera cor aleatoria para cada componente da função glColor3f float gerar_cores() { float cor_f; int gerado; srand(time(NULL)); gerado = rand() % 101; cor_f = (float)gerado/100; return cor_f; } int gerar_coordenada_aleatoria() { int coordenada; srand(time(NULL)); coordenada = 50 + (rand() % 150); return coordenada; } void drawStars(void) { // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.5, gerar_cores(), 1.0); wCentX = gerar_coordenada_aleatoria(); wCentY = gerar_coordenada_aleatoria(); GLint k; theta = (6.2831853 / 6); for (k = 0; k < 6; k++) { v[k].x = wCentX + cos(theta * k) * wTamPad; v[k].y = wCentY + sin(theta * k) * wTamPad; }; float d = (v[1].x - v[2].x)/2; float dp = sqrt(pow(d,2)+pow(Wh,2)); glBegin(GL_POLYGON); glVertex2f(v[0].x,v[0].y); glVertex2f(v[1].x + dp, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(wCentX, v[1].y+Wh); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x - dp, v[2].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[2].x - dp, v[4].y); glVertex2f(v[4].x, v[4].y); glVertex2f(v[5].x, v[5].y); glVertex2f(v[5].x + dp, v[5].y); glVertex2f(v[0].x, v[0].y); // } glEnd(); glFlush(); // } } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { // printf( "xc = " ); // scanf( "%le", &wCentX ); // printf( "yc = " ); // scanf( "%le", &wCentY ); drawStars(); } } // Programa Principal int main(int argc, char** argv) { printf( "n = " ); scanf( "%d", &n_stars ); glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(0, 0); glutInitWindowSize(1280, 780); glutCreateWindow("Draw Stars"); init(); glutDisplayFunc(display); glutMainLoop(); return 0; }
Enviado em 25/04/2021 - 18:55h
Olhai em baixo, eu dei uma ajeitada nas funções de desenho. o glFlush deve ser executado sempre por último DEPOIS de desenhar tudo na tela.void drawStars(void) { // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.5, gerar_cores(), 1.0); wCentX = gerar_coordenada_aleatoria(); wCentY = gerar_coordenada_aleatoria(); GLint k; theta = (6.2831853 / 6); for (k = 0; k < 6; k++) { v[k].x = cos(theta * k) * wTamPad; v[k].y = sin(theta * k) * wTamPad; }; float d = (v[1].x - v[2].x)/2; float dp = sqrt(pow(d,2)+pow(Wh,2)); glPushMatrix(); glTranslatef(wCentX, wCentY, 0); glBegin(GL_POLYGON); glVertex2f(v[0].x,v[0].y); glVertex2f(v[1].x + dp, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(v[1].x, v[1].y); glVertex2f(wCentX, v[1].y+Wh); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x, v[2].y); glVertex2f(v[2].x - dp, v[2].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[3].x, v[3].y); glVertex2f(v[2].x - dp, v[4].y); glVertex2f(v[4].x, v[4].y); glVertex2f(v[5].x, v[5].y); glVertex2f(v[5].x + dp, v[5].y); glVertex2f(v[0].x, v[0].y); // } glEnd(); glPopMatrix(); // } } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); for (int i = 0; i < n_stars; i++) { // printf( "xc = " ); // scanf( "%le", &wCentX ); // printf( "yc = " ); // scanf( "%le", &wCentY ); drawStars(); } glFlush(); }
Enviado em 25/04/2021 - 19:16h
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Problemas com adaptadores wifi no Zorin (1)
Ocomon 6.0.1 - Problemas ao editar configurações estendidas (7)