OpenGl基础绘制二

OpenGL ES零基础入门二绘制三角形 前言在前文一、配置OpenGL ES渲染的上下文EAGLContext(context)二、配置渲染的图层layer(rendering layer)三、配置渲染缓冲区和帧缓冲区(renderBuffer and frameBuffer )四、着色器着色(user vertextShader and framentShader)《OpenGL ES 创建窗口》代码的基础上进行编码。在前面提到可编程管 阅读详情

渲染图形的基本流程

 1.创建GLSurfaceView
 2.初始化渲染器
 3.onSurfaceCreated(),onSurfaceChanged(),onDrawFrame()三个方法
 4.着色器(顶点着色器,片元着色器)
 5.顶点 颜色 纹理
 6.绘制
  1. 投影

    OpenGL中只提供了两种投影方式:

    一种是正射投影,另一种是透视投影
    正射投影(Orthographic Projection):没有远小近大效果
    
    正射投影,又叫平行投影。这种投影的视景体是一个矩形的平行管道,也就是一个长方体,如图所示。正射投影的最大一个特点是无论物体距离相机多远,投影后的物体大小尺寸不变。这种投影通常用在建筑蓝图绘制和计算机辅助设计等方面,这些行业要求投影后的物体尺寸及相互间的角度不变,以便施工或制造时物体比例大小正确。此种模式下,不需要设定照相机位置、方向以及视点的位置,也就是说不需要gluLookAt函数。
    OpenGL正射投影函数共有两个。
    一个函数是:
    void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top, GLdouble near,GLdouble far)
    它创建一个平行视景体。实际上这个函数的操作是创建一个正射投影矩阵,并且用这个矩阵乘以当前矩阵。其中近裁剪平面是一个矩形,矩形左下角点三维空间坐标是(left,bottom,-near),右上角点是(right,top,-near);远裁剪平面也是一个矩形,左下角点空间坐标是(left,bottom,-far),右上角点是(right,top,-far)。所有的near和far值同时为正或同时为负。如果没有其他变换,正射投影的方向平行于Z轴,且视点朝向Z负轴。这意味着物体在视点前面时far和near都为负值,物体在视点后面时far和near都为正值。
    另一个函数是:
    void gluOrtho2D(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top)
    它是一个特殊的正射投影函数,主要用于二维图像到二维屏幕上的投影。它的near和far缺省值分别为-1.0和1.0,所有二维物体的Z坐标都为0.0。因此它的裁剪面是一个左下角点为(left,bottom)、右上角点为(right,top)的矩形。
    
    2 透视投影(Perspective Projection):大部分3D游戏用的都是 近大远小效果
    透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失,成为灭点。它的视景体类似于一个顶部和底部都被切除掉的棱椎,也就是棱台。这个投影通常用于动画、视觉仿真以及其它许多具有真实性反映的方面。OpenGL透视投影函数也有两个,其中函数glFrustum()。
    此种情况下,需要用gluLookAt设定照相机位置、照相机方向(一般设置为(0,1,0))、以及视点位置。
    这个函数原型为:
    void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top, GLdouble near,GLdouble far);
    它创建一个透视视景体。其操作是创建一个透视投影矩阵,并且用这个矩阵乘以当前矩阵。这个函数的参数只定义近裁剪平面的左下角点和右上角点的三维空间坐标,即(left,bottom,-near)和(right,top,-near);最后一个参数far是远裁剪平面的Z负值,其左下角点和右上角点空间坐标由函数根据透视投影原理自动生成。near和far表示离视点的远近,它们总为正值。
    另一个函数是:
    void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar);
    它也创建一个对称透视视景体,但它的参数定义于前面的不同,如图所示。其操作是创建一个对称的透视投影矩阵,并且用这个矩阵乘以当前矩阵。参数fovy定义视野在X-Z平面的角度,范围是[0.0,180.0];参数aspect是投影平面宽度与高度的比率;参数zNear和Far分别是远近裁剪面到眼睛的距离,它们总为正值。
    

正射投影如下
正射投影
射透投影如下
这里写图片描述

这里写图片描述
2. 坐标变换
3. 绘制函数之间的区别
4. GLSL语言绘制三角形

OpenGL 实验一 绘制简单图形 OpenGL实验一 OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于Microsoft Windows上的Direct3D。OpenGL常用于CAD、虚拟现实、科... 阅读详情

相关推荐

[OpenGL]利用OpenGL绘制一些简单的图形

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

Joea的专栏 2万+

Spyder下配置python,OpenGL环境

三个库PyOpenGL,PyOpenGL-accelerate,freegult都要安装,否则会出现错误

wang_xinzhi的博客 1457

OpenGL绘制球体

OpenGL绘制球体 于(0,0,0) 绘制一个半径R=1 的球体函数: sphere_entry void sphere_entry(int du, int dv){ float gu = 3.1415926535 / du , gv = 2.0*3.1415926535 / (dv-1); float x, y, z ,r ; glPushMatrix(); #define MA...

ayww的博客 1万+

OpenGL两种投影方式

      投影变换是一种很关键的图形变换,OpenGL中只提供了两种投影方式,一种是正射投影,另一种是透视投影。不管是调用哪种投影函数,为了避免不必要的变换,其前面必须加上以下两句:     glMAtrixMode(GL_PROJECTION);    glLoadIdentity(); 事实上,投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的

Augusdi的专栏 2598

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

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

爱拼才会赢 6315

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

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

Carnnation的专栏 1万+

[OpenGL]OpenGL几何变换的秘密--投影(透视投影、平行投影、正投影)

1.透视投影 如下a图,透视投影是从某个投影点将物体投影到单一投影面上所得到的图形,透视投影符合人们心理习惯,即离视点近的物体大,离视点远的物体小,远到极点即为消失。在透视投影中,同一灯光下,改变物体的位置和方向,其投影也跟着发生变化 2.平行投影 如下b图,平行投影是在一束平行光线照射下形成的投影。在平行投影中,同一时刻改变物体的方向和位置,其投影也跟着发生变化;投影大小与物体和投影面之间的距离...

用01改变世界 7035

OpenGL(二)第一个OpenGL程序绘制三角形

一、代码 #include #include #include GLBatch batch; //批处理 GLShaderManager shaderManager; //着色器管理 void ChangeSize(int width, int height) { glViewport(0, 0, width, height); //改变窗口大小 } void SetupRc(v

小飞飞的博客 5498

[原]OpenGL基础教程(二)多边形绘制

上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行。 为什么要使用索引方式,总体来说提高性能。如何提高:使用顶点数组的好处是避免大量的函数调用。即避免每画一个顶点就调用1次glVertex*()。 另一个好处是避免多边形相邻顶点的冗余指定。例如正方体,分别描述6个正方形,会造成每个顶点被重复描述3次。 如果以上没有说服力,看看这个, gl.Begin(),gl.End()...

weixin_34417635的博客 238

OpenGL(二)图形绘制之多边形面的绘制

本次通过绘制一个三角形来学习相关的知识。 #include #include #include #include #include //窗口的大小 GLsizei windowWidth; GLsizei windowHeight; //旋转角度参数 static GLfloat xRot = 0.0f; static GLfloat yRot = 0.0f; //确定多边形的绕

爱拼才会赢 7458

OPENGL 简单图形绘制

直接上代码: #include <stdio.h> #include <GL/glut.h> #include <math.h> void myDisplay() { glClear(GL_COLOR_BUFFER_BIT); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glFlush(); } // 画圆 const int...

kevin_org 3090

OpenGL(二)——OpenGL图形绘制

上一篇我们介绍了什么是OpenGL,接下来,我们就开始用OpenGL实现简单的开发之旅吧。 大纲 今天将围绕以下几个环节,进行OpenGL的开发学习。 Xcode环境搭建 view的绘制之三角形绘制 好了,开始愉快的编程之旅吧,首先搭建开发环境。 一:Xcode环境搭建 GLFW编译: 1.下载GLFW的源码 —- GLWF用于创建OpenGL的Context,及创建显示窗口 2....

hirezy 4264

OpenGL 光源投影效果实现

在计算机图形学中,光源投影是一个非常重要的概念。通过模拟光线的投射,可以让场景更加真实,表现出更加逼真的阴影效果。在 OpenGL 中,我们可以通过使用光源投影技术,来实现不同类型的投射效果。通过以上代码,我们可以在 OpenGL 中实现点光源投影、平行光源投影和聚光灯投影等不同类型的投射效果。需要注意的是,由于光源投影耗费计算资源较多,因此在实际应用中需要根据具体情况进行调整。在这里,我们将会介绍三种不同的光源投影实现:点光源投影、平行光源投影和聚光灯投影。OpenGL 光源投影效果实现。

CodeWhizZ的博客 315

OpenGL编程(二)绘制矩形

上次只是创建了一个简单的窗口,把背景颜色修改为蓝色(默认是黑色),并没有向窗口添加任何图形。这次在上次代码的基础上往窗口中添加一个矩形,设置矩形的颜色,大小等。 1、添加矩形 在(参考上次代码)renderScene()函数里添加glRectf(-0.5f, -0.5f, 0.5f, 0.5f);就能在窗口上绘制一个矩形,默认的颜色是白色,如果需要修改颜色,在绘图前使用glColor3f函数来修

晨曦的博客 2万+

OpenGL 透视投影编程

透视投影是计算机图形学中常用的一种投影技术,用于在三维空间中将场景投影到二维屏幕上。本文将介绍如何在 OpenGL 中进行透视投影编程,并提供相应的源代码。在进行透视投影之前,我们需要先设置 OpenGL 的视口(Viewport),即屏幕上的可视区域。接下来,我们需要设置投影矩阵和模型视图矩阵,以便正确地将场景渲染到屏幕上。函数用于绘制场景,其中包括设置投影矩阵和模型视图矩阵、绘制一个简单的三角形,并通过调用。编译并运行上述代码,你将看到一个带有透视投影效果的简单三角形在窗口中显示出来。

ScriptCharm的博客 438

行人重识别(ReID)基础知识入门

行人重识别(Person re-identification)主要目的是针对出现在监控摄像头内的某个目标行人,准确快速地从监控网络其他摄像头内的大量行人中将这个目标行人标识出来。如图所示一个区域有多个摄像头拍摄视频序列,ReID的要求对一个摄像头下感兴趣的行人,检索到该行人在其他摄像头下出现的所有图片。

用于记录 1万+

OpenGL绘制方式

access表示对缓存对象的访问模式,通常是GL_MAP_INVALIDATE_RANGE_BIT,GL_MAP_INVALIDATE_BUFFER_BIT,GL_MAP_FLUSH_EXPLICIT_BIT,GL_MAP_UNSYNCHRONIZED_BIT中的一个或者多个组合,具体每个模式的定义参见OpenGL官方文档。access表示对缓存对象的访问模式,通常是GL_READ_ONLY(只读),GL_WRITE_ONLY(只写),GL_READ_WRITE(可读可写)中的一种。参数跟上面第6点一样。

Lce的专栏 2145

Keil v5.11给STM32烧录程序记录

1)安装KeilMDK511 2)安装ST Link下载器驱动 3)打开Keil v5,加载工程文件 4)load pack(Keil.STM32F1xx_DFP.1.1.0和Keil.STM32F0xx_DFP.1.2.0) 5)编译程序- 0 Error(s), 0 Warning(s). 6)烧录程序 ...

守望的距离 6282

OpenGL基础绘制

本文依然属于转载。 本文将会介绍使用OpenGL进行点,线,三角形乃至多边形的绘制。 下图是采用不同类型的图形效果 一、点 点”是一切的基础。 OpenGL提供了一系列函数指定一个点。它们都以glVertex开头,后面跟一个数字和1~2个字母。 例如: glVertex2d glVertex2f glVertex3f glVertex3fv 数字表示参数的个...

Arcobaleno 4452

SATA硬件电路设计实战:从接口规范到高速布线技巧

本文深入探讨了SATA硬件电路设计的核心要点与实战技巧。从接口物理电气规范、AC耦合电容与阻抗控制等基础,到FPGA/SoC高速收发器选型配置,再到应对6Gbps高速信号的PCB布局布线艺术,系统性地解析了SATA电路设计中的关键挑战与解决方案,助力工程师规避常见陷阱,实现稳定可靠的存储接口设计。

tech5的博客 532

转录组PCA分析3大常见误区:数据标准化、离群样本与批次效应处理

本文深入探讨转录组PCA分析中的三大常见误区:数据标准化、离群样本识别与批次效应处理。通过实战案例和R代码演示,揭示如何优化PCA结果以提升生物学解释力,特别关注数据标准化策略的选择和批次校正方法的应用,帮助研究者避免常见陷阱并获得可靠的转录组分析结果。

weixin_28362173的博客 373
上一篇: OpenGL基础之绘制
下一篇: CommonListDiaLogs 统一dialog 弹出框
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值