【问题标题】:Weird glitch involving my code涉及我的代码的奇怪故障
【发布时间】:2018-01-10 09:06:38
【问题描述】:

所以今天,我在弄一些例子,并决定要制作一个应用程序。所以我尝试了。当我单击一次时,屏幕变黑,再单击一次然后变白,并且在出现一些垃圾邮件块后,再次单击会使背景变黑,再单击一次,然后是白色。在再发送一些垃圾邮件后,该块内还有另一个块,并附有图片。

代码:

#include "SFML/Graphics.hpp"
#include "SFML/OpenGL.hpp"
#include <GL\GLU.h>
#include <iostream>
#include "cube.cpp"

void createblock() {

    gluPerspective(90.f, 1.f, 1.f, 300.0f);
    glClearColor(0.3f, 0.3f, 0.3f, 0.f);
    glMatrixMode(GL_PROJECTION);
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);

    glBegin(GL_QUADS);
    glVertex3f(-50.f, -50.f, -50.f);
    glVertex3f(-50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, -50.f);
    glVertex3f(50.f, -50.f, -50.f);


    glVertex3f(-50.f, -50.f, 50.f);
    glVertex3f(-50.f, 50.f, 50.f);
    glVertex3f(50.f, 50.f, 50.f);
    glVertex3f(50.f, -50.f, 50.f);

    glColor3f(1, 0, 1);
    glVertex3f(-50.f, -50.f, -50.f);
    glVertex3f(-50.f, 50.f, -50.f);
    glVertex3f(-50.f, 50.f, 50.f);
    glVertex3f(-50.f, -50.f, 50.f);

    glColor3f(0, 1, 0);
    glVertex3f(50.f, -50.f, -50.f);
    glVertex3f(50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, 50.f);
    glVertex3f(50.f, -50.f, 50.f);

    glColor3f(1, 1, 0);
    glVertex3f(-50.f, -50.f, 50.f);
    glVertex3f(-50.f, -50.f, -50.f);
    glVertex3f(50.f, -50.f, -50.f);
    glVertex3f(50.f, -50.f, 50.f);

    glColor3f(1, 0, 0);
    glVertex3f(-50.f, 50.f, 50.f);
    glVertex3f(-50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, -50.f);
    glVertex3f(50.f, 50.f, 50.f);

    glEnd();
}

sf::RenderWindow window(sf::VideoMode(800, 600), "SimpleBlocks");
sf::Event maine;

int main() {

    while (window.isOpen()) {
        // load defaults here

        while (window.pollEvent(maine)) {
            // events here
            if (maine.type == sf::Event::Closed) {
                window.close();
            } 
            if (maine.type == sf::Event::MouseButtonPressed) { 
                createblock();
                window.display();

                // make block later   
            }
        }
    }
}

图片:

imgur album here

【问题讨论】:

  • 有人知道吗?我真的很感激!
  • 我猜这很奇怪,哈哈!

标签: c++ opengl sfml


【解决方案1】:

在绘制之前您永远不会调用glClear(GL_COLOR_BUFFER_BIT),因此总会有剩余的片段或深度信息中的一些重叠。添加一个明确的呼叫应该可以解决您的问题。

【讨论】:

  • 它不起作用......它做同样的事情,但当我点击时没有黑白闪烁。它总是灰色的,它只是使立方体处于随机 fov 中
【解决方案2】:

gluPerspective 之前调用glPushMatrix,在createblock 末尾调用glPopMatrix

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多