- 主题:外行问一个关于openGL和计算机图形学的一个的问题
我觉得题主的问题可能是不理解gpu的原理
他以为如果两个三角形实际上是一个四边形拆分出来的
这不是很浪费吗
因为明明四个点可以一起渲染,却要非得拆成两组三个点
如果能把实际上是共面的四个点组合回去,就可以减少操作
但实际上,gpu是高度并行的
对gpu来说,把四边形拆成两个三角形就是处理的最快的方法
gpu编程很多时候,就是要靠一堆略显冗余的、但是互不依赖的操作
来充分发挥gpu的优势
反倒是你加了一堆逻辑判断的话,可能导致像素间出现依赖关系
使得他没法并行
【 在 seeeU 的大作中提到: 】
: 看了点openGL的文档,发现这个问题:
: 似乎四边形和多边形最后都是被GPU拆为三角形处理显示的
: 那么实际上GPU是无法真正知道三个以上的点是否真正的共面吧?
: ...................
--
FROM 120.244.239.*
在非GPU非shader程序里呢?
建模软件在一个平面里画了个n边形,这不就是多边形吗?这时候就有判断共面的要求了
显卡和渲染管线里只有三角形这点我已经了解了,但是在CPU程序里有时候还是要处理n点共面的问题吧?
【 在 sjtuDNA 的大作中提到: 】
: 光栅化过程的原理你没有搞清楚。
: 为什么GPU必须要处理三角形面片,而不是四边形面片。
: 最重要的原因就是:可以通过叉积判断一个点是不是在三角形内部
: ...................
--
FROM 175.190.123.*
谢谢,timer触发纹理贴图的变换我也在教程里看到过,没想到真是这样
那视频呢?教程里没有这个。我猜是把视频的每一帧都乘以一个变换矩阵,覆盖到目标四边形的前方?
【 在 sjtuDNA 的大作中提到: 】
: 动图的序列帧可以作为N个纹理对象,通过timer来进行触发这个纹理对象id的变换。
:
--
FROM 175.190.123.*
谢谢,所以在工程实现上,还是无法区分真共面或者两面之间有很小的偏转角这两种情况,其实和处理几个非共面点(三角形)的方式没啥区别,都是把这几个点用一个共同的组名来分组命名?
【 在 sjtuDNA 的大作中提到: 】
: 4点共面可以考虑:
: 1. 可以拆成有共同边的2个三角形,2个三角形的法向量的夹角小于epsilon。(一般模型输入的时候都带法向量,所以不用计算)。复杂度O(n)
: 2. W点到ABC面的距离,小于epsilon
: ...................
--
FROM 175.190.123.*
我最初发帖的时候,看过一个openGL教程,也看了一些讨论或问答(观点比较杂,有人说openGL早期版本里有quad后来不提倡了,有人说AMD驱动里有四边形),感觉GPU及渲染管线可能是只能处理三角形,或者只有三角形这个概念,因为如果是三角形的话片段着色器中可以很方便的根据三个顶点坐标做加权平均,但我对这点不是很确定。看了大家一些回复后就确定了,在渲染管线和GPU shader里不考虑共面问题
但是在很多建模软件里,n点共面的多边形是很常见的,所以估计其是在CPU程序里完成的这个建模和判定,所以我又继续问下去了,在CPU程序里如何判定和处理共面的问题
【 在 sixue1999 的大作中提到: 】
: 我觉得题主的问题可能是不理解gpu的原理
: 他以为如果两个三角形实际上是一个四边形拆分出来的
: 这不是很浪费吗
: ...................
--
FROM 175.190.123.*
你在建模软件的一个平面内,画了个n边形,建模软件会保存相关的坐标。
为什么你还要再判断他的坐标是共面的?
【 在 seeeU 的大作中提到: 】
: 在非GPU非shader程序里呢?
: 建模软件在一个平面里画了个n边形,这不就是多边形吗?这时候就有判断共面的要求了
: 显卡和渲染管线里只有三角形这点我已经了解了,但是在CPU程序里有时候还是要处理n点共面的问题吧?
: ...................
--
FROM 124.127.210.*
视频经过解码之后,也是一个序列帧的纹理啊,一帧一帧的图片。
【 在 seeeU 的大作中提到: 】
: 谢谢,timer触发纹理贴图的变换我也在教程里看到过,没想到真是这样
: 那视频呢?教程里没有这个。我猜是把视频的每一帧都乘以一个变换矩阵,覆盖到目标四边形的前方?
--
FROM 124.127.210.*
同上面的回答,你在建模软件里,在一个平面上,画了一个多边形,是通过在一个平面上这个前提条件,算出来的坐标点。那么为什么,还需要判断这些坐标点是共面的?
【 在 seeeU 的大作中提到: 】
: 我最初发帖的时候,看过一个openGL教程,也看了一些讨论或问答(观点比较杂,有人说openGL早期版本里有quad后来不提倡了,有人说AMD驱动里有四边形),感觉GPU及渲染管线可能是只能处理三角形,或者只有三角形这个概念,因为如果是三角形的话片段着色器中可以很方便的根据三个顶点坐标做加权平均,但我对这点不是很确定。看了大家一些回复后就确定了,在渲染管线和GPU shader里不考虑共面问题
: 但是在很多建模软件里,n点共面的多边形是很常见的,所以估计其是在CPU程序里完成的这个建模和判定,所以我又继续问下去了,在CPU程序里如何判定和处理共面的问题
:
--
FROM 124.127.210.*
用算法判断n点共面吧,浮点数肯定有阈值
一个简单算法是
用三个点生成一个平面,同时建一个空间坐标系(v1,v2,up),其它点转换到这个坐标系,同时判断z值是否等0,我如果都在阈值范围内,则共面
【 在 seeeU 的大作中提到: 】
: 在非GPU非shader程序里呢?
: 建模软件在一个平面里画了个n边形,这不就是多边形吗?这时候就有判断共面的要求了
: 显卡和渲染管线里只有三角形这点我已经了解了,但是在CPU程序里有时候还是要处理n点共面的问题吧?
: ...................
--
FROM 61.242.129.*
最初确实是,nVidia真的做了四边形渲染。当时他们宣传的游戏就是都是四边形。那是90年代初。
【 在 seeeU 的大作中提到: 】
: 我最初发帖的时候,看过一个openGL教程,也看了一些讨论或问答(观点比较杂,有人说openGL早期版本里有quad后来不提倡了,有人说AMD驱动里有四边形),感觉GPU及渲染管线可能是只能处理三角形,或者只有三角形这个概念,因为如果是三角形的话片段着色器中可以很方便的根据三个顶点坐标做加权平均,但我对这点不是很确定。看了大家一些回复后就确定了,在渲染管线和GPU shader里不考虑共面问题
: 但是在很多建模软件里,n点共面的多边形是很常见的,所以估计其是在CPU程序里完成的这个建模和判定,所以我又继续问下去了,在CPU程序里如何判定和处理共面的问题
:
--
FROM 72.199.121.*