OpenGL基础程序结构

news/2024/11/7 12:35:42/

用OpenGL编写的程序结构类似于用其他语言编写的程序。实际上,OpenGL是一个丰富的三维图形函数库,编写OpenGL程序并非难事,只需在基本C语言中调用这些函数,用法同Turbo C、Microsoft C等类似,但也有许多不同之处。
  本指南所有的程序都是在Windows NT的Microsoft Visual C++集成环境下编译连接的,其中有部分头文件和函数是为这个环境所用的,例如判别操作系统的头文件“glos.h”。此外,为便于各类读者同时快速入门,在短时间内掌握OpenGL编程的基本方法和技巧,指南中例子尽量采用标准ANSI C调用OpenGL函数来编写,而且所有例程都只采用OpenGL附带的辅助库中的窗口系统。此外,这样也便于程序在各平台间移植,尤其往工作站UNIX 操作系统移植时,也只需改动头文件等很少很少的部分。下面列出一个简单的OpenGL程序:
   例4-1 OpenGL简单例程 ( Simple.c )
 

   #include <GL/gl.h>#include <GL/glaux.h>#include "glos.h"void main(void){auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,500);auxInitWindow("simple");glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glRectf(-0.5,-0.5,0.5,0.5);glFlush();_sleep(1000);}

这个程序运行结果是在屏幕窗口内画一个红色的方块。
  下面具体分析整个程序结构:首先,在程序最开始处是OpenGL头文件:<GL/gl.h>、<GL/glaux.h>。前一个是gl库的头文件,后一个是辅助库的头文件。此外,在以后的几章中还将说明OpenGL的另外两个头文件,一个是<GL/glu.h>实用库的头文件,另一个是<GL/glx.h>X窗口扩充库的头文件(这个常用在工作站上)。接下来是主函数main()的定义:一般的程序结构是先定义一个窗口:  

auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
auxInitPosition(0,0,500,500);
auxInitWindow("simple");

 auxInitDisplayMode(AUX_SINGLE|AUX_RGBA)设置窗口显示模式为RGBA方式,即彩色方式,并且图形缓存为单缓存( SINGLE BUFFER )。 auxInitPosition(0, 0, 500, 500)定义窗口的初始位置,前两个参数(0, 0)为窗口的左上角点的屏幕坐标,后两个参数(500,500)为窗口的宽度和高度。auxInitWindow("simple")是窗口初始化,字符参数是窗口名称。
  然后是窗口内清屏:

glClearColor(0.0,0.0,0.0,0.0); 
glClear(GL_COLOR_BUFFER_BIT);

第一句将窗口清为黑色,第二句将颜色缓冲区清为glClearColor(0.0, 0.0, 0.0, 0.0)命令所设置的颜色,即同窗口背景颜色一致。
  再接着是在窗口内画一个物体:

glColor3f(1.0,0.0,0.0);
glRectf(-0.5,-0.5,0.5,0.5);

很明显,第一句设置物体颜色,函数中前三个参数分别为R、G、B值,最后一个参数是Alpha值,范围都从0至1;第二句绘制一个二维矩形。 注意 :OpenGL是针对三维图形而言,因此用作OpenGL编程绘制物体必须意识到任何一个物体都是三维的,具有空间性,而显示于屏幕上的物体都是三维物体在二维平面上的投影。
  从表面上看,上述程序代码很简单,实际上已经用到了缺省的投影形式(正射投影)。再看glFlush()函数,表示强制绘图完成。最后一句_sleep(1000),参数单位为毫秒,整句意思是保持现有状况一秒钟,然后结束程序运行。这个函数是VC++的库函数。
  总而言之,OpenGL程序基本结构为定义窗口、清理窗口、绘制物体、结束运行。 


 

获取上方资料以及更多 音视频学习资料见文末卡片


http://www.ppmy.cn/news/2158.html

相关文章

Spring——AOP

Spring中的可插拔组件技术 Spring AOP Spring AOP——Aspect Oriented Programming 面向切面编程AOP 的做法是将通用的、与业务无关的功能抽象封装为切面层切面可配置在目标方法执行前后&#xff0c;做到即插即用 不修改源码对程序功能进行拓展 AoP的关键概念 Spring AoP 与A…

现在的程序员真是越来越懒了,api 文档都懒得写!程序员:“api工具惯的”

为了让大家更能清楚了解 Api 相关往期内容&#xff0c;我写了一个阅读指引&#xff1a; 序号学习路径指引链接1Api -- 连接世界的 Super StarApi -- 连接世界的Super Star_不吃西红柿丶的博客-CSDN博客2软件吞噬世界&#xff0c;Api 快速入门到放弃软件吞噬世界&#xff0c;Ap…

在 Git Bash 中为 vim 设置 Dracula 配色

因为本人一直习惯了用 Jetbrains 家的产品&#xff0c;而且一直独钟 Dracula 配色&#xff0c;因此想要在 Git Bash 中为 vim 配一款 Dracula 配色。本博客将详细介绍如何为 vim 配置暗系主题 Dracula。 一、安装 Dracula 在 Dracula 的官网其实已经给出了关于如何在 vim 中配…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java线上学习系统8e88w

毕业设计说实话没有想象当中的那么难&#xff0c;导师也不会说刻意就让你毕设不通过&#xff0c;不让你毕业啥的&#xff0c;你只要不是太过于离谱的&#xff0c;都能通过的。首先你得要对你在大学期间所学到的哪方面比较熟悉&#xff0c;语言比如JAVA、PHP等这些&#xff0c;数…

node开发MongoDB

MongoDB mongoDB中文文档 数据库简介 数据库&#xff1a;持久化存储数据的仓库 分类&#xff1a; 关系型数据库&#xff1a;mysql、oracle、sql server、db2 非关系型数据库&#xff1a;mongodb、redis MongoDB简介 文档数据库&#xff0c;类似json结构&#xff0c;存储各种…

基于Intel Lake-UP3平台的超声设备方案设计,提供出色的图形和AI性能

超声系统要求 有效的超声系统可加快诊断速度&#xff0c;并帮助医生更快做出更有效的治疗决策。 为此&#xff0c;超声机器要求极高的处理性能和图形渲染效果以提高诊断准确性&#xff0c;并立即获取精确的图像。 类似地&#xff0c;还需要易于移动以适应不断变化的医疗场景和…

新编译原理的草稿

经典编译原理似乎已经够用了&#xff0c;为什么要研究新编译原理呢&#xff1f;在四型文法中&#xff0c;只实现了前两型&#xff0c;现在用的编译原理&#xff0c;仍然是“上下文无关文法”。沿着文法产生式替换的思路走下去&#xff0c;很艰难&#xff0c;不如另辟蹊径&#…

可以作为艺术作品欣赏的CT三维重建技术。

什么是CT三维重建技术&#xff1a;简而言之就是通过螺旋CT自带的计算机软件&#xff0c;对扫描获得的数据进行后处理&#xff0c;以达到辅助医生对病变和周围组织&#xff0c;及其与血管的关系进行分析和显示的目的&#xff0c;它极大地提高了影像诊断的直观性&#xff0c;准确…