Gitter nicht angezeigt (alles ist schwarz)

Nov 27 2020

Ich wollte nicht auf dieselbe Frage von gestern zurückkommen, aber bevor ich die Funktion zum Ein- und Ausschalten des Netzes verwenden kann, muss ich zuerst wissen, ob mein Netz tatsächlich funktioniert. Ich habe neue Projekte erstellt die ganze Nacht versucht, das Raster anzuzeigen, aber es wird nicht angezeigt, der Bildschirm ist immer schwarz und es ist überhaupt nichts da.

#include "include\freeglut.h"   // OpenGL toolkit - in the local shared folder
#include <iostream>

//set up some constants
#define X_CENTRE 0.0      /* centre point of square */
#define Y_CENTRE 0.0
#define LENGTH   1.0      /* lengths of sides of square */

GLfloat red = 1.0, green = 1.0, blue = 1.0;
int w;
int h;

/* reshape callback function
executed when window is moved or resized */
void reshape(int width, int height)
{
glViewport(0, 0, width, height);
/* uses orthographic (parallel) projection
use xmin = -1, xmax = 1
ymin = -1, ymax = 1
znear = -1, zfar = 1 - not relevant here (2D) */
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
}


/* display callback function
called whenever contents of window need to be re-displayed */
//this is the all important drawing method - all drawing code goes in here
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);   /* clear window */
//glColor3f(red, green, blue);        /* white drawing objects */
glColor3f(0.8, 0.8, 0.8);

GLint i;

glEnable(GL_LINE_STIPPLE); //Activates the line-style feature

glLineStipple(1, 0xAAAA);  // Plots a dashed polyline

glBegin(GL_LINES);
for (i = 2; i <= 9; i++)
{
    glVertex3f(i * 0.1 * w, 0.0, 0.0);
    glVertex3f(i * 0.1 * w, 0.9 * h, 0.0);
}

for (i = 1; i <= 9; i++)
{
    glVertex3f(0.1 * w, i * 0.1 * h, 0.0);
    glVertex3f(w, i * 0.1 * h, 0.0);
}
glEnd();
glDisable(GL_LINE_STIPPLE);

glFlush();     /* execute drawing commands in buffer */
}

/* graphics initialisation */
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);   /* window will be cleared to black */
}

//rename this to main(...) and change example 2 to run this main function
int main(int argc, char** argv)
{
/* window management code ... */
/* initialises GLUT and processes any command line arguments */
glutInit(&argc, argv);
/* use single-buffered window and RGBA colour model */
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
/* window width = 400 pixels, height = 400 pixels */
glutInitWindowSize(400, 400);
/* window upper left corner at (100, 100) */
glutInitWindowPosition(100, 100);
/* creates an OpenGL window with command argument in its title bar */
glutCreateWindow("Example 1");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);

glutMainLoop();
return 0;
}

Antworten

2 Rabbid76 Nov 27 2020 at 12:34

Die Variablen wund ha werden nicht initialisiert. Initialisieren Sie die Variablen mit 1:

int w = 1;
int h = 1;

Wenn Sie jedoch die Scheitelpunktkoordinaten im Fensterbereich festlegen möchten, müssen Sie die orthografische Projektion ändern. Die Projektionsmatrix definiert den Bereich (Volumen) in Bezug auf den Betrachter (Betrachter), der auf das Ansichtsfenster projiziert wird. Bei der orthografischen Projektion wird dieser Bereich (Volumen) durch 6 Abstände (links, rechts, unten, oben, nah und fern) zur Position des Betrachters definiert.

glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

glOrtho(0.0, (float)w, (float)h, 0.0, -1.0, 1.0);

Funktion reshape:

void reshape(int width, int height)
{
    glViewport(0, 0, width, height);
    /* uses orthographic (parallel) projection
    use xmin = -1, xmax = 1
    ymin = -1, ymax = 1
    znear = -1, zfar = 1 - not relevant here (2D) */    #
    
    w = width;
    h = height;
    glMatrixMode(GL_PROJECTION);
    glOrtho(0.0, (float)w, (float)h, 0.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
}