opengl基本绘图绘制

1.点绘制

OpenGL提供了一系列函数。它们都以glVertex开头,后面跟一个数字和1~2个字母。例如:
glVertex2d(x,y)
glVertex2f(x,y)
glVertex3f(x,y,z)

glVertex3fv(GLfloat *p)

数字表示参数的个数:

2表示有两个参数,3表示三个;

字母表示参数的类型:

i表示32位整数(OpenGL中将这个类型定义为GLint和GLsizei),
f表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf),

d表示64位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd)。

glVertex2i(3, 3);
glVertex2f(3.0f, 3.0f);
glVertex3f(3.0f, 3.0f, 0.0f);

GLfloat p[] = { 3.0f,3.0f, 0.0f };

glVertex3fv(p)

注:OpenGL中定义的点可以有不同的尺寸,其函数形式为:

      void  glPointSize( GLfloat size );
  参数size设置点的宽度(以象素为单位),必须大于0.0,缺省时为1.0。

2.图元绘制

OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略)。

在调用glBegin函数时,我们需要传入一个参数,以告诉OpenGL我们将绘制什么类型的图元

2.1点

glBegin(GL_POINTS);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.0f);
glEnd();

2.2线

glBegin(GL_LINES);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.0f);
glEnd();

2.3三角形

 glBegin(GL_TRIANGLES);
     glVertex(1,0,1);
     glVertex(0,1,0);
     glVertex(1,1,0);
glEnd;

2.4正方形

glBegin(GL_QUADS);      

     glVertex3f(-1.0f, 1.0f, 0.0f);    

     glVertex3f( 1.0f, 1.0f, 0.0f);    
     glVertex3f( 1.0f,-1.0f, 0.0f);    
     glVertex3f(-1.0f,-1.0f, 0.0f);    
glEnd();

注:

1. 在正常情况下,OpenGL中的多边形的正面和反面是由绘制的多边形的顶点顺序决定的,逆时针绘制的面是多边形的正面,但是,在OpenGL中使用glFrontFace函数可以自定义多边形的正面。

该函数的参数mode指定了正面的方向。它可以是CL_CCW和CL_CW,分别指定逆时针和顺时针方向为多边形的正方向。

void glFrontFace(GLenum mode);

2. OpenGL规定多边形中的线段不能交叉,区域内不能有空洞,也即多边形必须是凸多边形(指多边形任意非相邻的两点的连线位于多边形的内部),不能是凹多边形,否则不能被OpenGL函数接受。

3.颜色

3.1颜色模式

OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。

RGBA模式中,数据直接就代表了颜色;而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表。
RGBA颜色
RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha不直接影响颜色,它将留待以后介绍。

glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的值,而A值采用默认;四个参数的版本可以分别指定R、G、B、A的值。例如:
void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);

glColor3f(1.0f, 0.0f, 0.0f);   表示不使用绿、蓝色,而将红色使用最多,于是得到最纯净的红色。
glColor3f(0.0f, 1.0f, 1.0f);   表示使用绿、蓝色到最多,而不使用红色。混合的效果就是浅蓝色。
glColor3f(0.5f, 0.5f, 0.5f);   表示各种颜色使用一半,效果为灰色。

3.2着色模式
OpenGl还提供了两种着色模式:光滑着色与平面着色

Flat coloring(平面着色)给整个图元涂上固定的一种颜色

Smooth coloring(平滑着色)将图元的各个顶点的不同颜色混合在一起,创建漂亮的色彩混合。

 glBegin(GL_TRIANGLES);

     glColor3f(1.0f,0.0f,0.0f);
     glVertex(1,0,1);   

     glColor3f(0.0f,1.0f,0.0f);

     glVertex(0,1,0);

     glColor3f(0.0f,0.0f,1.0f);
     glVertex(1,1,0);
glEnd;

这样三角形的三个顶点的颜色均不同,在三角形的中间进行了融合

四角形平面着色

glColor3f(0.5f,0.5f,1.0f);    
glBegin(GL_QUADS);     
     glVertex3f(-1.0f, 1.0f, 0.0f);  

    glVertex3f( 1.0f, 1.0f, 0.0f);   
     glVertex3f( 1.0f,-1.0f, 0.0f);   
     glVertex3f(-1.0f,-1.0f, 0.0f);   
glEnd();


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hemmanhui/archive/2009/07/10/4338707.aspx

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pyqtgraph是一个用于科学数据可视化的库,它具有OpenGL加速的绘图功能,可以方便地绘制各种图形和数据。在pyqtgraph中,可以使用OpenGL绘制坐标轴。 绘制坐标轴的过程如下: 1. 创建一个OpenGL窗口,可以使用`openGLWidget()`函数创建一个OpenGL窗口对象。 2. 创建一个`GLAxisItem`对象,用于表示一个坐标轴。 3. 设置坐标轴的属性,包括坐标范围、刻度间隔、刻度线颜色等。 4. 将坐标轴添加到OpenGL窗口中,可以使用`addItem()`函数或者`addItem(axis)`方法将坐标轴添加到OpenGL窗口中显示。 5. 在绘制之前,可以设置OpenGL的一些属性,如背景颜色、光照等。 6. 最后,调用`update()`函数将OpenGL窗口更新显示,这样就可以看到绘制的坐标轴了。 除了绘制坐标轴,pyqtgraph还提供了许多其他绘制功能,如绘制线条、散点图、曲线图等,可以根据需求选择合适的函数进行绘制。 总结起来,pyqtgraph通过使用OpenGL加速绘图,在绘制坐标轴时可以简单地创建一个`GLAxisItem`对象,设置好属性后添加到OpenGL窗口中即可。通过调用`update()`函数,可以将绘制的结果显示出来。 ### 回答2: pyqtgraph是一个用于绘制图表和图形界面的Python库,它是在PyQt库的基础上进行开发的。而OpenGL是一种用于绘制2D和3D图形的跨平台编程接口。在pyqtgraph中,结合使用OpenGL,我们可以实现高性能、高质量的坐标轴绘制。 在pyqtgraph中,绘制坐标轴需要使用到`GLAxisItem`类。 `GLAxisItem`类是pyqtgraph中封装OpenGL绘制轴的类。它提供了许多用于自定义坐标轴的方法和属性。 首先,我们需要通过导入`GLAxisItem`类来创建一个轴实例。然后,我们可以使用`setScale`方法设置轴的刻度范围,使用`setGrid`方法启用或禁用网格线,使用`setTickSpacing`方法设置刻度间隔等。 例如,我们可以创建一个OpenGL坐标轴的示例代码如下: ``` import pyqtgraph.opengl as gl import numpy as np from pyqtgraph.Qt import QtCore, QtGui # 创建OpenGL窗口 app = QtGui.QApplication([]) w = gl.GLViewWidget() w.show() # 创建坐标轴 axis = gl.GLAxisItem() w.addItem(axis) # 设置刻度范围 axis.setScale(0.1, 0.1, 0.1) # 设置刻度间隔 axis.setTickSpacing(major=(0.1, 0.1, 0.1), minor=(0.05, 0.05, 0.05)) # 启用网格线 axis.setGrid(1) # 设置轴的位置和尺寸 axis.translate(1, 1, 1) axis.setSize(x=1, y=1, z=1) # 开始事件循环 QtGui.QApplication.instance().exec_() ``` 在上述代码中,我们创建了一个OpenGL窗口并创建了一个`GLAxisItem`实例。然后,我们设置了刻度范围、刻度间隔,并启用了网格线。最后,我们将轴放置在指定的位置,并设置了轴的尺寸。这样,一个带有坐标轴的OpenGL窗口就绘制出来了。 通过这种方法,我们可以根据需要自定义各种类型的坐标轴。使用OpenGL进行绘制,可以获得更高的绘制性能和更好的图形质量。 ### 回答3: pyqtgraph是一个基于PyQt5的Python图形库,用于实现高性能科学和工程绘图。它结合了PyQt5的用户界面功能和OpenGL的高性能渲染功能,因此可以在图形界面中快速绘制各种图形。 在pyqtgraph中绘制坐标轴涉及到使用OpenGL进行渲染。使用OpenGL可以实现高性能的3D图形绘制和交互操作。 在pyqtgraph中,可以通过创建一个OpenGL画布来绘制坐标轴。具体步骤如下: 1. 导入必要的模块: ```python from pyqtgraph.opengl import GLViewWidget, GLGridItem from pyqtgraph.Qt import QtGui ``` 2. 创建一个OpenGL画布: ```python app = QtGui.QApplication([]) w = GLViewWidget() w.show() ``` 3. 创建一个网格对象,并将其添加到OpenGL画布上: ```python g = GLGridItem() w.addItem(g) ``` 4. 设置坐标轴范围和刻度: ```python w.opts['distance'] = 40 # 设置相机与场景之间的距离 g.setSize(x=10, y=10, z=10) # 设置网格的大小 g.setSpacing(x=1, y=1, z=1) # 设置网格的间距 ``` 5. 绘制坐标轴的线条: ```python x_axis = pyqtgraph.opengl.GLLinePlotItem(pos=np.array([[0, 0, 0], [10, 0, 0]]), color=(1, 0, 0, 1)) y_axis = pyqtgraph.opengl.GLLinePlotItem(pos=np.array([[0, 0, 0], [0, 10, 0]]), color=(0, 1, 0, 1)) z_axis = pyqtgraph.opengl.GLLinePlotItem(pos=np.array([[0, 0, 0], [0, 0, 10]]), color=(0, 0, 1, 1)) w.addItem(x_axis) w.addItem(y_axis) w.addItem(z_axis) ``` 通过以上步骤,我们可以在pyqtgraph中绘制出带有坐标轴的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值