Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用SDL2和OpenGL编译简单三角形_C++_Opengl_Sdl_Nvidia_Ubuntu 18.04 - Fatal编程技术网

C++ 使用SDL2和OpenGL编译简单三角形

C++ 使用SDL2和OpenGL编译简单三角形,c++,opengl,sdl,nvidia,ubuntu-18.04,C++,Opengl,Sdl,Nvidia,Ubuntu 18.04,这个问题已经在互联网上被提出,但是我尝试的每一个代码示例似乎都与我个人使用OpenGL和SDL2生成简单三角形的所有尝试具有相同的结果。在切换到另一个窗口API之前,我的好奇心不允许我简单地让这种困境发生 至于我要解决的问题,我只是想弄清楚源代码是否是我的系统(考虑到我发现的所有代码示例看起来都很相似,并且似乎在两台不同的计算机上都是公开的),或者我自己是不是做错了什么 我的电脑在Ubuntu18.04上运行GTX1050M,我的驱动程序是UbuntuPPA上的官方nvidia驱动程序,它支持O

这个问题已经在互联网上被提出,但是我尝试的每一个代码示例似乎都与我个人使用OpenGL和SDL2生成简单三角形的所有尝试具有相同的结果。在切换到另一个窗口API之前,我的好奇心不允许我简单地让这种困境发生

至于我要解决的问题,我只是想弄清楚源代码是否是我的系统(考虑到我发现的所有代码示例看起来都很相似,并且似乎在两台不同的计算机上都是公开的),或者我自己是不是做错了什么

我的电脑在Ubuntu18.04上运行GTX1050M,我的驱动程序是UbuntuPPA上的官方nvidia驱动程序,它支持OpenGL 4.6

这是用于初始化SDL2和Glew的display.h my头文件

#ifndef DISPLAY_H
#define DISPLAY_H

#include<SDL2/SDL.h>
#include<string>

class Display
{
public:
    //initializes SDL2 and Glew
    Display( int width, int height, const std::string& title );

    //Clears the screen and creates a triangle
    void Clear();
    //Calls SDL_GL_SwapWindow()
    void Update();
    //Determines whether or not SDL_QUIT Event is called
    bool IsClosed();

    //Destroys application
    virtual ~Display();
protected:
private:
    Display( const Display& other )
    void operator=( const Display& other );

    SDL_Window* m_window;
    SDL_GLContext m_glContext;
    bool m_isClosed;

};
#endif //DISPLAY_H

拿一张图表纸,然后画出你的“三角形”的顶点坐标。你注意到什么了吗

  • 提示1:您绘制的三角形的面积为零

  • 提示2:查看上次glVertex调用的y值


您不使用任何视图矩阵或投影矩阵。这意味着您必须在剪辑空间中分别在规格化设备空间中设置三角形的顶点坐标

标准化设备空间是一个立方体,其中左、下、近坐标为(-1,-1,-1),右、上、远坐标为(1,1,1):

x轴到视口的投影、点从左到右的投影以及y轴点从下到上的投影。
由于三角形的所有y坐标相等,因此三角形与视口垂直:

glVertex3f( -0.6, -0.75, 0.5 );
...
glVertex3f(  0.6, -0.75, 0 );
...
glVertex3f(   -0, -0.75, 0 );   
交换三角形顶点坐标的y和z分量,以解决此问题:

glVertex3f( -0.6, 0.5, -0.75 );
...
glVertex3f(  0.6, 0.0, -0.75 );
...
glVertex3f( -0.0, 0.0, -0.75 ); 
预览:


请删除代码中的行号,因为行号会使任何人在编译/测试代码时感到尴尬。很抱歉,他复制并粘贴了行号。我现在就编辑。谢谢。我对3D图形基本上是新手。你能给我指一个在线资源来学习基础知识吗?谢谢你在你的文章中对细节的关注回答:我会在下班后立即尝试,希望我不会出现黑屏,我会收到每一个编辑任务谢谢你,我现在有一个三角形显示在我的屏幕上,在我真正开始使用OpenGL之前,我必须找到一些更基本的东西
CC=g++
OBJS= main.cpp
LINKER_FLAGS= -lSDL2 -lGL -lGLEW
COMPILER_FLAGS= -w -pedantic
OBJ_NAME=flagShip

$(OBJ_NAME):main.o display.o
    $(CC) $(COMPILER_FLAGS) -o $(OBJ_NAME) main.o display.o $(LINKER_FLAGS)

main.o:$(OBJS) display.h
    $(CC) $(COMPILER_FLAGS) -c $(OBJS) 

display.o: display.cpp display.h
    $(CC) $(COMPILER_FLAGS) -c display.cpp                                         
glVertex3f( -0.6, -0.75, 0.5 );
...
glVertex3f(  0.6, -0.75, 0 );
...
glVertex3f(   -0, -0.75, 0 );   
glVertex3f( -0.6, 0.5, -0.75 );
...
glVertex3f(  0.6, 0.0, -0.75 );
...
glVertex3f( -0.0, 0.0, -0.75 );