opengl是系统自带的吗?是不是装上C语言,然后打进opengl程序,就可以出画面了?

Python08

opengl是系统自带的吗?是不是装上C语言,然后打进opengl程序,就可以出画面了?,第1张

你对计算机基础一窍不通,不明白你的前几年是怎么上的。。。

OpenGL是一种3D程序接口,你写的那个程序是个C程序,在VC中编译执行才能看到结果

不知道您的“无法打开window.h“是在哪里提示的,如果是在VC中,请考虑修改选项中的include path。

如果不是在VC中,请您赐教,您用的什么编译软件阿?

OpenGL有红宝书和蓝宝书,网上能搜索到。网站就是NEHE的教程了。你搜索OPENGL NeHe就能找到。

OpenGL是C/C++的图形库,也是C/C++语言了。Oracle与OCI技术是与C/C++的数据库编程的接口。

实战OpenGL三维可视化系统开发与源码精解:包括第1章三维图形世界、第2章OpenGL概述和第3章Oracle与OCI技术及编程基础。

上一节已经搭建好了开发环境,在正式学习如何用OpenGL前,我们先了解一下OpenGL的基础知识。

一、OpenGL是什么

一般它被认为是一个API,包含了一系列的函数,用来操作各种图形图像。事实上并不是,OpenGL仅仅是一个由一个名为Khronos组织制定并维护的规范。但是,我宁愿把它当成是API来理解,因为规范严格规定了OpenGL各函数的输入和输出,内部细节都是开发者自行决定。那么以API来理解,我认为是很合理的。(其实OpenGL函数大多是各显卡厂商开发的,所以如果你在用OpenGL开发过程中如果遇到问题,可以尝试更新显卡驱动的方式来解决,当然,前提是你还要确定一下显卡厂商)

如果你想了解OpenGL规范细节,可以访问https://www.opengl.org/registry/doc/glspec33.core.20100311.withchanges.pdf。

二、状态机

OpenGL是一个状态机,无论是官方信息还是网络上的信息,都解释的比较繁琐和复杂。

我认为,可以这么理解,当我们用OpenGL去绘制一个三角形时,要把OpenGL当前状态设置成可以绘制三角形的状态,比如颜色、线条啥的,渲染就出来三角形了。如果又想绘制线段了,就把OpenGL当前状态再设置成线段的状态,就可以渲染出线段了。

说白了,就是想绘制啥,就把状态设置先设置成啥,这就是状态机。(这是我自己理解的,哈哈)

三、核心模式与立即渲染模式

OpenGL3.2之前,它都是立即渲染模式,3.2之后,它使用了核心模式,抛弃了立即渲染模式。

那么什么是立即渲染模式,什么是核心模式呢?

我查了网上很多资料,都没有把这个事情说清楚,我通过各种文章,是这么理解的:

立即渲染模式是类似这样:

glBegin( GL_TRIANGLES )

    glVertex3f(-1.0f, -0.5f, -4.0f)

    glVertex3f( 1.0f, -0.5f, -4.0f)

    glVertex3f( 0.0f, 0.5f, -4.0f)

glEnd()

上面是绘制三角形的,具体可以不用追究。只要明白,设置好点,放在glBegin和glEnd之间,就能渲染出来三角形了。这就是立即渲染模式。

而核心模式就要关注细节了,它是如何用点和颜色渲染图形的,都需要开发者参与设计。

暂时我就理解到这个程度,后续边学边理解吧。

四、对象

OpenGL库是用C语言写的,我们知道C语言是面向过程的,之前的OpenGL也是面向过程的,比如,绘制一个图形,就要设置好顶点和颜色,如果再绘制一个,就要再设置一次。而OpenGL引入“对象(Object)”后,就方便多了。比如:

// 创建对象

unsigned int objectId = 0

glGenObject(1, &objectId)

// 绑定对象至上下文

glBindObject(GL_WINDOW_TARGET, objectId)

// 设置当前绑定到 GL_WINDOW_TARGET 的对象的一些选项

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800)

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600)

// 将上下文对象设回默认

glBindObject(GL_WINDOW_TARGET, 0)

上面这段是在网上抄过来的,不过,说明很详细,我们首先创建一个对象,然后用一个id保存它的引用(实际数据被储存在后台)。然后我们将对象绑定至上下文(就是设置内容,比如颜色、大小等等)的目标位置(例子中窗口对象目标的位置被定义成GL_WINDOW_TARGET)。接下来我们设置窗口的选项。最后我们将目标位置的对象id设回0,解绑这个对象。设置的选项将被保存在objectId所引用的对象中,一旦我们重新绑定这个对象到GL_WINDOW_TARGET位置,这些选项就会重新生效。

说白了,就是,创建一个对象,先用一个ID保存起来,并设置好内容,想用了,将这个ID跟设置目标(比如GL_WINDOW_TARGET)绑定,就可以用了,不用每次都重新设置。

好了,这次了解了一些OpenGL的基础,下一次就可以开心正式学习OpenGL了。