OpenGL 中点关于直线、平面的对称(反射)变换的实现

在数学中我们推导求点关于直线、平面对称点的公式。这里我将这些公式再次温习一下,并用opengl的矩阵变换实现这些对称变换。注:计算机图形学中对称变换也叫反射变换

1.  点关于直线对称的对称变换。

设二维空间中任一条直线l:y=mx+h,那么点P(x0,y0)关于l的对称点P‘(x1,y1)的公式如下:

故变换矩阵为可看成先做缩放变换再做平移变换,然后再做整体缩放变换,矩阵如下:

同理三维空间中的直线也是如此。

2.       点关于平面对称的点:

设三维空间中任一平面π:Ax+By+Cz+D = 0;那么点P(x1,y1,z1)关于平面π对称的对称点P‘(x1‘,y1‘,z1‘)的数学公式如下:

故矩阵变换如下:

时间: 2024-11-09 00:09:15

OpenGL 中点关于直线、平面的对称(反射)变换的实现的相关文章

怎么用几何画板创建滑行反射变换

对于几何画板很多的用户不仅会用到平移.旋转.缩放.反射和迭代这些,如果有需求的话还可以通过“创建自定义变换”,建立新的变化规则来满足自己实现对象的变换.其实这就是自定义变换.对于自定义变换的例子有很多,下面本几何画板教程将以利用几何画板创建滑行反射变换为例作详细讲解. 具体的操作步骤如下: 步骤一 在绘图区域构造一条竖直的直线AB(按住Shift+构造直线),并且在右边构造一点C.  构造垂直的直线AB和点C示例 步骤二 选定点A.点B,执行“标记向量”,把点C按标记向量平移得到C'.再标记直线

OpenGL学习09_裁剪平面ClipPlane

除了视景体的6个裁剪平面(左.右.底.顶.近和远)之外,还可以另外再指定最多可达6个的其他裁剪平面,对视景体施加进一步的限制. 每个平面都是由它的方程式Ax + By + Cz + D= 0的系数所指定的.裁剪平面会根据模型和视图矩阵自动执行适当的变换.最终的裁剪区域将是视景体与其他裁剪平面定义的所有半空间的交集.记住,OpenGL会自动对部分被裁剪的多边形的边进行正确的重构. void glClipPlane(GLenum plane, const GLdouble *equation); 定

【openGL】画直线

1 #include "stdafx.h" 2 #include <GL/glut.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <stdio.h> 6 7 using namespace std; 8 9 10 void myDisplay(void){ 11 glClear(GL_COLOR_BUFFER_BIT); 12 //glRectf(-0.5f, -0.5f,

OpenGl学习笔记3之模型变换、视图变换、投影变换、视口变换介绍

模型变换.视图变换.投影变换.视口变换介绍 opengl中存在四种变换,分别是模型变换,视图变换,投影变换,视口变换.这四种变换是图形渲染的基本操作,实质上这四种变换都是由矩阵乘法表示(这些操作都是由一个4*4的矩阵来完成的),通过变换,我们可以看到各种通的显示效果,最简单的效果就是让图元沿着某个方向变换(放大,缩小,翻转等)或者对所要显示的图元进行裁剪.接下来我们就详细介绍这四种变换以及相互之间的联系. 我们要在屏幕上显示一个具有三维坐标的物体,大致需要以下步骤: 1.     进行模型,视图

OpenGL超级宝典第5版&amp;&amp;GLSL法线变换

在GLSL中,有一些情况需要把局部坐标系下的向量或点转换到视点坐标系下,如光照计算时,需要把法向转化到视点坐标系.如果是模型上一点p 转化到视点坐标系下,直接(model-view matrix )*p即可,但法线是向量,不是一个点,不能这样做.我们需要用法线矩阵来转换法线. 法线矩阵: 法线矩阵通常是模型视点矩阵(model-view matrix)左上角3x3矩阵的逆转置矩阵(inverse transpose). 但如果我们的model-view 矩阵不包含任何非一致缩放(non-unif

中点Bresenham算法光栅化画直线(个人总结精简版)代码超短!速度极快!

中点Bresenham算法光栅化画直线,每次只位移一个像素,精度高!此源码借助直线 y=x 做了一些转换,简化了主位移的处理,每次移动只需要 加减操作, 不需要乘除!速度极快!! 原理在最后,下面先贴上核心代码~ void Bresenham_LineTo(CDC *pDC, int x1, int y1, int x2, int y2) //中点Bresenham算法光栅化画直线 { float k = 1.0*(y2 - y1) / (x2 - x1); //斜率 int flag = 0;

OpenGL入门学习

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的

OpenGL理解

说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性. 1.与C语言紧密结合. OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的

【OpenGL】OpenGL初学

转载自:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率.16色来做吗?显然是不行的. 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物. OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性