创建OpenGL模型过程:
OPENGL坐标变换很有特点,为了简单描述先定义2个坐标系:
(1)世界坐标系:
无论如何变换,世界坐标系都不动,以屏幕中心为原点(0, 0, 0),你面对屏幕,你的右边是x正轴,上面是y正轴,屏幕指向你的为z正轴。
(2)当前绘图坐标系(即局部坐标系):
当前绘图坐标系是绘制物体时的坐标系。程序刚初始化时,世界坐标系和当前绘图坐标系是重合的,当用glTranslatef()等变换函数做移动和旋转时,都是改变的当前绘图坐标系,改变的位置都是当前绘图坐标系相对自己的x,y,z轴所做的改变,改变以后,再绘图时,都是在当前绘图坐标系进行绘图,所有的函数参数也都是相对当前绘图坐标系来讲的。
glLoadIdentity():另当前绘图坐标系从新回到世界坐标系的位置,另他们重合。
glTranslatef(x,y,z):使绘图坐标系相对世界坐标系沿x,y,z轴移动x,y,z个单位
其他关键概念:
(1)裁剪区域
占据窗口的的笛卡尔空间区域,只有在裁剪区域内的物体才可见。
void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)
注:在使用glOrtho之前,要先调用一下两个函数
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
(2)视口
裁剪区域的宽度和高度很少能够正好与窗口的宽度和高度(以像素为单位)相匹配,因此,坐标系必须从逻辑笛卡尔坐标映射到物理屏幕坐标,这个映射是通过视口的设置来指定的。视口就是窗口内部用于绘制裁剪区域的客户区域。
void glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
x,y参数指定了窗口内部视口的左下角。通常,x,y都是0。视口以实际屏幕坐标定义了窗口中的区域。
(3)屏幕坐标
Windows屏幕坐标以左上角为原点, X轴正方向朝右, Y轴正方向朝下.
Windows屏幕坐标和虚拟3D世界坐标不是简单映射的, 这个过程很复杂.我们只有将鼠标的热点的坐标通过Windows坐标到3D pipeline的屏幕坐标及3D pipeline的逆转换后, 才能得到在3D世界的对应点, 最后确定这个点是否有物体, 这就是Picking.
当窗口大小发生改变时,需要对裁剪区域进行同步的修改,一确保图像不会发生变形。
Example:
//建立裁剪区域(通常写在ChangeSize函数当中)
aspectRatio=(GLfloat)w/(GLfloat)h;
if(w<=h)
glOrtho(-100.0,100.0,-100.0/aspectRatio,100.0/aspectRatio,1.0,-1.0);
else
glOrtho(-100.0*aspectRatio,100.0*aspectRatio,-100.0,100.0,1.0,-1.0);
有的时候,我们在绘画图形是,当点坐标超过1.0时变无法出图,愿意就是没有设置好裁剪区域。
转自
http://www.cnblogs.com/irvinow/archive/2009/11/20/1606496.html
- 大小: 9.5 KB
分享到:
相关推荐
这篇学习笔记1主要会探讨基础的OpenGL设置和渲染原理。 在OpenGL编程中,我们首先需要设置上下文环境,这通常通过窗口系统接口(如GLUT或SDL)完成。在"base.cpp"这个文件中,我们可能看到初始化OpenGL窗口的代码,...
OpenGL 是一种广泛应用的图形库,主要用于创建2D和3D图像。它在OpenGLES的基础上运行,后者是OpenGL的嵌入式版本,适用于移动设备...学习OpenGL不仅涉及理论知识,还需要实践操作,通过实际项目来掌握这些概念和技巧。
在本节“code_opengl学习笔记3-1-在3D中绘制点”中,我们将深入探讨如何使用OpenGL来在三维空间中绘制点,这是构建更复杂图形的基础。 在OpenGL中,点是最基本的图元之一,它不具有长度、宽度或深度,但当在屏幕上...
Java OpenGL(JOGL)学习笔记 在学习 JOGL 时,我们需要了解图形显示器是如何工作的。图形显示器是一个由许多像素点组成的绘图区域,图形系统的核心是一个魔法画笔,这支画笔能以非常快的速度移动到一个确定的像素...
### OpenGL ES 2.0 学习笔记 #### 一、概述 《OpenGL ES 2.0 学习笔记》是一份针对英文版《OpenGL ES 2.0 Programming Guide》的阅读总结,旨在帮助读者更好地理解和掌握OpenGL ES 2.0的核心概念和技术要点。以下...
OpenGL学习笔记1 - 基本的运行框架 在计算机图形学领域,OpenGL是一个广泛使用的跨语言、跨平台的应用程序编程接口(API),用于渲染2D、3D图像。本笔记将聚焦于如何在Visual Studio 2012环境下搭建一个基本的...
在"OpenGL学习笔记.doc"中,可能包含以下内容: 1. **基本概念**:介绍OpenGL的架构、管线模型以及主要的数据类型和函数。 2. **环境设置**:详述如何在Visual C++ 6.0中创建OpenGL项目,设置链接器选项,以及如何...
在配合的文章《OpenGL学习笔记——JNI篇》中,作者通过JNI(Java Native Interface)来演示如何在Java程序中调用OpenGL进行图形绘制。JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互,这在需要高...
这份笔记包含了第15章之前的全部代码示例,这些示例是基于C++语言实现的,主要关注OpenGL的核心功能和编程模式。在压缩包中,我们可以找到一系列与OpenGL相关的源代码文件,如`五子棋.cpp`、`完成的清单3.9.cpp`等,...
4. **GLU工具库版本**:GLU(OpenGL Utility Library)是OpenGL的一个扩展库,提供了一系列辅助函数,如贝塞尔曲线、多边形操作等。了解GLU版本可以判断系统上是否有足够的功能来支持复杂的图形操作。 在【OpenGL ...
OpenGL超级宝典是一本深入学习图形编程的权威书籍,其中的笔记20主要涉及如何使用uniform变量和uniform块来向着色器输入数据。在3D图形编程中,OpenGL是一个广泛应用的图形库,它允许程序员控制图形硬件进行复杂的...
总之,这个OpenGL学习笔记展示了如何创建基本的3D立方体,包括设置图形环境、深度测试、视口和投影矩阵的配置,以及使用顶点数据绘制几何体。它是学习OpenGL基础和理解3D图形渲染流程的一个良好起点。
### Delphi XE2 之 FireMonkey 入门学习笔记 #### 一、Delphi XE2 FireMonkey 概述 Delphi XE2引入了一种全新的跨平台UI框架——FireMonkey(简称FMX),该框架支持Windows和Mac OS X操作系统,并且能够提供丰富的...
这篇教程和学习笔记将帮助你深入理解CEGUI的原理和使用方法。 首先,CEGUI的核心设计理念是组件化。这意味着它包含了一系列可复用的UI元素,如按钮、文本框、滚动条等,这些元素都可以单独配置和定制。在HTML和Word...
在"games101计算机图形学学习笔记分享"中,我们可以期待了解到一系列关于这个主题的基础概念、理论和技术。 首先,笔记可能会从基础的图形学原理开始讲解,包括二维和三维坐标系的概念,以及如何在笛卡尔坐标系中...
VTK,全称为 Visualization Toolkit,是一款强大的开源可视化库,尤其在3D图形渲染和科学数据可视化方面具有广泛的应用。...希望这篇“初学者的VTK学习笔记”能对你有所帮助,祝你在VTK的学习旅程上取得成功!
"OpenGL - Nate Robin.rar"这个压缩包文件包含了一系列与OpenGL相关的学习资源,由Nate Robin提供,可能对学习和理解OpenGL有极大帮助。Nate Robin在图形编程领域有一定的影响力,其资料被《OpenGL SuperBible》这样...