2D 白色网格不显示在背景上方

Posted

技术标签:

【中文标题】2D 白色网格不显示在背景上方【英文标题】:2D white grid not displaying above background 【发布时间】:2020-11-11 17:43:59 【问题描述】:

我正在尝试在紫色背景上创建一个 2D 空心网格;但是,每当我创建网格时显示的是一个白色窗口。

我使用 GL_Lines 创建了 2D 网格,因为我只希望边框为白色而不是网格内部,这不是发生的情况。

#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#include <cmath>
#include <string.h>
#include<GL/glut.h>


int gridX = 1000;
int gridY = 600;
void drawGrid();
void drawUnit(int, int);



void drawGrid() 

 for (int x = 0; x < gridX; x++) 
    for (int y = 0; y < gridY; y++) 
        drawUnit(x, y);
    
 


void drawUnit(int x, int y) 

    glLineWidth(1.0);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_LINE);//(x,y)(x+1,y)(x+1,y+1)(x,y+1)
      glVertex2f(x,y);
      glVertex2f(x+1, y);
      glVertex2f(x + 1, y);
      glVertex2f(x+1, y+1);
      glVertex2f(x + 1, y + 1);
      glVertex2f(x, y+1);
      glVertex2f(x, y + 1);
      glVertex2f(x, y);
    glEnd();

void Display() 
    glClear(GL_COLOR_BUFFER_BIT);
    drawGrid();
    glFlush();



 void main(int argc, char** argr) 
    glutInit(&argc, argr);
    glutInitWindowSize(gridX, gridY);
    drawGrid();
    glutCreateWindow("OpenGL - 2D Template");
    glutDisplayFunc(Display);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glClearColor(120.0f / 255.0f, 92.0f / 255.0f, 166.0f / 255.0f, 0.0f);
    gluOrtho2D(0.0, gridX, 0.0, gridY);

    glutMainLoop();
   

【问题讨论】:

如果你只是画一个网格,不要制作单独的正方形。你做了很多不必要的透支。您还可以轻松摆脱 drawGrid 中的嵌套循环。 【参考方案1】:

GL_LINE 不是 OpenGL 原始类型。但是GL_LINES 是行原始类型(见Line primitives):

glBegin(GL_LINE);

glBegin(GL_LINES);

GL_LINE 是一种多边形光栅化模式(参见glPolygonMode)。


网格中的一个单元格只有 1 个像素大小。这导致整个屏幕被填充为白色。为单元格使用不同的大小。例如:

void drawGrid()

    int size = 10;
    for (int x = 0; x < gridX; x += 10)
    
        for (int y = 0; y < gridY; y += 10)
        
            drawUnit(x, y, size);
        
    


void drawUnit(int x, int y, int size)

    glLineWidth(1.0);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_LINES);
      glVertex2f(x,y);
      glVertex2f(x+size, y);
      glVertex2f(x + size, y);
      glVertex2f(x+size, y+size);
      glVertex2f(x + size, y + size);
      glVertex2f(x, y+size);
      glVertex2f(x, y + size);
      glVertex2f(x, y);
    glEnd();

【讨论】:

我修好了,但是由于某种原因整个单位方格都是白色的,我只想要边框

以上是关于2D 白色网格不显示在背景上方的主要内容,如果未能解决你的问题,请参考以下文章

ps画布设置为透明后,画板依然显示白色,怎么恢复透明格子?

避免嵌套网格之间的不透明度继承

更新到 iOS 13 后 UISearchController UITextField 背景不显示白色

在css当中使用opacity:0.5;属性设置了透明背景,之后上面的字设置白色不显示,求如何在透明背景上显示白

C# Winform 在子窗体中显示不需要的背景颜色

ad封装背景网格怎么调出来