OpenGL 3D拾取文章(转)

参考文章

深入探索3D拾取技术

OpenGL 3D拾取

射线和三角形的相交检测(ray triangle intersection test)

3D拾取的方法有两种

1、基于几何计算的射线-三角形相交法

2、使用OpenGL本身的拾取机制

这里主要使用第二种,理解起来相对简单一点。

借用大佬的通俗易懂的说法,这种方法的本质就是:

把每个三角形的id作为材质渲染到屏幕上,很容易就能找到鼠标对应的颜色值。这样多少三角形都能正确得到。 完全不用进行数学计算。

优点在于减少了大量不必要的计算开销——只对所有最终接受的模型进行判断。并且实际判断逻辑相对简单。

但缺点是需要一块额外的渲染表面用于渲染ID+深度数据,对于某些受限比较严格的设备可能有内存压力。

具体操作:待实现...

原文地址:https://www.cnblogs.com/jixiaohua/p/11396027.html

时间: 2024-10-29 19:05:42

OpenGL 3D拾取文章(转)的相关文章

OpenGL着色器中原六仔平台搭建程序解析--3D拾取

3D拾取指的是中原六仔平台搭建论坛:haozbbs.com Q1446595067 将鼠标在屏幕上点击的位置匹配到3d游戏场景中的某个图元上,该图元投影到屏幕上的像素恰好就是鼠标点击的像素.3D场景在很多交互情境中有重要作用,使开发者的应用能够将用户的点击对应到场景空间中的物体上.例如:用户可以通过点击选中某个物体或者物体的某一部分进行删除等后续操作.在这个教程中的demo中,我们将渲染几个物体,并且展示如何使用红色标记选中的三角形图元使其突出显示. 为了实现3D拾取,我们将用到第23章阴影贴图

关于Unity中的3D拾取

3D拾取 3D游戏实际上看到的是2D画面,我们在屏幕上点击,想要找到哪个3D物体,我们实际上是在一个2维平面内做3D拾取. 3D拾取实际上是,当玩家点击屏幕的时候,会从显示屏幕的摄像头发射一条射线,射到它所照射的平面上,射线第一次碰撞到的物体就是玩家所选的物体. 1: 游戏中需要用户触摸/点击 操作3D世界里面的3D物体,那么需要判断用户点击的是3D中的哪个物体;2: 3D拾取的原理: 从摄像机到屏幕空间的触摸点发出一条射线,这条射线第一个撞到哪个3D物体就会认为哪个3D物体被用户选择;3: 代

3D拾取技术

在unity3d中用户通过触摸屏选中虚拟3D世界中的物体进行操控,就需要掌握3d 拾取技术. 3d拾取技术非常的简单:由摄像机与屏幕上的触控点之间确定一条射线,由此射线射向3d世界, 最先和此射线相交的物体就是被选中的物体,在对此物体的操控编写相应的代码即可. 最需要下面的几句代码: For(var touch : Touch  in Input.touches)//对当前的触控事件循环监听 { var ray = Camera.main.ScreenPointToRay(touch.posit

第05课 OpenGL 3D空间

3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D世界中的2D对象.我们给三角形增加一个左侧面,一个右侧面,一个后侧面来生成一个金字塔(四棱锥).给正方形增加左.右.上.下及背面生成一个立方体. 我们混合金字塔上的颜色,创建一个平滑着色的对象.给立方体的每一面则来个不同的颜色. int DrawGLScene(GLvoid) // 此过程中包括所有

OpenGL——3D Rendering Pipeline

1 // Computer Graphics: HW3 2 // 3D Transformation: 3 4 5 #include <iostream> 6 #include <string> 7 #include <cstdlib> 8 #include <cmath> 9 #include <cstdio> 10 #include <vector> 11 #include <gl/glut.h> 12 #includ

第10课 OpenGL 3D世界

加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelgeuse)所写的.在本课中我们只对增加的代码做解释.当然只添加课程中所写的代码,程序是不会运行的.如果您有兴趣知道下面的每一行代码是如何运行的话,请下载完整的源码,并在浏览这一课的同时,对源码进行跟踪.好了现在欢迎来到名不见经传的第十课.到现在为止,您应该有能力创建一个旋转的立方体或一群星星了,对3D

opengl中拾取操作的实现

opengl采用一种比较复杂的方式来实现拾取操作,即选择模式.选择模式是一种绘制模式,它的基本思想是在一次拾取操作时,系统会根据拾取操作的参数(如鼠标位置)生成一个特定视景体,然后又系统重新绘制场景中的所有图元,但这些图元并不会绘制到颜色缓存中,系统跟踪有哪些图元绘制到了这个特定的视景体中,并将这些对象的标识符保存到拾取缓冲区数组中. 步骤: 1.设置拾取缓冲区:void glSelectBuffer(GLsizei n,GLunint *buff); 2.进入选择模式:指定选择模式采用函数:G

OpenGL 3D图形常用绘制函数

本文整理了一些opengl常用的绘制函数,api等,以作参考. GLUT 工具箱函数     GLUT工具箱提供几种图形3维图形的函数: void glutWireSphere(GLdouble radius,GLint slices, GLint stacks);  丝状球 void glutSolidSphere(GLdouble radius,GLint slices, GLint stacks); 实心球 void glutWireCube(GLdouble size); 丝状立方体 v

openGL 3D动画