opengl配置环境 模拟器用opengl还是directx

最近在课程中学习计算机图像,突然出现的glut库中的函数让我觉得很难应付。一行一行看完样本代码,终于明白了大概意思。在这里,我将分享绘制图像所需的基本功能。1.配置环境关于openGL的环境配置,可以看我之前写的关于环境配置的文章。点击文章左下角“阅读原文”即可访问原...

最近在课程中学习计算机图像,突然出现的glut库中的函数让我觉得很难应付。一行一行看完样本代码,终于明白了大概意思。在这里,我将分享绘制图像所需的基本功能。

1.配置环境
关于openGL的环境配置,可以看我之前写的关于环境配置的文章。点击文章左下角“阅读原文”即可访问原文。

2.主要功能设置

基本设置
绘制图像前需要初始化程序
需要在***in函数中添加初始化语句。

//这个函数用来初始化 GLUT 库glutInit(&argc, argv);//设置颜色模式和缓冲区格式glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);

颜色模式:
参数为GLUT_RGBA模式;GLUT_RGB模式;GLUT_INDEX模式
缓冲类型:Glu _ single-单缓冲窗口;Glu _ double-double缓冲窗口

GLUT_SINGLE实际上是执行窗口上所有的绘图指令,一般只用来显示单对非动态绘图
GLUT_DOUBLE。实际上画图指令是在一个缓冲区中完成的,画图指令完成后,通过交换指令将完成的图形立即显示在屏幕上,一般用于生成动画效果。

为绘制的表单设置表单
设置也可以写入***in函数。

//设置初始窗口的位置glutInitWindowPosition(100, 100); //设置初始窗口的大小glutInitWindowSize(400, 400); //根据前面设置建立窗口,参数设置为变体glutCreateWindow("实验"); //颜色函数设置Init(); //绘图时被调用的函数glutDisplayFunc(myDisplay); //改变窗体大小时进行图像重绘glutReshapeFunc(Reshape); //进行消息循环,用于显示窗体,窗体关闭后自动退出循环glutMainLoop();

glutwindowposition (int x,int y)窗口左上角是在计算机坐标(x,y)
glutdisplayfunc(myDisplay)中相对于my display参数的自定义成像函数。
glutreshape func(Reshape)中的Reshape参数是一个自行设置的重新成像功能。

重塑功能设置

void Reshape(int w, int h) { //glViewport负责把视景体截取的图像按照怎样的高和宽显示到屏幕上 gViewport(0, 0, (GLsizei)w, (GLsizei)h); //将当前矩阵指定为投影矩阵 glMatrixMode(GL_PROJECTION); //把矩阵设为单位矩阵 lLoadIdentity(); //让中心坐标(0,0)变成窗口的左下角 gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);}

颜色功能设置

void Init(){ //设置颜色 glClearColor(0.0, 0.0, 0.0, 0.0); //颜色过渡形式 glShadeModel(GL_FLAT); }

GlShadeModel函数用于控制opengl
参数中指定两点之间绘制其他点的颜色的过渡方式,一般是GL_SMOOTH(默认)自然过渡;GL_FLAT不过渡,颜色有层次。

该函数用来控制opengl中两个指定点之间绘制的其他点的颜色的过渡模式参数通常是GL_SMOOTH(默认)。GL_FLAT不过渡,颜色有层次。

3.绘图功能myDisplay功能的设置

void myDraw(int a, int b) { /*other code*/ //指定栅格化点的直径 glPointSize(1); //绘图准备 glBegin(GL_POINTS); glVertex2i(/*other code*/); lEnd(); }}void myDisplay(void) { myDraw(a,b) glFlush();//强制刷新缓冲,保证绘图命令将被执行}

/* other code */Set
glPointSize(1)为绘制的必要条件,表示图像的直径为一个像素,其参数可以决定整个图像的粗细。
glBegin()与glEnd()一起使用

原型void GL begin (glenum模式)
模式:创建元素的类型,如点、线等。可以是下列值:

函数说明GL_POINTS把每个顶点作为一个点进行处理GL_LINES把每个顶点作为一个独立的线段GL_LINE_STRIP绘制从第一个顶点到最后一个顶点依次相连的一组线段GL_LINE_LOOP绘制从第一个顶点到最后一个顶点首尾相连的一组线段GL_TRIANGLES把每个顶点作为一个独立的三角形GL_TRIANGLE_STPIP绘制一组相连的三角形GL_QUADS绘制由四个顶点组成的一组单独的四边形GL_QUAD_STRIP绘制一组相连的四边形

需要在glBegin()和glEnd()之间调用函数画图,glVertex()设置顶点坐标
glVertex2i输入整数点
GL vertex 2 f输入单精度点
glVertex2d输入双精度点
除此之外,还有其他点可以在glBegin()和glEnd中使用。

函数说明glVertex()设置顶点坐标glColor()设置当前颜色glIndex()设置当前颜色表glNor***l()设置法向坐标glCoord()产生坐标glCallList(),glCallLists()执行显示列表glTexCoord()设置纹理坐标glEdgeFlag()控制边界绘制glMaterial()设置材质

4.示例代码:绘制直线

#include <GL/glut.h>#include <***th.h>void myDraw(int x0, int y0, int x1, int y1) { int m = 0; if (abs(x1 - x0) >= abs(y1 - y0)) m = abs(x1 - x0); else m = abs(y1 - y0); float dx = (float)(x1 - x0) / m; float dy = (float)(y1 - y0) / m; float x = x0; float y = y0; glPointSize(1); for (int i = 0;i < m;i++) { glBegin(GL_POINTS); glVertex2i((int)(x + 0.5), (int)(y + 0.5)); glEnd(); x += dx; y += dy; }} void myDisplay(void) { myDraw(0, 0, 200, 300); glFlush();}void Init() { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT);}void Reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); lMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);}int ***in(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("实验1 直线绘制"); Init(); glutDisplayFunc(myDisplay); glutReshapeFunc(Reshape); lutMainLoop(); return 0;}

本文来自穷水尽更词穷投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/583712.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 06-09
下一篇 06-09

相关推荐

  • opengl配置环境 模拟器用opengl还是directx

    最近在课程中学习计算机图像,突然出现的glut库中的函数让我觉得很难应付。一行一行看完样本代码,终于明白了大概意思。在这里,我将分享绘制图像所需的基本功能。1.配置环境关于openGL的环境配置,可以看我之前写的关于环境配置的文章。点击文章左下角“阅读原文”即可访问原

    2023-06-09 09:08:01
    429 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信