增加相机视距

Increase camera view distance

我写了一个小程序只是为了看看 OpenGL 如何与 SFML 一起工作:

#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
#include <SFML/Graphics.hpp>
int main(){
    sf::RenderWindow window(sf::VideoMode(700,700),
        "OpenGL test", sf::Style::Default);
    window.setFramerateLimit(60);   

    sf::Clock clock;
    sf::Time time;
    sf::Event event;
    float dt;
    bool run=true;
    glClearColor(50/255.0f, 75/255.0f, 50/255.0f, 1.0f);
    glTranslatef(0.0f, 0.0f, 1.0f);
    while(run){
        while(window.pollEvent(event))
            if(event.type==sf::Event::Closed)run=false;
        glRotatef(1.0f, 1.0f, 1.0f, -1.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glBegin(GL_LINE_STRIP);
        glVertex3f(-0.5f, -0.5f, 0.0f);
        glVertex3f(-0.5f, 0.5f, 0.0f);
        glVertex3f(0.5f, 0.5f, 0.0f);
        glVertex3f(0.5f, -0.5f, 0.0f);
        glVertex3f(-0.5f, -0.5f, 0.0f);
        glVertex3f(0.0f, 0.0f, -0.5f);
        glVertex3f(0.5f, 0.5f, 0.0f);
        glEnd();

        window.display();
    }
    return 0;
}

但是当我运行它时,部分对象消失了:

有没有办法增加观看距离?

只需更改最后一次 glVertex 调用之前的那个,来自: glVertex3f(0.0f, 0.0f, -0.5f); 到 glVertex3f(0.0f, 0.0f, 0.0f);

然后,请,请阅读:

https://www.sfml-dev.org/tutorials/2.4/window-opengl.php

OpenGL 假定从 -1 到 1 的任何维度都有最大值,因此您需要相对于该值标准化您的值。

例如你有一条从 0,0,-2.0 到 0,0,-32.3 的线段:(假设 -z 远离相机) 您必须相应地缩放每个向量以适合:

p1 := {0, 0, -2.0}
p2 := {0, 0, -32.3}
p2len := length(p2) //In this case just 32.3
p1 := {p1.x / p2len, p1.y / p2len, p1.z / p2len} // {0, 0, -0.0619}
p2 := {p2.x / p2len, p2.y / p2len, p2.z / p2len} // {0, 0, -1}