SDL2+OpenGL (1)绘制多边形

 1  #include <GL/glew.h>
 2  #include <SDL2/SDL.h>
 3  #include <SDL2/SDL_opengl.h>
 4
 5  bool quit;
 6  SDL_Window* window;
 7  SDL_GLContext glContext;
 8  SDL_Event sdlEvent;
 9  bool Init()
10  {
11      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
12      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
13      SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
14      SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
15      SDL_Init(SDL_INIT_EVERYTHING);
16      window = SDL_CreateWindow("SDL+OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,400,300,SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
17      glContext = SDL_GL_CreateContext(window);
18      SDL_GL_SetSwapInterval(1);
19      glewInit();
20  }
21  void Draw()
22  {
23          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
24          glLoadIdentity();
25          glScaled(1.0f/10,1.0f/10,1.0f/10); //坐标系默认是[-1,1],这里先把坐标系拉伸一下
26          //绘制三角形
27          glTranslatef(-3.0f,0.0f,6.0f);
28          glBegin(GL_TRIANGLES);
29              glVertex3f(0.0f,1.0f,0.0f);
30              glVertex3f(-1.0f,-1.0f,0.0f);
31              glVertex3f(1.0f,-1.0f,0.0f);
32          glEnd();
33          //绘制矩形
34          glTranslatef(3.0f,0.0f,0.0f);
35          glBegin(GL_QUADS);
36              glVertex3f(-1.0f,1.0f,0.0f);
37              glVertex3f(1.0f,1.0f,0.0f);
38              glVertex3f(1.0f,-1.0f,0.0f);
39              glVertex3f(-1.0f,-1.0f,0.0f);
40          glEnd();
41          //绘制难看的多边形
42          glTranslatef(3.0f,0.0f,0.0f);
43          glBegin(GL_POLYGON);
44              glVertex3f(0.0f, 3.0f,0.0f);
45              glVertex3f(1.0f, 5.0f,0.0f);
46              glVertex3f(2.0f, 2.0f,0.0f);
47              glVertex3f(3.0f, 4.0f,0.0f);
48              glVertex3f(4.0f, 1.0f,0.0f);
49              glVertex3f(5.0f, 7.0f,0.0f);
50          glEnd();
51          //渲染
52          SDL_GL_SwapWindow(window);
53  }
54  int main(int argc, char *argv[])
55  {
56      quit = false;
57      Init();
58      while (!quit)
59      {
60          while(SDL_PollEvent(&sdlEvent))
61          {
62              if(sdlEvent.type == SDL_QUIT)
63              {
64                  quit = true;
65              }
66          }
67          Draw();
68          SDL_Delay(16);
69      }
70      SDL_DestroyWindow(window);
71      window = NULL;
72      SDL_Quit();
73      return 0;
74  }

运行结果

给图形添加颜色

 1 void Draw()
 2   {
 3           glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 4           glLoadIdentity();
 5           glScaled(1.0f/10,1.0f/10,1.0f/10);
 6           glTranslatef(-3.0f,0.0f,6.0f);
 7           glBegin(GL_TRIANGLES);
 8               glColor3f(1.0f,0.0f,0.0f);
 9               glVertex3f(0.0f,1.0f,0.0f);
10               glColor3f(0.0f,1.0f,0.0f);
11               glVertex3f(-1.0f,-1.0f,0.0f);
12               glColor3f(0.0f,0.0f,1.0f);
13               glVertex3f(1.0f,-1.0f,0.0f);
14           glEnd();
15           glColor3f(1.0f,1.0f,0.0f);
16           glTranslatef(3.0f,0.0f,0.0f);
17           glBegin(GL_QUADS);
18               glVertex3f(-1.0f,1.0f,0.0f);
19               glVertex3f(1.0f,1.0f,0.0f);
20               glVertex3f(1.0f,-1.0f,0.0f);
21               glVertex3f(-1.0f,-1.0f,0.0f);
22           glEnd();
23           glColor3f(0.0f,1.0f,1.0f);
24           glTranslatef(3.0f,0.0f,0.0f);
25           glBegin(GL_POLYGON);
26               glVertex3f(0.0f, 3.0f,0.0f);
27               glVertex3f(1.0f, 5.0f,0.0f);
28               glVertex3f(2.0f, 2.0f,0.0f);
29               glVertex3f(3.0f, 4.0f,0.0f);
30               glVertex3f(4.0f, 1.0f,0.0f);
31               glVertex3f(5.0f, 7.0f,0.0f);
32           glEnd();
33           SDL_GL_SwapWindow(window);
34   }

glRotatef旋转

 1 void Draw()
 2  {
 3          glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 4          glLoadIdentity();
 5          glScaled(1.0f/10,1.0f/10,1.0f/10);
 6
 7          glRotatef(120,1.0f,0.0f,0.0f);
 8
 9          glTranslatef(-3.0f,0.0f,6.0f);
10          glBegin(GL_TRIANGLES);
11              glColor3f(1.0f,0.0f,0.0f);
12              glVertex3f(0.0f,1.0f,0.0f);
13              glColor3f(0.0f,1.0f,0.0f);
14              glVertex3f(-1.0f,-1.0f,0.0f);
15              glColor3f(0.0f,0.0f,1.0f);
16              glVertex3f(1.0f,-1.0f,0.0f);
17          glEnd();
18          glColor3f(1.0f,1.0f,0.0f);
19          glTranslatef(3.0f,0.0f,0.0f);
20          glBegin(GL_QUADS);
21              glVertex3f(-1.0f,1.0f,0.0f);
22              glVertex3f(1.0f,1.0f,0.0f);
23              glVertex3f(1.0f,-1.0f,0.0f);
24              glVertex3f(-1.0f,-1.0f,0.0f);
25          glEnd();
26          glColor3f(0.0f,1.0f,1.0f);
27          glTranslatef(3.0f,0.0f,0.0f);
28          glBegin(GL_POLYGON);
29              glVertex3f(0.0f, 3.0f,0.0f);
30              glVertex3f(1.0f, 5.0f,0.0f);
31              glVertex3f(2.0f, 2.0f,0.0f);
32              glVertex3f(3.0f, 4.0f,0.0f);
33              glVertex3f(4.0f, 1.0f,0.0f);
34              glVertex3f(5.0f, 7.0f,0.0f);
35          glEnd();
36          SDL_GL_SwapWindow(window);
37  }

时间: 2024-08-01 03:48:53

SDL2+OpenGL (1)绘制多边形的相关文章

SDL2+OpenGL (2)绘制立体图形

绘制正四面体,即从四个面依次绘制三角形,其他立体图形方法类似 1 #include <GL/glew.h> 2 #include <SDL2/SDL.h> 3 #include <SDL2/SDL_opengl.h> 4 5 bool quit; 6 SDL_Window* window; 7 SDL_GLContext glContext; 8 SDL_Event sdlEvent; 9 GLfloat rtri=0; 10 bool Init() 11 { 12 S

OpenGL学习-------绘制简单的几何图形

本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的点,只有位置,没有大小.但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点.另一方面,无论图形输出设备(例如,显示器)如何精确,始终不能输出一个无穷小的点.一般情况下,OpenGL中的点将被画成单个的像素(像素的概念,请自己搜索之~),虽然它可能足够小,但并不会是无穷小.同一像素上,Op

[WebGL入门]十四,绘制多边形

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 这是本次的demo的运行结果 绘制流程 这次终于该绘制多边形了,之前的文章(十一,着色器的编译和连接)中介绍了HTML,顶点着色器和片段着色器,这次看一下javascript从开始到最终的全部处理.如果前两篇文章介绍的内容完全理解的话,这次的内容也应该不难了.或许会有不容易理解的地方,不要着急

CSharpGL(6)在OpenGL中绘制UI元素

CSharpGL(6)在OpenGL中绘制UI元素 主要内容 学习使用IUILayout接口及其机制,以实现在OpenGL中绘制UI元素. 以SimpleUIAxis为例演示如何使用IUILayout. 下载 您可以在(https://github.com/bitzhuwei/CSharpGL)找到最新的源码.欢迎感兴趣的同学fork之. 什么是OpenGL中的UI元素 您可以在源码中找到SimpleUIAxis这一示例. 如上图所示,有5个坐标轴,中间那个是一个普通的三维模型(元素),作为对照

百度地图实现鼠标绘制多边形并获取所有点坐标

百度地图开放平台http://lbsyun.baidu.com/ 这里使用的是Javascript API http://lbsyun.baidu.com/index.php?title=jspopular 实现鼠标绘制多边形主要用到百度地图JavaScript开源库鼠标绘制工具条库(http://lbsyun.baidu.com/index.php?title=open/library),提供鼠标绘制点.线.面.多边形(矩形.圆)的编辑工具条的开源代码库.且用户可使用JavaScript AP

用线框模式绘制多边形 glPolygonMode

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBegin(GL_TRIANGLES);//开始以g_ViewMode模式绘制 glColor3ub(182.0f,88.0f,157.0f); for(int j = 0; j < objAndRoofIndex.size(); j+=2) // 遍历所有的面 { for(int tex = 0; tex < 3; tex++) // 遍历三角形的所有点 { int index = pLoadModel

【Qt for Android】OpenGL ES 绘制彩色立方体

Qt 内置对OpenGL ES的支持,选用Qt进行OpenGL ES的开发是非常方便的,许多辅助类都已经具备.从Qt 5.0开始增加了一个QWindow类,该类既可以使用OpenGL绘制3D图形,也可以使用QPainter绘制2D传统的GDI+图形,5.0以前的QGLWidget不推荐再使用.在即将到来(官方时间是今年秋天)Qt 5.4会完全废弃QGLWidget,作为替代将会新增QOpenGLWidget和QOpenGLWindow类来方便OpenGL的编程. 好了废话不多说了,今天我会使用O

canvas绘制多边形

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>canvas绘制多边形</title> </head> <body> <canvas id="canvas" style="border: 1px solid darkcyan;" wid

怎么在CAD中绘制多边形

现在加入CAD行业的小伙伴们也越来越多了,但是对于才刚刚了解CAD的小伙伴们来说要想学好CAD,光有理论基础肯定是不行的,还是要经过不断的练习才可以的,那对于CAD小白来说,怎么在CAD中绘制多边形?小伙伴们都知道吗?如果不知道的小伙伴们就可以看看一下操作步骤,希望能够帮助到你们. 第一步:首先,打开电脑如果没有在电脑中打开一个浏览器,搜索框中搜索迅捷CAD编辑器,接着点击进入官网,点击下载安装最新版本的CAD编辑器.安装完成之后,将该软件进行启动进入到该软件的操作界面中. 第二步:进入到编辑器