第一课、OpenGL绘制直线等等

[OpenGL]利用OpenGL绘制一些简单的图形 在几何学中有点,线,边,图形的概念,这些概念在计算机中也存在,但是可能会有所不同,比如数学中的直线是表示两端无限延伸的一条线,并且在数学中直线是没有宽度的,但是计算机中无法做到无限延伸,可以说计算机中的直线概念更像是数学中的线段概念,两个点的相连。同样点也是一样,数学中的点是表示一个坐标,并没有大小。计算机中无论图形设备多么精密也做不到显示一个无穷小的点,一般不设置点的大小的画,计算机会把点显示为1 阅读详情

//

//  main.c

//  opengl_ animationRect_0002

//

//  Created by  ch_soft on 12-1-16.

//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.

//


#include<stdio.h>

#include<GLUT/glut.h>

#include<OpenGL/gl.h> 

#include<OpenGL/glu.h>




//用于绘制窗口需要的图形

void RenderScene()

{

    //清除颜色缓冲区,即窗口的背景色

   glClear(GL_COLOR_BUFFER_BIT);

    

    //设置当前绘图使用的颜色

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

    

    //使用当前的颜色来绘制一个矩形

//    glRectf(100.0f, 150.0f, 150.0f, 100.0f);

    

//   1.画点

    GLfloat sizesPoint[2];//保存线宽的尺寸范围

    GLfloat stepPoint;//保存线宽度尺寸的最小间隔

    GLfloat curSizePoint;

    

   glGetFloatv(GL_POINT_SIZE_RANGE,sizesPoint);

   glGetFloatv(GL_POINT_SIZE_GRANULARITY,&stepPoint); 

    curSizePoint=sizesPoint[0];

    for (int i=0;i<25;i++) {

        glPointSize(curSizePoint); 

        glBegin(GL_POINTS);

        glVertex3f(25.0+i*8,200.0f,0.0f); 

        glEnd();

        curSizePoint +=stepPoint*2;

    }

    

    

//  2. 画直线

    

//    GLfloat sizesLine[2];//保存线宽的尺寸范围

//    GLfloat stepLine;//保存线宽度尺寸的最小间隔

    GLfloat curSizeLine=5;

//    glGetFloatv(GL_LINE_WIDTH_RANGE,sizesLine);

//    glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&stepLine);

    glLineWidth(curSizeLine); 

   glBegin(GL_LINES);

   glVertex3f(25.0f,160.0f,0.0f);

   glVertex3f(225.0f,160.0f,0.0f); 

    

    glEnd();

    

//   3.画连续的直线

   glBegin(GL_LINE_STRIP);

   glVertex3f(25.0f,150.0f,0.0f);

   glVertex3f(100.0f,150.0f,0.0f); 

   glVertex3f(100.0f,130.0f,0.0f);

    glEnd();

    

   glBegin(GL_LINE_STRIP);

   glVertex3f(0.0f,0.0f,0.0f);

   glVertex3f(10.0f,10.0f,0.0f);

   glVertex3f(20.0f,5.0f,0.0f);

    glEnd();

    

//   4.画封闭式直线

   glBegin(GL_LINE_LOOP);

   glVertex3f(125.0f,150.0f,0.0f);

   glVertex3f(200.0f,150.0f,0.0f); 

   glVertex3f(200.0f,130.0f,0.0f);

    glEnd();

    

//   画虚线

   glEnable(GL_LINE_STIPPLE); 

    glLineStipple(1,0x00FF);//第一个参数是倍数,第二个参数是一个十六进制数,用来表示如何显示的

   glBegin(GL_LINES);

   glVertex3f(25.0f,120.0f,0.0f);

   glVertex3f(225.0f,120.0f,0.0f); 

    glEnd();

    

    

   glLineWidth(3);

   glLineStipple(1,0xFF0C); 

   glBegin(GL_LINES);

   glVertex3f(25.0f,80.0f,0.0f);

   glVertex3f(225.0f,80.0f,0.0f);

    glEnd();

    

    

   glLineStipple(4,0xFF0C); 

   glBegin(GL_LINES);

   glVertex3f(25.0f,40.0f,0.0f);

   glVertex3f(225.0f,40.0f,0.0f); 

    glEnd();

   glDisable(GL_LINE_STIPPLE);

   //刷新opengl命令队列

    glFlush();

}


//改变大小时调用的函数

void ChangeSize(GLsizei w,GLsizei h)

{

    if (h==0) {

        h=1;

    }

   //设置视区尺寸

    glViewport(0, 0, w, h);

    //重置坐标系统,使用投影变换复位

   glMatrixMode(GL_PROJECTION);

   glLoadIdentity();

    

    if (w<=h) {

       glOrtho (0.0f,250.0f, 0.0f,250.0f*h/w, 1.0f, -1.0f);

    }else

    {

       glOrtho (0.0f,250.0f*w/h, 0.0f,250.0f, 1.0f, -1.0f);

    }

   glMatrixMode(GL_MODELVIEW);

   glLoadIdentity();

}

//用于初始化,常用来设置场景的渲染状态

void SetupRC(void)

{

   glClearColor(1.0f,1.0f, 1.0f,1.0f);

}



int main(int argc,char** argv)

{

   //    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

   //    glutCreateWindow("GLRect");

    

    glutInit(&argc, argv);

   //初始化GLUT库OpenGL窗口的显示模式

   glutInitDisplayMode (GLUT_SINGLE |GLUT_RGB |GLUT_DEPTH);

   glutInitWindowSize (500,500); 

   glutInitWindowPosition (100,100);

   glutCreateWindow (argv[0]);

    

    

   glutDisplayFunc(RenderScene);

   glutReshapeFunc(ChangeSize);

    

    SetupRC();

   glutMainLoop();

    

    return 0;

}

OpenGL绘制直线和圆(中点法) #include #include static int i=1; void Initial(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //设置窗口背景颜色为白色 glMatrixMode(GL_PROJECTION); //指定设置投影参数 gluOrtho2D(-200.0,200.0,-200.0,200 阅读详情

相关推荐

VS2012下基于Glut OpenGL绘制直线(添加设置直线宽度)示例程序:

在VS2012下使用glut绘制一系列直线的示例程序,绘制的是平行的几条直线,每条直线的宽度都不一样,效果如下图所示,按PC的UP,DOWN,LEFT,RIGHT按键可以从不同的角度查看该图形: // GlutLineswDemo.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include //圆周率宏 #d

yearafteryear的专栏 4830

基于MFC框架的OpenGL绘图:画直线(详解版)

文章目录前言一、前期准备1.成员变量2.鼠标响应事件二、正式画图1. 调用Display()函数2. 画网格3. 画线4. DDA算法总结 前言 这是上一篇文章的详解版本,容我和大家详细地分享一下画线思路 一、前期准备 1.成员变量 // 背景网格的间隔 const float GRIDGAP = 0.1f; // 记录起始点 CPoint startPoint; CPoint endPoint; // 判断绘图状态 bool isDrawing; // 保存画好的线 int

Frostleaf的博客 2939

【OpenGL】使用DDA算法绘制直线,使用Bresenham算法绘制直线和圆

//#include "stdafx.h" #include <windows.h> #include <GL/glu.h> #include <GL/gl.h> #include <GL/glut.h> #include<stdlib.h> #include <iostream> #include <algorithm> using namespace std; void display(void); void my

Elford的博客 2258

OpenGL-绘制一条线

【代码】OpenGL-绘制一条线。

u014723479的博客 1672

OpenGL(二)图形绘制之点线绘制

本次主要简单学习OpenGL中相关图形绘制的一些API。 以下程序主要是点的大小、直线线性和线宽绘制的示例。 #include #include #include #include #include //窗口的大小 GLsizei windowWidth; GLsizei windowHeight; void ReaderSc

爱拼才会赢 6315

利用OpenGL在窗口上绘制出三维坐标

/*今天刚开通优快云博客,以此记录我的编程学习之旅*/ 按时间顺序来讲,这是计算机图形学课程的第一个编程实践,大概是在一年前吧。这个程序是在nehe OpenGL框架下完成的,现在回头来看,这是一个很基础、很简单的小程序,但可以说是我编写(改编)的第一个图形窗口程序。 下面是程序绘制三维坐标的主体代码: int DrawGLScene(GLvoid) // 这个自定义函数用于完成窗口场景绘

Carnnation的专栏 1万+

OpenGL绘制直线

// main.c // opengl_ animationRect_0002 // // Created by ch_soft on 12-1-16. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #include #include #include #include //用于绘制窗口需要的

lixiaoguang20的博客 1万+

基于Opengl的画直线—BresenhamLine算法

画直线基本思想: 假设直线的斜率0 1.画起点(x0, y0). 2.准备画下一个点,X坐标加1,判断如果达到终点,则完成。否则找下一个点,由图可知要画的点要么为当前点的右邻接点,要么是当前点的右上邻接点。   2.1.如果线段ax+by+c=0与x=x1+1的交点y坐标大于(y+*y+1))/2则选右上那个点   2.2.否则选右下那个点。 3.画点 4.跳回第2步 5.结束

神风飘月の博客 6887

【计算机图形学 】绘制直线 | OpenGL+鼠标交互

计算机图形学实验一 用 DDA、Bresenham、中点画线法 三种方法实现直线绘制,并和鼠标点击事件进行交互。 在网上看了很久,有很多方法,最终选定了OpenGL,感觉最为简单。具体原理就不介绍了,会贴上完整代码,可以直接运行。 使用材料: vs2019,OpenGL的库(可以搜索如何用vs使用OpenGL的库,可以使用vs自带的插件或者其他方法,很方便) 要点: 1.设计画直线的算法。会设置起点和终点的全局变量,通过鼠标点击得到起点和终点的值,再传入函数,进行直线绘制。 2.改变鼠标点击和鼠标拖拽的响应

Rover95的博客 9180

计算机图形学初探——Bresenham直线光栅化算法绘制一条直线(详细版)

开发和运行环境 开发和运行环境为visual studio。使用OpenGL开放式图形库,使用的头文件为#include <GL/glut.h>。 算法的设计思想和实现技术 使用实现Bresenham直线光栅化算法,在此对该算法的原理进行阐述。 算法原理:假定直线的斜率k在0~1之间。此时,只需考虑x方向每次递增1个单位,决定y方向每次递增0或1。 设直线的当前点为(xi,y),对应的...

weixin_44214375的博客 4850

OpenGL编程(五)绘直线以及分析绘直线的算法

这次主要实现在窗口上绘制点、线以及修改其属性,另外还会分析画直线的原理和相关算法。1、在窗口指定位置画点 glBegin(GL_POINTS); glEnd(); 使用glBegin()和glEnd()方法向窗口中添加图形。要添加点时,glBegin()函数里的参数填GL_POINTS。然后通过glVertex3f()函数在指定的(坐标)位置画点,如:glVertex3

晨曦的博客 4536

[OpenGL]图元的绘制——空间点/直线;图元整理

glBegin可支持的OpenGL图元 模式 图元类型 GL_POINTS 将指定的各个顶点用于创建单个的点 GL_LINES 将指定顶点用于创建线段。两个顶点指定一条单独的线段。如果顶点个数是奇数,则忽略最后一个 GL_LINE_STRIP 将指定的顶点用于创建线段。每个顶点之后的每个顶点指定的是线条延伸到的下一个点

超越 5844

直线和多边形在OpenGL中的绘制

然后使用glBegin(GL_LINES)函数开始绘制直线,通过glVertex2f函数指定直线的两个端点坐标。在这段代码中,与绘制直线的代码类似,首先进行OpenGL环境的初始化,然后设置显示模式和窗口的尺寸与标题。本文介绍了在OpenGL中绘制直线和多边形的基本方法,并提供了相应的源代码示例。在OpenGL中,可以使用glBegin(GL_LINES)和glEnd()函数来绘制直线。在OpenGL中,可以使用glBegin(GL_POLYGON)和glEnd()函数来绘制多边形。

NckyPytorch的博客 1182

计算机图形学02:中点BH算法绘制直线

计算机图形学之中点BH算法绘制直线——附原理及详细代码

你的问题在于,读书太少而想得太多。 6580

OpenGL 绘制线(Qt)

OpenGL 绘制线(Qt)

dayuhaitang1的博客 1285

VC6.0环境下OpenGL绘制直线的实践教程

简介:在Windows平台上,使用Visual C++ 6.0(VC6.0)结合OpenGL库进行2D和3D图形编程是常见的开发实践。本文将介绍如何在VC6.0环境下,通过创建MFC对话框应用程序,配置OpenGL环境,并在其中使用OpenGL函数来绘制基本的直线图形。文章详细阐述了OpenGL的初始化过程,包括创建设备上下文、设置像素格式、初始化渲染上下文。此外,还展示了如何通过代码实现直线绘制,并说明了如何通过对话框控件来控制直线的起点和终点坐标,以及如何响应控件更改事件来更新绘图。

weixin_35973118的博客 1034

头歌-计算机图形学-点和直线的绘制

头歌-计算机图形学-CG1-v1.0-点和直线的绘制

weixin_52766015的博客 1万+

浏览器Cookie迁移实战:从Chrome导出导入登录态全攻略

Cookie是浏览器保存的会话凭证,服务端通过Set-Cookie将登录态种在本地。迁移Cookie本质上是把服务端认可的会话标识搬到新环境,从而免去重复输入账号密码和二次验证的麻烦。在换电脑、切浏览器或重装系统时,掌握Cookie的导出导入技术能显著提升效率。Chrome与Edge同属Chromium内核,存储结构相似,但字段差异(如Domain、SameSite、Secure)常导致迁移失败。通过浏览器扩展或CDP脚本可实现跨浏览器登录态迁移,适用于内网后台、开发环境等场景。本文从原理到实践,梳理Coo

weixin_42533120的博客 341

educoder 计算机图形学 实训答案-OpenGL初识&直线光栅化

第一关:OpenGL初识-点的绘制 第二关:OpenGL初识-简单图形绘制 第三关:直线光栅化-OpenGL绘制直线 第四关:直线光栅化-DDA画线算法 第五关:直线光栅化-中点画线算法

wait 4588

从零搭建企业级AI网关:基于LiteLLM的安全防护体系设计

本文详细介绍了如何从零搭建企业级AI网关,基于LiteLLM构建全面的安全防护体系。内容涵盖分层防御架构、敏感数据处理、合规性配置与审计追踪,以及生产环境部署策略,助力企业安全高效地集成LLM技术,确保数据安全和合规性。

qq_27496129的博客 1291

MATLAB信号处理实战:VMD分解参数调优全指南(附避坑技巧)

本文深入探讨了MATLAB中变分模态分解(VMD)的核心参数调优实战技巧。针对模态数K和惩罚系数α的选择难题,提供了从经验估计、可视化观察到量化指标辅助的渐进式调优框架,并分享了避免过分解与欠分解的实用避坑指南,旨在帮助工程师高效处理非平稳信号,提取清晰的物理特征。

weixin_29079671的博客 144
上一篇: Objective-c总结
下一篇: 写一个函数,完成内存移动,并为其写一个简单的测试用例来进行测试
ch_soft
博客等级 码龄17年 828粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值