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      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
13      SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
14      SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
15      SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
16      SDL_Init(SDL_INIT_EVERYTHING);
17      window = SDL_CreateWindow("SDL+OpenGL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,400,300,SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN );
18      glContext = SDL_GL_CreateContext(window);
19      SDL_GL_SetSwapInterval(1);
20      glewInit();
21  }
22  void Draw()
23  {
24      rtri++;
25      if(rtri==360)
26          rtri=0;
27      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
28      glLoadIdentity();
29      glScaled(1.0f/10,1.0f/10,1.0f/10);
30
31      glRotatef(rtri,0.0f,1.0f,0.0f);
32      glBegin(GL_TRIANGLES);
33          glColor3f(1.0f,0.0f,0.0f);
34          glVertex3f( 0.0f, 4.0f, 0.0f);
35          glColor3f(0.0f,1.0f,0.0f);
36          glVertex3f(-4.0f,-4.0f, 4.0f);
37          glColor3f(0.0f,0.0f,1.0f);
38          glVertex3f( 4.0f,-4.0f, 4.0f);
39          glColor3f(1.0f,0.0f,0.0f);
40          glVertex3f( 0.0f, 4.0f, 0.0f);
41          glColor3f(0.0f,0.0f,1.0f);
42          glVertex3f( 4.0f,-4.0f, 4.0f);
43          glColor3f(0.0f,1.0f,0.0f);
44          glVertex3f( 4.0f,-4.0f, -4.0f);
45          glColor3f(1.0f,0.0f,0.0f);
46          glVertex3f( 0.0f, 4.0f, 0.0f);
47          glColor3f(0.0f,1.0f,0.0f);
48          glVertex3f( 4.0f,-4.0f, -4.0f);
49          glColor3f(0.0f,0.0f,1.0f);
50          glVertex3f(-4.0f,-4.0f, -4.0f);
51          glColor3f(1.0f,0.0f,0.0f);
52          glVertex3f( 0.0f, 4.0f, 0.0f);
53          glColor3f(0.0f,0.0f,1.0f);
54          glVertex3f(-4.0f,-4.0f,-4.0f);
55          glColor3f(0.0f,1.0f,0.0f);
56          glVertex3f(-4.0f,-4.0f, 4.0f);
57      glEnd();
58
59      SDL_GL_SwapWindow(window);
60  }
61  int main(int argc, char *argv[])
62  {
63      quit = false;
64      Init();
65      while (!quit)
66      {
67          while(SDL_PollEvent(&sdlEvent))
68          {
69              if(sdlEvent.type == SDL_QUIT)
70              {
71                  quit = true;
72              }
73          }
74          Draw();
75          SDL_Delay(16);
76      }
77      SDL_DestroyWindow(window);
78      window = NULL;
79      SDL_Quit();
80      return 0;
81  }
时间: 2024-10-09 06:13:38

SDL2+OpenGL (2)绘制立体图形的相关文章

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

OpenGL ES 渲染立体图形

一.理解 顶点数据存储在申请的缓冲区中,其由数据总线传递给着色器(如果是片元着色器,还须将顶点转换成片元),再由着色器最终渲染到涂层上: 二.思路 1.设置涂层: 2.创建上下文: 3.清空缓存区: 4.创建渲染缓存区和帧缓存区: 5.开始绘制: 三.核心代码 //最终渲染 - (void)renderLayer { //设置窗口背景颜色 glClearColor(0.0, 0.0, 0.0, 1.0); //清空颜色缓存 glClear(GL_COLOR_BUFFER_BIT); //设置视口

从零开始openGL—— 二、 基本图形绘制

前言 这是从零开始openGL系列文章的第二篇,在上篇文章中介绍了基本的环境配置,这篇文章将介绍如何绘制基本图形(圆.三角形.立方体.圆柱.圆锥). 基本框架 下面这里我先给出opengl的3D绘图的基本框架 #include <windows.h> #include <string.h> #include <stdlib.h> #include <gl\glui.h> #include <math.h> #include "commo

openGL实现二维图形和三维图形

openGL是一个强大的底层图形库,其命令最初的时候使用C语言实现的.openGL定义了一个图形程序接口,常用于制作处理三维图像,功能强大,调用方便,在图像处理十分受欢迎. 实现图形主要使用的是openGL的一个工具包:GLUT. GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL prog

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

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

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

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

【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

如何对三维立体图形进行360度无死角观察呢?

我们在日常CAD绘图设计工作中,常常会接触到各种各样不同的三维立体图形.为了保证绘图的精准度,我们需要对绘制好的三维立体图形进行360度无死角观察.那么我们该如何具体操作呢?小编今天就和大家具体的讨论一下.演示步骤如下: 步骤一:绘制三维立体图形CAD图纸 首先我们先运行迅捷CAD编辑器专业版,然后打开或是重新绘制一张三维立体图形的CAD图纸. 步骤二:命令字符调用相应的动态观察指示 我们选择在命令框里进行以下命令指示操作: 1.我们在命令行输入"3DORBIT"命令字符,,调用约束动

[WebGL入门]二十,绘制立体模型(圆环体)

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 本次的demo的运行结果 立体的模型 这次稍微喘口气,开始绘制立体模型.这里说的[喘口气]是指本次的文章中没有出现任何新的技术知识点.只是利用到现在为止所介绍过的内容,来绘制一个立体的圆环体.到现在为止,只绘制了三角形和四边形,当然,在三维空间中绘制简单的多边形也没什么不对,但是缺点儿说服力.