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